質問

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'

他のヒント

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'

あなたはこのマッピングを含むファイル/ etc / servicesにありますUNIXまたはLinuxを使用している場合。

私は別の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