У меня есть приложение, которое захватывает и отображает сетевые пакеты. Пакеты представлены в двух формах в 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, где он сопоставляет номера портов именам? –