簡體   English   中英

在Python中解析防火牆規則

[英]Parsing firewall rules in Python

我正在編寫腳本以從Cisco ASA的配置中解析防火牆規則。

我的輸入示例包括:

access-list myACL line 1 extended permit tcp host 10.8.13.200 host 10.32.53.22 eq 1122
access-list myACL line 2 extended permit tcp 10.8.13.0 255.255.255.0 host 10.1.206.17 eq 445 
access-list myACL line 3 extended permit udp host 10.8.13.200 eq 54345 host 10.1.206.17 eq 445
access-list myACL line 4 extended permit icmp any any

對於上面的三行,我想要的輸出為.csv格式,如下所示。 但是,這些也可能是要存儲在數據庫中的元組。

#aclName,lineNumber,action,protocol,sourceIP,sourcePort,destIP,destPort
myACL,1,permit,tcp,10.8.13.200,*,10.32.53.22,1122
myACL,2,permit,tcp,10.8.13.0/24,*,10.1.206.17,445
myACL,3,permit,udp,10.8.13.200,54345,10.1.206.17,445
myACL,4,permit,icmp,*,*,*,*

我在選擇該項目的方法時遇到了麻煩。 我看過很多選項,包括ats,shlex,甚至只是使用正則表達式,但是我很難確定最佳選擇是什么。 PLY在這里有幫助嗎?

什么是合適的方法呢?

如果僅需要輸出CSV目標,則建議您最熟悉的一種方法。 如果這是一次/臨時的事情,我會進一步建議您做得最快的事情。

如果是我-我可能會使用正則表達式。

我會用.split(" ")解析防火牆字符串

前6個字段似乎是可以預見的,因此可以包含多種表示形式的端點。 可能是(未經測試的代碼,但我希望您能理解):

parts = rule.split(" ")
aclName, _, lineNumber, _, action, protocol = parts[:6]
endpoints = parts[6:]

def get_endpoint(eps):
    host, port = "*", "*"
    if eps[0] == "host":
        host = eps[1]
        eps = eps[2:]
    elif eps[0] == "any":
        eps = eps[1:]
    else:
        host = eps[0] + "/" + mask_to_bits(eps[1])
        eps = eps[2:]

    if eps and eps[0] == 'eq':
        port = eps[1]
        eps = eps[2:]
    return host, port, eps

sourceIP, sourcePort, endpoints = get_endpoint(endpoints)
destIP, destPort, endpoints = get_endpoint(endpoints)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM