Python-Scapy : 포트 번호를 서비스 이름으로 변환하는 방법은 무엇입니까?
문제
SCAPY의 TCP 층에는 소스 포트가 포함됩니다.
>>> a[TCP].sport
80
포트 번호를 서비스 이름으로 변환하는 간단한 방법이 있습니까? 나는 Scapy가있는 것을 보았다 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 /서비스가 있습니다.
나는 다른 dict self.mytcp_services를 채우는 좋은 솔루션을 발견했습니다
for p in scapy.data.TCP_SERVICES.keys():
self.MYTCP_SERVICES[scapy.data.TCP_SERVICES[p]] = p
제휴하지 않습니다 StackOverflow