簡體   English   中英

用scapy讀取PCAP文件

[英]Reading PCAP file with scapy

我有大約10GB的pcap數據和IPv6流量來分析存儲在IPv6標頭和其他擴展標頭中的信息。 為此,我決定使用Scapy框架。 我試過rdpcap函數,但對於這樣的大文件,不建議使用。 它試圖將所有文件加載到內存中並陷入我的情況。 我在網上發現,在這種情況下建議使用嗅探 ,我的代碼如下:

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


def my_method(packet):
   packet.show()

在名為my_method的函數中,我分別接收每個數據包,我可以解析它們,但....當我調用show function with in-build framework方法時,我得到了這樣的信息: 結果

當在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

更新

最新的版本現在支持 ipv6解析。 所以要用scapy解析一個ipv6“.pcap”文件現在可以這樣做:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM