python-scapy: как перевести номера портов в имена сервисов? - PullRequest
1 голос
/ 10 июня 2009

Уровень TCP в Scapy содержит исходный порт:

>>> a[TCP].sport
80

Существует ли простой способ преобразования номера порта в имя службы? Я видел, что у Scapy есть TCP_SERVICES и UDP_SERVICES для перевода номера порта, но

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

Кто-то знает, как я могу сопоставить порты службам?

Заранее спасибо

Ответы [ 5 ]

16 голосов
/ 11 июня 2009
Модуль

Python's socket сделает это:

>>> import socket
>>> socket.getservbyport(80)
'http'
>>> socket.getservbyport(21)
'ftp'
>>> socket.getservbyport(53, 'udp')
'domain'
4 голосов
/ 11 июня 2009

Если это то, что вам нужно делать часто, вы можете создать обратное отображение TCP_SERVICES:

>>> TCP_REVERSE = dict((TCP_SERVICES[k], k) for k in TCP_SERVICES.keys())
>>> TCP_REVERSE[80]
'www'
1 голос
/ 11 июня 2009

Это может работать для вас (фильтрация словаря по значению):

>>> [k for k, v in TCP_SERVICES.iteritems() if v == 80][0]
'www'
0 голосов
/ 27 июня 2009

Я нашел хорошее решение, заполняющее другую личность самого себя.

for p in scapy.data.TCP_SERVICES.keys():
  self.MYTCP_SERVICES[scapy.data.TCP_SERVICES[p]] = p 
0 голосов
/ 12 июня 2009

Если вы используете Unix или Linux, существует файл / etc / services, который содержит это отображение.

...