web-dev-qa-db-ja.com

scapyでPCAPファイルを読み取る

IPv6ヘッダーとその他の拡張ヘッダーに格納されている情報を分析するために、IPv6トラフィックを含む約10GBのpcapデータがあります。これを行うには、Scapyフレームワークを使用することにしました。私はrdpcap関数を試しましたが、そのような大きなファイルの場合はお勧めしません。それはすべてのファイルをメモリにロードして、私の場合は行き詰まろうとします。私はネットでそのような状況ではsniffが推奨されることを発見しました、私のコードは次のようになります:

def main():
   sniff(offline='traffic.pcap', prn=my_method,store=0)


def my_method(packet):
   packet.show()

my_methodと呼ばれる関数で、各パケットを個別に受信し、それらを解析できますが、...呼び出したとき- show機能が組み込まれているフレームワークメソッドは次のようになりました: result

Wiresharkで開くと、パケットが適切に見えました。 result2

このパケットをscapyで解析して適切な結果を得る方法を教えてください。

編集:コメントの議論によると、PythonでPCAPファイルを解析する方法を見つけました。私の意見では、簡単な方法はpysharkフレームワークを使用することです:

import pyshark
pcap = pyshark.FileCapture(pcap_path) ### for reading PCAP file

Forループで読み込んだファイルを簡単に繰り返すことが可能です

for pkt in pcap:
    #do what you want

IPv6ヘッダーを解析するには、次の方法が役立つ場合があります。

pkt['ipv6'].tclass            #Traffic class field
pkt['ipv6'].tclass_dscp       #Traffic class DSCP field
pkt['ipv6'].tclass_ecn        #Traffic class ECN field
pkt['ipv6'].flow              #Flow label field
pkt['ipv6'].plen              #Payload length field
pkt['ipv6'].nxt               #Next header field
pkt['ipv6'].hlim              #Hop limit field
5
Krystian

更新

最新の scapy バージョンが現在supportipv6解析しています。したがって、-ipv6 ".pcap"ファイルscapy で解析するには、次のようにします。

from scapy.all import *

scapy_cap = rdpcap('file.pcap')
for packet in scapy_cap:
    print packet[IPv6].src

この質問が最初に尋ねられたときにコメントしたので、古いscapyバージョン(ipv6解析をサポートしていない)の場合:

  • pyshark を代わりに使用できます(pysharkはtsharkラッパーです)。

import pyshark

shark_cap = pyshark.FileCapture('file.pcap')
for packet in shark_cap:
    print packet.ipv6.src
  • またはもちろん tshark (wiresharkのターミナルバージョンの種類):

$ tshark -r file.pcap -q -Tfields -e ipv6.src
5
coder