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源代码中找到了将端口号映射到名称的地方? –