python-scapy: cómo traducir los números de puerto a nombres de servicio?
Pregunta
Una capa TCP en Scapy contiene puerto de origen:
>>> a[TCP].sport
80
¿Hay una manera simple de convertir el número de puerto al nombre del servicio? He visto Scapy ha TCP_SERVICES
y UDP_SERVICES
para traducir el número de puerto, pero
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
Alguien sabe cómo puedo mapear puertos I a los servicios?
Gracias de antemano
Solución
Si esto es algo que hay que hacer con frecuencia, puede crear un mapeo inverso de TCP_SERVICES
:
>>> TCP_REVERSE = dict((TCP_SERVICES[k], k) for k in TCP_SERVICES.keys())
>>> TCP_REVERSE[80]
'www'
Otros consejos
toma módulo hará que:
>>> import socket
>>> socket.getservbyport(80)
'http'
>>> socket.getservbyport(21)
'ftp'
>>> socket.getservbyport(53, 'udp')
'domain'
Esto puede funcionar para usted (filtrando el diccionario basado en el valor):
>>> [k for k, v in TCP_SERVICES.iteritems() if v == 80][0]
'www'
Si está utilizando UNIX o Linux hay un archivo / etc / services que contiene esta asignación.
He encontrado una buena solución llenar otro self.MYTCP_SERVICES dict
for p in scapy.data.TCP_SERVICES.keys():
self.MYTCP_SERVICES[scapy.data.TCP_SERVICES[p]] = p
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow