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" ...
随机推荐
- 【Selenium2】【项目实战】
[public/login.py] from selenium import webdriverfrom selenium.webdriver.common.by import Byimport ti ...
- 【Python】【有趣的模块】【Requests】session & cookie
保存http请求的状态(请求的上下文) [区别&联系] 1. cookie保存在客户端的浏览器,比如标识是哪个请求者.购物车应用等 session保存在服务端,http连接时无则创建,有则用现 ...
- IDEA @Autowired 出现红色下划线 报红
例如: 解决方法:
- [osg]osg背景图设置
转自:https://blog.csdn.net/qq_30754211/article/details/61190698 #include <osg/Geometry> #include ...
- C#6.0 语法
属性表达式 属性值初始化 public string name {get;set;} = "张三"; 函数表达式 NULL检查运算符 var aa = Created?.Date; ...
- 力扣(LeetCode)922. 按奇偶排序数组 II
给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数. 对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数:当 A[i] 为偶数时, i 也是偶数. 你可以返回任何满足上述条件的数组 ...
- 学习笔记17—circos安装集(window环境)
Windows7环境下Circos使用教程 一.下载安装软件包 1.strawberry perl 因为Circos软件是依赖perl语言编译环境的,但是windows环境下默认是没有perl的,所以 ...
- keys(),values()和items()
a={'a':11,'b':'bb','c':321}for x in a.items(): print(x) # 每条都输出来print("------------")for ...
- Qt Model/View学习(二)
Model和View的搭配使用 DEMO pro文件 #------------------------------------------------- # # Project created by ...
- DirectX之顶点法线的计算
首先要明白,顶点法线存在的原因:确定灯光照射到物体表面的角度.所以一提到顶点法线,肯定要进行与灯光相关的运算了. 下面是顶点法线的计算方式 假如 A.B.C三个顶点构成一个三角形,它们对应的顶点法线分 ...