2009-06-10 19 views
1

Une couche TCP contient Scapy port source:python-scapy: comment traduire les numéros de port en noms de service?

>>> a[TCP].sport 
80 

est-il un moyen simple de convertir le numéro de port pour nom de 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?

Nous vous remercions à l'avance

Répondre

3

Si cette est quelque chose que vous devez faire fréquemment, vous pouvez créer une cartographie inverse de TCP_SERVICES:

+0

c'est un dictionnaire étrange (objet scapy.dadict.DADict) et il n'a pas la méthode .iteritems() – Emilio

+0

Okay. J'ai juste jeté un oeil au code DADict et modifié ma solution. –

13

modules Python socket fera que:

>>> import socket 
>>> socket.getservbyport(80) 
'http' 
>>> socket.getservbyport(21) 
'ftp' 
>>> socket.getservbyport(53, 'udp') 
'domain' 
+1

j'ai ajouté un exemple parce que, même si vous fournissez le lien vers la documentation, il sera la plupart du temps inaperçu; J'espère que cela ne vous dérange pas. Salutations +1 :) – tzot

1

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' 
0

Si vous utilisez unix ou linux, il existe un fichier/etc/services qui contient ce mappage.

0

J'ai trouvé une bonne solution de remplissage autre dict self.MYTCP_SERVICES

for p in scapy.data.TCP_SERVICES.keys(): 
    self.MYTCP_SERVICES[scapy.data.TCP_SERVICES[p]] = p