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

时间:2009-06-10 16:08:06

标签: python tcp scapy

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 个答案:

答案 0 :(得分:16)

Python的socket模块将执行此操作:

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:1)

这可能对您有用(根据值过滤字典):

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

答案 3 :(得分:0)

如果您使用的是unix或linux,则会有一个包含此映射的文件/ etc / services。

答案 4 :(得分:0)

我找到了一个很好的解决方案,填补了另一个字典.MYTCP_SERVICES

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