python-scapy: wie Portnummern in Dienstnamen zu übersetzen?
Frage
Eine TCP-Schicht in scapy enthält Quellport:
>>> a[TCP].sport
80
Gibt es eine einfache Möglichkeit, die Portnummer zu Servicenamen zu konvertieren? Ich habe gesehen, scapy hat TCP_SERVICES
und UDP_SERVICES
Portnummer zu übersetzen, aber
print TCP_SERVICES[80] # fails
print TCP_SERVICES['80'] # fails
print TCP_SERVICES.__getitem__(80) # fails
print TCP_SERVICES['www'] # works, but it's not what i need
80
Jemand weiß, wie kann ich Ports Dienstleistungen Karte?
Vielen Dank im Voraus
Lösung
Wenn dies etwas, was Sie brauchen, ist häufig zu tun, können Sie eine umgekehrte Abbildung von TCP_SERVICES
erstellen:
>>> TCP_REVERSE = dict((TCP_SERVICES[k], k) for k in TCP_SERVICES.keys())
>>> TCP_REVERSE[80]
'www'
Andere Tipps
Pythons Buchse Modul wird das tun:
>>> import socket
>>> socket.getservbyport(80)
'http'
>>> socket.getservbyport(21)
'ftp'
>>> socket.getservbyport(53, 'udp')
'domain'
Dies kann für Sie arbeiten (das Wörterbuch Filterung basiert auf dem Wert):
>>> [k for k, v in TCP_SERVICES.iteritems() if v == 80][0]
'www'
Wenn Sie mit UNIX- oder Linux gibt es eine Datei / etc / services, die diese Abbildung enthält.
Ich habe eine gute Lösung Füllung weitere dict self.MYTCP_SERVICES gefunden
for p in scapy.data.TCP_SERVICES.keys():
self.MYTCP_SERVICES[scapy.data.TCP_SERVICES[p]] = p