用Python解析pcap文件

25

我正在尝试使用Python解析pcap文件。我的目标是能够提取TCP或UDP文件的类型以及它们的开始/结束时间。请问是否有任何建议,包括哪些软件包可能有用并附带文档,或者关于编写代码的一般性建议?

2个回答

26

我会使用python-dpkt

这是文档

但很抱歉,这是我知道的全部内容。

#!/usr/local/bin/python2.7

import dpkt

counter=0
ipcounter=0
tcpcounter=0
udpcounter=0

filename='sampledata.pcap'

for ts, pkt in dpkt.pcap.Reader(open(filename,'r')):

    counter+=1
    eth=dpkt.ethernet.Ethernet(pkt) 
    if eth.type!=dpkt.ethernet.ETH_TYPE_IP:
       continue

    ip=eth.data
    ipcounter+=1

    if ip.p==dpkt.ip.IP_PROTO_TCP: 
       tcpcounter+=1

    if ip.p==dpkt.ip.IP_PROTO_UDP:
       udpcounter+=1

print "Total number of packets in the pcap file: ", counter
print "Total number of ip packets: ", ipcounter
print "Total number of tcp packets: ", tcpcounter
print "Total number of udp packets: ", udpcounter

GitHub上的项目,文档请看这里


请注意,dpkt似乎无法解码流,例如从tcpdump正在写入的命名FIFO管道中。它会因为无法寻找而出错(在pcap中根本没有需要寻找的内容...)。 - Luc
目前在Debian存储库中没有Python 3版本的dpkt可用,但移植似乎很容易:http://stackoverflow.com/a/27480361/1201863 - Luc
8
为了避免出现异常: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd4 in position 0: invalid continuation byte 我们需要使用二进制模式打开文件: dpkt.pcap.Reader(open(filename,'rb')) - korst1k

12

你可能想要从scapy开始。


1
还有一个更新的版本的scapy与python3兼容,并添加了一些功能(http://github.com/phaethon/scapy)。 - Eriks Dobelis
pycapfile也可以使用。链接:https://pypi.python.org/pypi/pypcapfile - Pawel
pypcapfile或pycapfile - 在我的tcpdump文件上无法工作:以太网从55:32:fd:21:4d:7c到00:00:02:00:00:00类型未知,以太网从9d:a9:41:cd:bb:ca到00:04:02:00:00:00类型未知。 - user621819

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接