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方法将数据保存到本地。运行结果如下:

42533-20170209172626651-1238763104.jpg

下面我们看看如何从磁盘读取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文件,之后就可以
循环处理每一个数据包了。运行结果如下:

42533-20170209172638760-350778629.jpg

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方法将数据包写入文件。运行结果如下:

42533-20170209172647416-1382500081.jpg

另外一种方式为配置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方法接收一个文件路径参数,返回所有的数据包。运行结果如下:

42533-20170209172658104-284022367.jpg

4.2.3 小结

读取和保存数据的方法很多,这里结合本教程实例,只介绍这两种较为简单的方法。


查看更多Python黑客编程及安全类文章,请关注玄魂工作室微信订阅号(xuanhun521)。
42533-20160109131841371-224661679.jpg


本文转自玄魂博客园博客,原文链接:http://www.cnblogs.com/xuanhun/p/6383083.html,如需转载请自行联系原作者

目录
相关文章
|
17小时前
|
XML 前端开发 数据格式
BeautifulSoup 是一个 Python 库,用于从 HTML 和 XML 文件中提取数据
BeautifulSoup 是 Python 的一个库,用于解析 HTML 和 XML 文件,即使在格式不规范的情况下也能有效工作。通过创建 BeautifulSoup 对象并使用方法如 find_all 和 get,可以方便地提取和查找文档中的信息。以下是一段示例代码,展示如何安装库、解析 HTML 数据以及打印段落、链接和特定类名的元素。BeautifulSoup 还支持更复杂的查询和文档修改功能。
5 1
|
1天前
|
JSON 数据格式 开发者
pip和requests在Python编程中各自扮演着不同的角色
`pip`是Python的包管理器,用于安装、升级和管理PyPI上的包;`requests`是一个HTTP库,简化了HTTP通信,支持各种HTTP请求类型及数据交互。两者在Python环境中分别负责包管理和网络请求。
13 5
|
2天前
|
存储 JSON 数据挖掘
python序列化和结构化数据详解
python序列化和结构化数据详解
10 0
|
2天前
|
数据采集 数据可视化 数据挖掘
Python 与 PySpark数据分析实战指南:解锁数据洞见
Python 与 PySpark数据分析实战指南:解锁数据洞见
|
2天前
|
数据采集 数据处理 开发者
Python 中的数据处理技巧:高效数据操作的艺术
Python 在数据处理方面表现卓越,为开发者提供了丰富的工具和库以简化数据操作。在本文中,我们将探讨 Python 中数据处理的一些技巧,包括数据清洗、数据转换以及优化数据操作的最佳实践。通过掌握这些技巧,您可以在 Python 中更加高效地处理和分析数据。
|
4天前
|
机器学习/深度学习 自然语言处理 算法
Python遗传算法GA对长短期记忆LSTM深度学习模型超参数调优分析司机数据|附数据代码
Python遗传算法GA对长短期记忆LSTM深度学习模型超参数调优分析司机数据|附数据代码
|
4天前
|
开发者 索引 Python
Python中调整两列数据顺序的多种方式
Python中调整两列数据顺序的多种方式
20 0
|
4天前
|
SQL API 数据库
在Python中获取筛选后的SQL数据行数
在Python中获取筛选后的SQL数据行数
12 1
|
4天前
|
数据可视化 Python
python中Copula在多元联合分布建模可视化2实例合集|附数据代码
python中Copula在多元联合分布建模可视化2实例合集|附数据代码
|
4天前
|
数据处理 Python
Python中每个字段增加多条数据的高效方法
Python中每个字段增加多条数据的高效方法
10 1