2

我想从 pcap 文件中打印出数据包数据。下面的代码将数据包数据存储在一个数组中,但我不知道如何打印数组的每个元素,然后从那里拆分数据。数组上的 for 循环只会返回错误。

import dpkt
import socket

f = open('test.pcap', 'r')
pcap = dpkt.pcap.Reader(f)

info = []

for ts, buf in pcap:

    eth = dpkt.ethernet.Ethernet(buf)

    if not hasattr(eth, 'ip'):
        continue
    info.append(eth.ip)

f.close()

print info
4

1 回答 1

1

目前尚不清楚您究竟要打印什么。这取决于你在寻找什么。如果你想打印 tcp 数据,那么你可以这样做:

import dpkt
f = open('test.pcap')
pcap = dpkt.pcap.Reader(f)
for ts, buf in pcap:
    eth = dpkt.ethernet.Ethernet(buf)
    ip = eth.data
    tcp = ip.data

如果你想在更高层打印数据,你可以扩展上面的例子来做到这一点。例如HTTP如下:

import dpkt

f = open('test.pcap')
pcap = dpkt.pcap.Reader(f)

for ts, buf in pcap:
    eth = dpkt.ethernet.Ethernet(buf)
    ip = eth.data
    tcp = ip.data
    if tcp.dport == 80:
        http = dpkt.http.Request(tcp.data)
        print http.data

有关更多详细信息,请参阅此处的示例,或dpkt 项目中的示例

于 2015-06-20T00:36:00.903 回答