使用Dpkt解析包

#!/usr/bin/python
#coding=utf-8
import dpkt
import socket
import optparse
 
def printPcap(pcap):
    # 遍历[timestamp, packet]记录的数组
    for (ts, buf) in pcap:
        try:
            # 获取以太网部分数据
            eth = dpkt.ethernet.Ethernet(buf)
            # 获取IP层数据
            ip = eth.data
            # 把存储在inet_ntoa中的IP地址转换成一个字符串
            src = socket.inet_ntoa(ip.src)
            dst = socket.inet_ntoa(ip.dst)
            print '[+] 源地址: ' + src + ' --> 目标地址: ' + dst
        except:
            pass
 
def main():
    parser = optparse.OptionParser('[*] Usage : ./pcapTest.py -f <file>')
    parser.add_option('-f',dest='fileName',type='string',help='specify target filename')
    (options,args) = parser.parse_args()
    fileName = options.fileName
 
    if fileName == None:
        print parser.usage
        exit(0)
    else:
        #f = open('geotest.pcap')
        f = open(fileName)
        pcap = dpkt.pcap.Reader(f)
        printPcap(pcap)
 
if __name__ == '__main__':
    main()

`dpkt`是一个用于解析网络协议数据(如TCP/IP、UDP、HTTP等)的Python库,但它并不直接支持PcapNG(Packet Capture Next Generation)文件格式。PcapNG是一种新的PCAP文件格式,相比传统的PCAP文件,它更现代且功能更强大。如果你有一个PcapNG文件,想用`dpkt`来解析,你需要先将它转换成旧版的PCAP格式,然后再利用`dpkt.pcap.Reader`来读取。 然而,有一些第三方库,比如`pyshark`(前身为`wireshark capture library`),它基于Wireshark,支持直接解析PcapNG文件。你可以使用`pyshark`来获取更多的信息,因为它不仅提供了基础的二进制数据解析,还含了对多种协议的详细分析。 如果你想用`dpkt`处理PcapNG,你可能需要自己编写一些代码来解析PcapNG头,然后提取出感兴趣的数据部分。不过请注意,这不是`dpkt`的主要用途,对于非标准的文件格式处理,推荐使用专门为此设计的库。 这里是一个简单的例子,假设你已经手动解析PcapNG头部: ```python import dpkt # 假设你已经有了处理后的PcapNgFileReader对象,或者从其他地方得到了pcap数据列表 with PcapNgFileReader(reader) as pcap: for ts, data in pcap: eth = dpkt.ethernet.Ethernet(data) ip = eth.data tcp = ip.data if isinstance(ip, dpkt.ip.IP) else None # ...进一步处理IP层和TCP层数据 ``` 请记住,这并不是一个通用解决方案,实际操作可能因PcapNG文件结构的不同而有所变化。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨痕诉清风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值