python-scapy: comment traduire les numéros de port aux noms de services?
Question
Une couche de TCP dans Scapy contient port source:
>>> a[TCP].sport
80
Y at-il un moyen simple de convertir le numéro de port au nom du service? Je l'ai vu Scapy a TCP_SERVICES
et UDP_SERVICES
pour traduire le numéro de port, mais
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
Quelqu'un sait comment puis-je des ports aux services?
Merci d'avance
La solution
Si cela est quelque chose que vous devez faire fréquemment, vous pouvez créer un mappage inverse de TCP_SERVICES
:
>>> TCP_REVERSE = dict((TCP_SERVICES[k], k) for k in TCP_SERVICES.keys())
>>> TCP_REVERSE[80]
'www'
Autres conseils
socket module faire:
>>> import socket
>>> socket.getservbyport(80)
'http'
>>> socket.getservbyport(21)
'ftp'
>>> socket.getservbyport(53, 'udp')
'domain'
Cela peut fonctionner pour vous (filtrage du dictionnaire en fonction de la valeur):
>>> [k for k, v in TCP_SERVICES.iteritems() if v == 80][0]
'www'
Si vous utilisez linux ou unix il y a un fichier / etc / services qui contient cette application.
J'ai trouvé une bonne solution de remplissage autre self.MYTCP_SERVICES dict
for p in scapy.data.TCP_SERVICES.keys():
self.MYTCP_SERVICES[scapy.data.TCP_SERVICES[p]] = p
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow