2

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

有人知道我如何将端口映射到服务?

先感谢您

4

5 回答 5

20

Python 的socket模块会这样做:

>>> import socket
>>> socket.getservbyport(80)
'http'
>>> socket.getservbyport(21)
'ftp'
>>> socket.getservbyport(53, 'udp')
'domain'
于 2009-06-10T23:46:23.857 回答
5

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

>>> TCP_REVERSE = dict((TCP_SERVICES[k], k) for k in TCP_SERVICES.keys())
>>> TCP_REVERSE[80]
'www'
于 2009-06-10T23:57:50.760 回答
1

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

>>> [k for k, v in TCP_SERVICES.iteritems() if v == 80][0]
'www'
于 2009-06-10T23:50:58.683 回答
0

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

于 2009-06-11T23:12:29.927 回答
0

我找到了一个很好的解决方案来填充另一个字典 self.MYTCP_SERVICES

for p in scapy.data.TCP_SERVICES.keys():
  self.MYTCP_SERVICES[scapy.data.TCP_SERVICES[p]] = p 
于 2009-06-27T19:46:15.197 回答