python-scapy:如何将端口号转换为服务名称?

2 投票
5 回答
7905 浏览
提问于 2025-04-15 12:09

Scapy中的TCP层包含源端口:

>>> a[TCP].sport
80

有没有简单的方法可以把端口号转换成服务名称?我看到Scapy有TCP_SERVICESUDP_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 个回答

1

这可能对你有帮助(根据值来过滤字典):

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

Python的socket模块可以实现这个功能:

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

如果你需要经常做这个事情,可以创建一个 TCP_SERVICES 的反向映射:

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

撰写回答