簡體   English   中英

使用Python / Scapy從PCAP獲取第二層

[英]Get second layer from PCAP with Python/Scapy

我正在嘗試從Python讀取和枚舉pcap文件,但是這樣做的話,即使存在第二層數據,我似乎也只能獲得第三層數據:

這是我的代碼:

import pprint
from scapy.all import *

target_cap = 'hello.pcap'

parser = PcapReader(root_dir + target_cap)

for i,p in enumerate(parser):
    pkt = p.payload
    pprint.pprint(pkt)

IE輸出:

<IP  version=4L ihl=5L tos=0x0 len=52 id=12220 flags=DF frag=0L ttl=128 proto=tcp chksum=0x453a src=192.168.2.100 dst=192.168.2.25 options=[] |<TCP  sport=sddp dport=mbap seq=1584390497 ack=1497344211 dataofs=5L reserved=0L flags=PA window=65325 chksum=0xe356 urgptr=0 options=[] |<Raw  load='\x00\x00\x00\x00\x00\x06\xff\x01\x00\x00\x00\x01' |>>>
<IP  version=4L ihl=5L tos=0x0 len=50 id=30949 flags= frag=0L ttl=64 proto=tcp chksum=0x7c13 src=192.168.2.25 dst=192.168.2.100 options=[] |<TCP  sport=mbap dport=sddp seq=1497344211 ack=1584390509 dataofs=5L reserved=0L flags=PA window=4096 chksum=0xd17d urgptr=0 options=[] |<Raw  load='\x00\x00\x00\x00\x00\x04\xff\x01\x01\x00' |>>>
<IP  version=4L ihl=5L tos=0x0 len=40 id=12226 flags=DF frag=0L ttl=128 proto=tcp chksum=0x4540 src=192.168.2.100 dst=192.168.2.25 options=[] |<TCP  sport=sddp dport=mbap seq=1584390509 ack=1497344221 dataofs=5L reserved=0L flags=A window=65315 chksum=0xe267 urgptr=0 |>>
<IP  version=4L ihl=5L tos=0x0 len=52 id=12240 flags=DF frag=0L ttl=128 proto=tcp chksum=0x4526 src=192.168.2.100 dst=192.168.2.25 options=[] |<TCP  sport=sddp dport=mbap seq=1584390509 ack=1497344221 dataofs=5L reserved=0L flags=PA window=65315 chksum=0xe34a urgptr=0 options=[] |<Raw  load='\x00\x00\x00\x00\x00\x06\xff\x01\x00\x00\x00\x01' |>>>
<IP  version=4L ihl=5L tos=0x0 len=40 id=30972 flags= frag=0L ttl=64 proto=tcp chksum=0x7c06 src=192.168.2.25 dst=192.168.2.100 options=[] |<TCP  sport=mbap dport=sddp seq=1497344221 ack=1584390521 dataofs=5L reserved=0L flags=A window=4096 chksum=0xd17f urgptr=0 |<Padding  load='\x00\x00\x00\x00\x00\x00' |>>>

在這種情況下,我只對第2層元數據感興趣,我該如何獲取呢?

您的代碼有意僅打印數據包的有效負載,而不打印標題。 這意味着您每次都打印第N + 1個圖層。

另外,與您的問題無關,您無需在示例程序中enumerate

嘗試以下方法:

for p in parser:
    pprint.pprint(p)

如果您要檢查數據包數據而不僅僅是打印數據,那也很容易:

# Sample code to print IP/MAC relationships:
for p in parser:
    if Ether in p and IP in p:
        print p[Ether].dst, p[IP].dst
        print p[Ether].src, p[IP].src

參考: http : //www.secdev.org/projects/scapy/doc/index.html

暫無
暫無

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

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