Python-Scapy : 포트 번호를 서비스 이름으로 변환하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/976599

  •  13-09-2019
  •  | 
  •  

문제

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 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top