python-Scapy: come tradurre i numeri di porta per i nomi di servizio?
Domanda
Uno strato TCP in Scapy contiene porta sorgente:
>>> a[TCP].sport
80
C'è un modo semplice per convertire il numero di porta al nome del servizio? Ho visto Scapy ha TCP_SERVICES
e UDP_SERVICES
di tradurre il numero di porta, ma
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
Qualcuno sa come posso mappare le porte ai servizi?
Grazie in anticipo
Soluzione
Se questo è qualcosa che devi fare di frequente, è possibile creare una mappatura inversa del TCP_SERVICES
:
>>> TCP_REVERSE = dict((TCP_SERVICES[k], k) for k in TCP_SERVICES.keys())
>>> TCP_REVERSE[80]
'www'
Altri suggerimenti
presa modulo farà che:
>>> import socket
>>> socket.getservbyport(80)
'http'
>>> socket.getservbyport(21)
'ftp'
>>> socket.getservbyport(53, 'udp')
'domain'
Questo può funzionare per voi (filtrare il dizionario in base al valore):
>>> [k for k, v in TCP_SERVICES.iteritems() if v == 80][0]
'www'
Se si utilizza UNIX o Linux c'è un file / etc / services che contiene questa mappatura.
Ho trovato una buona soluzione di riempimento altri self.MYTCP_SERVICES dict
for p in scapy.data.TCP_SERVICES.keys():
self.MYTCP_SERVICES[scapy.data.TCP_SERVICES[p]] = p
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow