在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

有人知道我可以映射端口的服务?

感谢您预先

有帮助吗?

解决方案

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

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

其他提示

Python的插座模块将这样做:

>>> 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 /服务包含该映射。

我发现一个好的解决方案填充另一字典self.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