python dpkt 解析 pcap 文件
dpkt Tutorial #2: Parsing a PCAP File
原文链接:https://jon.oberheide.org/blog/2008/10/15/dpkt-tutorial-2-parsing-a-pcap-file/
正如我们在dpkt库第一部分教程所示,dpkt库构建数据包很简单。
Dpkt在解析数据包和文件时是等同效率的,所以在第二部分的教程中我们将会证明解析
PCAP文件和被它所包含的包。
Dpkt在创建和解析数据包上是一个非常棒的框架。然而dpkt并没有很多文档,一旦你熟悉使用这个模块,其余方面就相当容易了。我将会用一些简单的小任务作为 dpkt 教程,希望能提供一些文档的例子。
如果你有任何项目想要用 dpkt 库完成,就写信给我。
在本教程中,我们不仅仅展示如何解析原始PCAP文件格式,而且如何会展示如何解析在PCAP文件中的数据包。让我们开始吧!
让我们解析一个之前捕获的PCAP文件,test.pcap,包括了一些HTTP会话。如果我们打开dpkt/pcap.py模块,我们可以看到它提供了一个读取类,包含了一个文件对象和公开了一个类似于读取记录的接口给pypcap。让我们用读取类打开test.pcap吧:
f = open('test.pcap')
pcap = dpkt.pcap.Reader(f)
我们现在可以通过迭代pcap对象和访问数据包的每一行的输出。例如,我们可以打印出时间邮戳和数据包每个记录的数据长度:
>>> for ts, buf in pcap:
>>> print ts, len(buf)
1220901348.61 66
1220901348.68 66
...
当然,这会花费大量的效率解析数据包,让它变得更友好,可用的格式。使用dpkt,我们可以简单地传递一个原始的缓冲区给恰当的dpkt类并且让它的内容自动解析和解码到更友好的python对象:
for ts, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf)
传递数据包给dpkt 的Ethernet类,解析和解码到eth对象。因为dpkt的Ethernet类同样包括一些额外功能去解析已知的高层次的协议,我们可以看到IP层和TCP层的信息也被解码:
>>> print eth
Ethernet(src='\x00\x1a\xa0kUf', dst='\x00\x13I\xae\x84,', data=IP(src='\xc0\xa8\n\n',
off=16384, dst='C\x17\x030', sum=25129, len=52, p=6, id=51105, data=TCP(seq=9632694,
off_x2=128, ack=3382015884, win=54, sum=65372, flags=17, dport=80, sport=56145)))
正如我们从输出所看到的,eth是Ethernet对象,pkt.data是IP对象,pkt.data.data是个TCP对象。我们可以以更友好的方式分配索引给这些对象:
ip = eth.data
tcp = ip.data
我们照例查看不同对象的属性。比如,我们可以看到源地址和TCP头的目的端口:
>>> print tcp.sport
56145
>>> print tcp.dport
80
当然,自从我们知道数据包输出包含了HTTP绘画,我们也许想要解析超过TCP的层次如解码HTTP请求。像这样,我们会确保我们的目的端口是80端口(显示一个与响应截然相反的请求)并且支持超过了tcp层的数据解析。我们会使用dpkt的HTTP解码器去解析这些数据:
if tcp.dport == 80 and len(tcp.data) > 0:
http = dpkt.http.Request(tcp.data)
一旦HTTP payload被解析,我们可以查看它的各个属性:
>>> print http.method
GET
>>> print http.uri
/testurl
>>> print http.version
1.1
>>> print http.headers['user-agent']
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.5)
出于我们的教程的目标,我们仅仅会输出http的uri属性。
并且决定我们的教程是为了解析PCAP文件和文件里面的数据包。在仅仅10行python里,我们创造了一个读取原始PCAP文件,解析和解码Ethernet、IP、TCP、IP层和打印出HTTP请求的URI的强有力的工具。
教程接下来是完整的python脚本:
#!/usr/bin/env python
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 and len(tcp.data) > 0:
http = dpkt.http.Request(tcp.data)
print http.uri
f.close()
python dpkt 解析 pcap 文件的更多相关文章
- 【Python】测试dpkt解析pcap
1.前言 本想借助dpkt解析mail.dns.http来辅助分析pcap包进行分析,查阅资料学习却发现并不如使用scapy那么方便. dpkt是一个python模块,可以对简单的数据包创建/解析,以 ...
- python dpkt解析ssl流
用法:python extract_tls_flow.py -vr white_pcap/11/2018-01-10_13-05-09_2.pcap -o pcap_ssl_flow.txt & ...
- python脚本解析json文件
python脚本解析json文件 没写完.但是有效果.初次尝试,写的比较不简洁... 比较烦的地方在于: 1,中文编码: pSpecs.decode('raw_unicode_escape') 2,花 ...
- Python:解析properties文件
在项目中遇到解析properties的情况,而Python中正好没有解析properties文件的现成模块,于是从网上找到了这个脚本,有一些小地方修改了一下 原博客: Python读写properti ...
- python解析pcap文件中的http数据包
使用scapy.scapy_http就可以方便的对pcap包中的http数据包进行解析 scapy_http可以在https://github.com/invernizzi/scapy-http下载, ...
- Python解析Pcap包类源码学习
0x1.前言 在现场取证遇到分析流量包的情况会比较少,虽然流量类设备原理是把数据都抓出来进行解析,很大一定程度上已经把人可以做的事情交给了机器自动完成. 可用于PCAP包分析的软件比如科来,W ...
- python高效解析日志入库
python脚本解析日志文件入库一般有三个重要的步骤:读文件.解析文件.入库.在这三个方面下功夫,可确保我们获得最优的性能(这里不讨论并发) 1 读文件:一次读一行,磁盘IO太多,效率低下:一次性读如 ...
- pcap文件生成metadata——使用tshark解析tcpdump的pcap包
pcap文件生成metadata #!/usr/bin/env python # -*- coding: utf-8 -*- import os import time, datetime impor ...
- python 解析xml 文件: Element Tree 方式
环境 python:3.4.4 准备xml文件 首先新建一个xml文件,countries.xml.内容是在python官网上看到的. <?xml version="1.0" ...
随机推荐
- form提交不刷新,不跳转页面
利用 iframe 标签 ,后台form处理可以返回void <form action="" method="post" target="nm_ ...
- 理解 Redis(9) - Publish Subscribe 消息订阅
在窗口1开通一个名为 redis 的通道: 127.0.0.1:6379> SUBSCRIBE redis Reading messages... (press Ctrl-C to quit) ...
- gym 101164 H.Pub crawl 凸包
题目链接:http://codeforces.com/gym/101164/attachments 题意:对于已知的 n 个二维坐标点,要求按照某种特定的连线方式将尽可能多的点连接(任意相邻的 3 个 ...
- 剖析Hadoop和Spark的Shuffle过程差异
一.前言 对于基于MapReduce编程范式的分布式计算来说,本质上而言,就是在计算数据的交.并.差.聚合.排序等过程.而分布式计算分而治之的思想,让每个节点只计算部分数据,也就是只处理一个分片,那么 ...
- ArcFace 2.0 Demo [C++]
环境: win10(10.0.16299.0)+ VS2017 sdk版本:ArcFace v2.0 OPENCV3.43版本 x64平台Debug.Release配置都已通过编译 下载地址:http ...
- anaconda3 安装opencv3.4.2 cuda9.2 mint19(ubuntu 18.04)
从opencv1的时代,编译这玩意就不是太轻松.之前都是在win下.2.x时代,开始用cmake GUI,选vs版本,x86 x64 各种依赖库选项,debug release,... 现在3.4了, ...
- 在docker 容器中安装命令
apt-get update ##跟新 //vi apt install vim //weget apt install weget //yum apt install yum //ifconfig ...
- VNPY回测流程
又是好久没更新了,2月这一个月,工作上也忙,正好也是过年.加上前一段时间,一直在爬取某眼查的数据. 对VNPY的使用时间就减少了,不过最近还是完成了vnpy回测结构的思维导图.如下: 值得注意的是,v ...
- 全栈性能测试修炼宝典--Jmeter实战(三)
JMeter体系结构 1.JMeter体系结构 (1)名词解释 元件:JMeter工具菜单中的一个子菜单,比如HTTP请求.事务控制器.响应断言就是一个元件. 组件:一组元件的集合,比如逻辑控制器中有 ...
- python 断言大全
参考链接:https://blog.csdn.net/qq1124794084/article/details/51668672 1. 小数位模糊等于 自动化脚本最重要的是断言,正确设置断言以后才能帮 ...