在上一节,我们完成了编写一个简易的Sniffer的第一步——数据捕获。

很多时候,我们需要将捕获的数据先保存到磁盘上,之后再使用工具或者自己编写代码来进行详细分析。

本节我们在上一节的基础上来讲解保存捕获数据的方式,当然使用tcpdump或者WireShark都可以

很方便的存储数据包。

4.2.1 使用pcapy保存和读取数据

前文我们使用 pcapy的open_live方法,可以获取pcapy的一个实例对象,通过该对象的dump_open

方法可以获取一个dump对象,通过dump对象可以保存数据包到本地磁盘。示例如下:

  1. #!/usr/bin/python
  2. import pcapy
  3. dev = "eth0"
  4. filter = "tcp and port 80"
  5. def save_packet(hdr, data):
  6. dumper.dump(hdr, data)
  7. pcap = pcapy.open_live(dev, 1500, 0, 100)
  8. dumper = pcap.dump_open('sniffer.pcap')
  9. pcap.setfilter(filter)
  10. pcap.loop(0, save_packet)

上面的代码中,我们首先通过dump_open方法获取dumper对象,随后在循环捕获数据的时候

调用save_packet方法,该方法中调用dump方法将数据保存到本地。运行结果如下:

下面我们看看如何从磁盘读取pcap文件。

  1. #!/usr/bin/python
  2. import pcapy
  3. dev = "eth0"
  4. filter = "tcp and port 80"
  5. def read_packet(hdr, data):
  6. print data
  7. pcap = pcapy.open_offline('sniffer.pcap')
  8. pcap.loop(0, read_packet)

在上面的带码中,我们使用pcapy的open_offline方法从本地打开一个pcap文件,之后就可以

循环处理每一个数据包了。运行结果如下:

4.2.2 使用Scapy保存和读取数据

上一节我们讲了Scapy的基础用法,Scapy支持将捕获的数据保存成多种数据格式,比如hex,base64等,

利用Scapy来保存捕获的数据到pcap文件,有两种方式,第一种为使用PcapWriter模块,例如:

  1. from scapy.all import *
  2. from scapy.utils import PcapWriter
  3. def packetHandler(pkt):
  4. pktdump.write(pkt)
  5. pktdump = PcapWriter("ssss.pcap", append=True, sync=True)
  6. sniff(filter='tcp and port 80',prn=packetHandler,iface='eth0')

初始化PcapWriter对象需要传入三个参数,要保存的文件名、是否追加数据,是否同步顺序添加。

之后在packetHandler方法中,调用write方法将数据包写入文件。运行结果如下:

另外一种方式为配置sniff方法的offline参数。例如:

  1. sniff(filter='tcp and port 80',iface='eth0',offline="temp.cap")

读取pcap文件可以使用scapy.all 模块中的rdpcap方法。例如:

  1. from scapy.all import *
  2. packets = rdpcap('ssss.pcap')
  3. for packet in packets:
  4. print packet

如上,rdpcap方法接收一个文件路径参数,返回所有的数据包。运行结果如下:

4.2.3 小结

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


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

Python 黑帽编程 4.2 Sniffer之数据本地存储和加载的更多相关文章

  1. Python黑帽编程 4.1 Sniffer(嗅探器)之数据捕获(上)

    Python黑帽编程 4.1 Sniffer(嗅探器)之数据捕获(上) 网络嗅探,是监听流经本机网卡数据包的一种技术,嗅探器就是利用这种技术进行数据捕获和分析的软件. 编写嗅探器,捕获数据是前置功能, ...

  2. PYTHON黑帽编程 4.1 SNIFFER(嗅探器)之数据捕获(下)

    上一节(<4.1 SNIFFER(嗅探器)之数据捕获(上)>)中, 我们讲解了通过Raw Socket的方式来编写Sniffer的基本方法. 本节我们继续来编写Sniffer,只不过使用现 ...

  3. PYTHON黑帽编程 4.1 SNIFFER(嗅探器)之数据捕获--补充

    荒废了一个多月了,重新捡起来,手生了不少.发现在<4.1下>的文章里没有 提到pcap库,实在是不应该. 在网络数据分析的工具中,tcpdump绝对是大名鼎鼎,tcpdump底层是libp ...

  4. Python 黑帽编程大纲(变化中)

    Python 黑帽编程大纲(预览版) 教程说明: 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and Defense with Pytho ...

  5. Python黑帽编程 3.4 跨越VLAN

    Python黑帽编程 3.4 跨域VLAN VLAN(Virtual Local Area Network),是基于以太网交互技术构建的虚拟网络,既可以将同一物理网络划分成多个VALN,也可以跨越物理 ...

  6. Python黑帽编程1.1虚拟机安装和配置 Kali Linux 2016

    Python黑帽编程1.1虚拟机安装和配置 Kali Linux 2016 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Att ...

  7. Python黑帽编程1.2 基于VS Code构建Python开发环境

    Python黑帽编程1.2  基于VS Code构建Python开发环境 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Atta ...

  8. Python黑帽编程1.3 Python运行时与包管理工具

    Python黑帽编程1.3  Python运行时与包管理工具 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and ...

  9. PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析

    Python黑帽编程1.5  使用Wireshark练习网络协议分析 1.5.0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...

随机推荐

  1. java数组的声明由几种方式

    数组的声明由几种方式: 1,String []a = new String[length];再赋值 a[0]=?;....... 2,new完就直接初始化: String []a = new Stri ...

  2. 自动安装脚本-------------基于LVMP搭建Nagios 监控

    Mysql初始化参数(mysql-5.6.31) /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local ...

  3. tinyxml2库的使用--MFC工程

    在编写应用程序的时候,经常需要动态加载某些数据,这种情况下微软的ini文件是蛮好的选择,但是平台的通用性比较差,使用xml的话就比较强一点,但是解析比较复杂,型号有牛人已经开发出了直接读写xml的库, ...

  4. FZU 2098 刻苦的小芳

    这个问题转化一下就是求长度为2*n的正确括号匹配串,两个匹配的括号之间的距离不超过2*k的有几种. 假设左括号为1,右括号为-1,dp[i][j]表示长度为i的括号匹配串,前缀和为j的有几种.dp[2 ...

  5. 你会做Web上的用户登录功能吗?

    Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能.下面的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个关 ...

  6. Response.Write() Alert后页面布局改变

    根据peter_zhang给出的解决方案,原文URL:http://www.cnblogs.com/starxp/articles/1939032.html 使用Page.ClientScript.R ...

  7. 【转】 Vim多行缩进及高级命令

    学习别人的帖子,把内容变成自己的就是成长,此处MARK下 Vim多行缩进技巧 1.按v进入visual状态,选择多行,用>或<缩进或缩出 2. 通常根据语言特征使用自动缩进排版:在命令状态 ...

  8. iOS UICollectionView 长按移动cell

    ref:http://www.jianshu.com/p/31d07bf32d62 iOS 9之后: 示例如下 效果 前言: 看完你可以学到哪些呢? 就是文章标题那么多, 只有那么多. . 手残效果图 ...

  9. SRM 592 DIV2 报告

    昨天下午查看邮箱,看到了topcoder的SRM比赛通知和cf的比赛通知,当时什么也不想做,心里空荡荡的,忽然就想参加一下,试试看.吃完晚饭回来一看,就剩十几分钟了,匆忙把平台下了,就开始等待比赛开始 ...

  10. UnitOfWork实战

    企业模式之Unit Of Work模式 在开始UnitOfWork模式之前有必要回顾下我们耳熟能详的Data Access Object(DAO)模式,即数据访问对象.DAO是一种简单的模式,我们构建 ...