0
我有一個應用程序捕獲並顯示網絡數據包。數據包以兩種形式在TableView和TreeView中表示。我正在使用scapy來捕獲網絡數據包。檢測應用層協議,python?
我希望顯示數據包的最高協議級別(任何數據包的最高應用層),我面臨的問題是某些數據包的最終有效負載被命名爲協議本身(例如,DNS有效負載被命名爲DNS),但某些有效負載僅被命名爲Raw(例如,HTTP有效負載被命名爲Raw)。
所以我想知道是他們的任何方式,我可以檢測到這些協議,在Python中。
這是DNS數據包的輸出。
這是一個HTTP分組的輸出。
這裏是產生樹的代碼。
def packet2Tree(self,pkt):
if len(pkt.fields.keys()) == 0 or pkt.name == "":
return
self.rootNode = Node(pkt.name , self.RootNode)
field = pkt.fields_desc
for xfield in field:
self.childNode = Node(xfield.name , self.rootNode , str(pkt.getfieldval(xfield.name)))
self.packet2Tree(pkt.payload)
return self.RootNode
任何猜測如何,如果有一個內置的方式做到這一點解決這個問題
我不知道是否有一個內置的方式做到這一點,但你可以看看端口號並猜測? Scapy似乎理解大多數TCP數據包的端口號(例如,當你調用'repr(layer)'),所以也許查看源代碼? –
@PeterGibson:將您的評論作爲答案。 – TheCreator232
您是否在scapy源代碼中找到了將端口號映射到名稱的地方? –