питон-скапи:как перевести номера портов в названия служб?

StackOverflow https://stackoverflow.com/questions/976599

  •  13-09-2019
  •  | 
  •  

Вопрос

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

>>> a[TCP].sport
80

Есть ли простой способ преобразовать номер порта в имя службы?Я видел, как у Скапи 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

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

Заранее благодарю вас

Это было полезно?

Решение

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

>>> TCP_REVERSE = dict((TCP_SERVICES[k], k) for k in TCP_SERVICES.keys())
>>> TCP_REVERSE[80]
'www'

Другие советы

Питоновский розетка модуль сделает это:

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

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

>>> [k for k, v in TCP_SERVICES.iteritems() if v == 80][0]
'www'

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

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

for p in scapy.data.TCP_SERVICES.keys():
  self.MYTCP_SERVICES[scapy.data.TCP_SERVICES[p]] = p 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top