Python 黑帽编程 4.2 Sniffer之数据本地存储和加载
在上一节,我们完成了编写一个简易的Sniffer的第一步——数据捕获。
很多时候,我们需要将捕获的数据先保存到磁盘上,之后再使用工具或者自己编写代码来进行详细分析。
本节我们在上一节的基础上来讲解保存捕获数据的方式,当然使用tcpdump或者WireShark都可以
很方便的存储数据包。
4.2.1 使用pcapy保存和读取数据
前文我们使用 pcapy的open_live方法,可以获取pcapy的一个实例对象,通过该对象的dump_open
方法可以获取一个dump对象,通过dump对象可以保存数据包到本地磁盘。示例如下:
#!/usr/bin/python
import pcapy
dev = "eth0"
filter = "tcp and port 80"
def save_packet(hdr, data):
dumper.dump(hdr, data)
pcap = pcapy.open_live(dev, 1500, 0, 100)
dumper = pcap.dump_open('sniffer.pcap')
pcap.setfilter(filter)
pcap.loop(0, save_packet)
上面的代码中,我们首先通过dump_open方法获取dumper对象,随后在循环捕获数据的时候
调用save_packet方法,该方法中调用dump方法将数据保存到本地。运行结果如下:

下面我们看看如何从磁盘读取pcap文件。
#!/usr/bin/python
import pcapy
dev = "eth0"
filter = "tcp and port 80"
def read_packet(hdr, data):
print data
pcap = pcapy.open_offline('sniffer.pcap')
pcap.loop(0, read_packet)
在上面的带码中,我们使用pcapy的open_offline方法从本地打开一个pcap文件,之后就可以
循环处理每一个数据包了。运行结果如下:

4.2.2 使用Scapy保存和读取数据
上一节我们讲了Scapy的基础用法,Scapy支持将捕获的数据保存成多种数据格式,比如hex,base64等,
利用Scapy来保存捕获的数据到pcap文件,有两种方式,第一种为使用PcapWriter模块,例如:
from scapy.all import *
from scapy.utils import PcapWriter
def packetHandler(pkt):
pktdump.write(pkt)
pktdump = PcapWriter("ssss.pcap", append=True, sync=True)
sniff(filter='tcp and port 80',prn=packetHandler,iface='eth0')
初始化PcapWriter对象需要传入三个参数,要保存的文件名、是否追加数据,是否同步顺序添加。
之后在packetHandler方法中,调用write方法将数据包写入文件。运行结果如下:

另外一种方式为配置sniff方法的offline参数。例如:
sniff(filter='tcp and port 80',iface='eth0',offline="temp.cap")
读取pcap文件可以使用scapy.all 模块中的rdpcap方法。例如:
from scapy.all import *
packets = rdpcap('ssss.pcap')
for packet in packets:
print packet
如上,rdpcap方法接收一个文件路径参数,返回所有的数据包。运行结果如下:

4.2.3 小结
读取和保存数据的方法很多,这里结合本教程实例,只介绍这两种较为简单的方法。
查看更多Python黑客编程及安全类文章,请关注玄魂工作室微信订阅号(xuanhun521)。

Python 黑帽编程 4.2 Sniffer之数据本地存储和加载的更多相关文章
- Python黑帽编程 4.1 Sniffer(嗅探器)之数据捕获(上)
Python黑帽编程 4.1 Sniffer(嗅探器)之数据捕获(上) 网络嗅探,是监听流经本机网卡数据包的一种技术,嗅探器就是利用这种技术进行数据捕获和分析的软件. 编写嗅探器,捕获数据是前置功能, ...
- PYTHON黑帽编程 4.1 SNIFFER(嗅探器)之数据捕获(下)
上一节(<4.1 SNIFFER(嗅探器)之数据捕获(上)>)中, 我们讲解了通过Raw Socket的方式来编写Sniffer的基本方法. 本节我们继续来编写Sniffer,只不过使用现 ...
- PYTHON黑帽编程 4.1 SNIFFER(嗅探器)之数据捕获--补充
荒废了一个多月了,重新捡起来,手生了不少.发现在<4.1下>的文章里没有 提到pcap库,实在是不应该. 在网络数据分析的工具中,tcpdump绝对是大名鼎鼎,tcpdump底层是libp ...
- Python 黑帽编程大纲(变化中)
Python 黑帽编程大纲(预览版) 教程说明: 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and Defense with Pytho ...
- Python黑帽编程 3.4 跨越VLAN
Python黑帽编程 3.4 跨域VLAN VLAN(Virtual Local Area Network),是基于以太网交互技术构建的虚拟网络,既可以将同一物理网络划分成多个VALN,也可以跨越物理 ...
- Python黑帽编程1.1虚拟机安装和配置 Kali Linux 2016
Python黑帽编程1.1虚拟机安装和配置 Kali Linux 2016 0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Att ...
- Python黑帽编程1.2 基于VS Code构建Python开发环境
Python黑帽编程1.2 基于VS Code构建Python开发环境 0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Atta ...
- Python黑帽编程1.3 Python运行时与包管理工具
Python黑帽编程1.3 Python运行时与包管理工具 0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and ...
- PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析
Python黑帽编程1.5 使用Wireshark练习网络协议分析 1.5.0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...
随机推荐
- (简单) POJ 1562 Oil Deposits,BFS。
Description The GeoSurvComp geologic survey company is responsible for detecting underground oil dep ...
- keil mdk中如何确保某一段程序不被优化掉(转)
源:keil mdk中如何确保某一段程序不被优化掉 使用mdk编程,假如有一个有用的函数你定义了但是没有显式的调用,mdk在默认方式下,将会把这个函数从整个程序总删除掉,以节省ROM. 比如,你在RO ...
- OPENCV条形码检测与识别
条形码是当前超市和部分工厂使用比较普遍的物品,产品标识技术,使用摄像头检测一张图片的条形码包含有两个步骤,第一是定位条形码的位置,定位之后剪切出条形码,并且识别出条形码对应的字符串,然后就可以调用网络 ...
- HDU 5652 India and China Origins
二分答案+验证,注意一开始就不连通的话输出0 #include<cstdio> #include<cstring> #include<cmath> #include ...
- 25个Linux性能监控工具
一段时间以来,我们在网上向读者介绍了如何为Linux以及类Linux操作系统配置多种不同的性能监控工具.在这篇文章中我们将罗列一系列使用最频繁的性能监控工具,并对介绍到的每一个工具提供了相应的简介链接 ...
- Mac下node.js卸载方法收集
brew的安装方式 直接通过一条命令 brew uninstall nodejs 官网下载pkg安装包的 通过这条命令 sudo rm -rf /usr/local/{bin/{node,npm},l ...
- KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结(转)
源:KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结 Kermit协议 报文格式: 1.MARK,起始标记START_CHAR,为 0x01(CTRIL-A): 2.LEN,报文剩余 ...
- MUI开发注意事项
mui开发注意事项,有需要的朋友可以参考下. mui是一个高性能的HTML5开发框架,从UI到效率,都在极力追求原生体验:这个框架自身有一些规则,刚接触的同学不很熟悉,特总结本文:想了解mui更详细的 ...
- IOS开发之按钮控件Button详解
reference:http://mxcvns.lofter.com/post/1d23b1a3_685d59d 首先是继承问题,UIButton继承于UIControl,而UIControl继承于U ...
- Python3基础 frozenset() 创建一个不可更改的集合
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...