を私は次のように、リストとして、パケットのポート番号を取得したい:のpythonを使用して、リストとして、パケットのポート番号を取得する - Scapyスクリプト
[234][435][456][222][222]....
方法:
[234,456,456,222,22]....
ではなくとして
これを行う?Fetch source address and port number of packet - Scapy script
を私は次のように、リストとして、パケットのポート番号を取得したい:のpythonを使用して、リストとして、パケットのポート番号を取得する - Scapyスクリプト
[234][435][456][222][222]....
方法:
[234,456,456,222,22]....
ではなくとして
これを行う?Fetch source address and port number of packet - Scapy script
[OK]をクリックします。だから、これは最も洗練されたソリューションではないかもしれませんが、私はそれがあなたが探しているものを満たすと思います。私は、複数のキーを複数の値にマッピングする辞書を設定しました。 IPは、カウンタにマップされた複数のポートにマップされます。結果の辞書には情報が含まれています。パケットはあなたの投稿の日付と比較して評価されます。あなたの.pcapがその日付のものでないかどうかテストする前に、そのチェックを削除するか、時間の値を変更してください。お役に立てれば。あなたが使用する異なるポートをしたい場合は
ports = [port for pkt in plist if UDP in pkt or TCP in pkt
for port in [pkt.sport, pkt.dport]]
はもちろん、あなたがset
を使用することができます。
from scapy.all import *
ips = {}
pcap = rdpcap('test_pcap.pcap')
def build_dict(pkt):
port_count = 1
if pkt.haslayer(IP):
ip = pkt[IP].src
if pkt.haslayer(UDP) or pkt.haslayer(TCP):
port = pkt.sport
if ip in ips: # Checks to see if the IP is already there
if port in ips[ip]: # Checks to see if the port is already there.
port_count += ips[ip][port] #If so, increments the counter by 1
ips.setdefault(ip, {})[port] = port_count # Writes to the dictionary
for pkt in pcap:
time = pkt.time
if time > 1484481600 and time < 1484827200: # Checks to see if the packet is within the date range
build_dict(pkt)
else: pass
for k, v in ips.items():
print(k, v)
最も簡単な方法は、(自分のパケットリストをplist
をされたと仮定して)反復可能な理解を経由してリストを構築することです:
ports = {port for pkt in plist if UDP in pkt or TCP in pkt
for port in [pkt.sport, pkt.dport]}
あなたは、ダブルスをフィルタリング同じポートが表示されますどのように多くの時間をカウントするか、単にすべてのパケットからのすべてのポートとIPのリストを作成するために探していましたか? – Noob123
はい、1.倍数を除外し、同じポートが何回表示されているかを数えます。また、2.iはpcapからデータをフェッチするための開始時刻と終了時刻を指定したいと考えています。 15.01.2017〜19.01.2017 – RatDon