在python中解析pcap文件[重复]

Posted

技术标签:

【中文标题】在python中解析pcap文件[重复]【英文标题】:Parsing a pcap file in python [duplicate] 【发布时间】:2013-08-17 20:35:52 【问题描述】:

我正在尝试通过 python 中的 pcap 文件进行解析。我的目标是能够提取 TCP 或 UDP 文件的类型以及它们开始/结束的时间。是否有人对某些可能有用的软件包以及他们的文档或编写它的一般建议有任何建议?

【问题讨论】:

【参考方案1】:

您可能希望以scapy 开头。

【讨论】:

还有新版本的 scapy 与 python3 兼容并增加了功能 (github.com/phaethon/scapy)。 pycapfile 也可以使用。链接:pypi.python.org/pypi/pypcapfile 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 类型未知【参考方案2】:

我会使用python-dpkt。 这是documentation。

抱歉,我只知道该怎么做。

#!/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 上的项目,文档here

【讨论】:

请注意,dpkt 似乎无法解码流,例如来自 tcpdump 正在写入的命名 fifo 管道。它在无法搜索时出错(无论如何都不需要在 pcap 中搜索......)。 dpkt 没有可用的 python 3 版本(至少在 Debian 存储库中),但移植它似乎很容易:***.com/a/27480361/1201863 为了防止异常:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd4 in position 0: invalid continuation byte我们需要使用二进制模式打开文件:dpkt.pcap.Reader(open(filename,'rb'))

以上是关于在python中解析pcap文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python解析pcap文件

python处理pcap追踪tcp流

Python-对Pcap文件进行处理,获取指定TCP流

请问*.pcap文件都是啥软件产生的啊?wireshark我知道保存的文件格式是.pcap文件,请问还有别的软件吗?

pcap文件用啥软件查看。

pcap中tcp包的'flags'属性值在python中由dpkt读取时表示什么?