使用Python实现windows下的抓包与解析


Posted in Python onJanuary 15, 2018

系统环境:windows7,选择windows系统是因为我对自己平时日常机器上的流量比较感兴趣

python环境:python2.7 ,这里不选择python3的原因,是因为接下来要用到的scapy包在python3中安装较于python2要麻烦得多。如果你习惯于用python3,数据包的分析完全可以放在3下面做,因为抓包和分析是两个完全独立的过程。

需要的python包:scapy和dpkt

抓包代码:

from scapy.sendrecv import sniff
from scapy.utils import wrpcap
dpkt = sniff(count = 100)  #这里是针对单网卡的机子,多网卡的可以在参数中指定网卡
wrpcap("demo.pcap", dpkt)

你没看错,仅仅只需要两行代码就可以实现一个简单的抓包功能。sniff函数负责嗅探数据包,而wrpcap函数将抓取到的数据包保存起来。

数据包的分析:

import dpkt
import socket
import datetime
def printPcap(pcap):
try:
for timestamp, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf) #获得以太包,即数据链路层包
print("ip layer:"+eth.data.__class__.__name__) #以太包的数据既是网络层包
print("tcp layer:"+eth.data.data.__class__.__name__) #网络层包的数据既是传输层包
print("http layer:" + eth.data.data.data.__class__.__name__) #传输层包的数据既是应用层包
print('Timestamp: ',str(datetime.datetime.utcfromtimestamp(timestamp))) #打印出包的抓取时间
if not isinstance(eth.data, dpkt.ip.IP):
print('Non IP Packet type not supported %s' % eth.data.__class__.__name__)
continue
ip = eth.data
do_not_fragment =bool(ip.off & dpkt.ip.IP_DF)
more_fragments =bool(ip.off & dpkt.ip.IP_MF)
fragment_offset = ip.off & dpkt.ip.IP_OFFMASK
print('IP: %s -> %s (len=%d ttl=%d DF=%d MF=%d offset=%d)' % (socket.inet_ntoa(ip.src), socket.inet_ntoa(ip.dst), ip.len, ip.ttl, do_not_fragment, more_fragments,fragment_offset))
except:
pass
def main():
f =open('demo.pcap','rb')
pcap = dpkt.pcap.Reader(f)
printPcap(pcap)
if __name__ =='__main__':
main()

结果显示:

这是我打开360的路由器卫士时抓取的数据包。这个软件在打开时与路由器通信,获得连接路由器的电脑和手机的列表。192.168.1.100是我的机器,192.168.1.1是路由器地址,其中可以看到windows发送的数据包的ttl值默认是128,其他的系统默认是64,与我们的理论常识是相符的。

TCP/IP五层分层的结构和封包过程,附图二张:

使用Python实现windows下的抓包与解析使用Python实现windows下的抓包与解析

总结

以上所述是小编给大家介绍的使用Python实现windows下的抓包与解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
Jul 11 Python
python实现给字典添加条目的方法
Sep 25 Python
python自动化测试之从命令行运行测试用例with verbosity
Sep 28 Python
python编码总结(编码类型、格式、转码)
Jul 01 Python
初探TensorFLow从文件读取图片的四种方式
Feb 06 Python
python3如何将docx转换成pdf文件
Mar 23 Python
对Python 数组的切片操作详解
Jul 02 Python
jenkins配置python脚本定时任务过程图解
Oct 29 Python
python3.6、opencv安装环境搭建过程(图文教程)
Nov 05 Python
Python面向对象魔法方法和单例模块代码实例
Mar 25 Python
Django-migrate报错问题解决方案
Apr 21 Python
tensorflow中的数据类型dtype用法说明
May 26 Python
Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
Jan 15 #Python
Python操作mysql数据库实现增删查改功能的方法
Jan 15 #Python
使用python编写简单的小程序编译成exe跑在win10上
Jan 15 #Python
python逆向入门教程
Jan 15 #Python
Python3一行代码实现图片文字识别的示例
Jan 15 #Python
Python编程二分法实现冒泡算法+快速排序代码示例
Jan 15 #Python
selenium python浏览器多窗口处理代码示例
Jan 15 #Python
You might like
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
2014/04/10 PHP
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
PHP获取指定日期是星期几的实现方法
2016/11/30 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
jquery 输入框数字限制插件
2009/11/10 Javascript
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
2014/09/09 Javascript
js对象基础实例分析
2015/01/13 Javascript
angularJS 中$attrs方法使用指南
2015/02/09 Javascript
jQuery读取XML文件内容的方法
2015/03/09 Javascript
Javascript中的Callback方法浅析
2015/03/15 Javascript
JavaScript实现拖拽网页内元素的方法
2015/04/15 Javascript
在原生不支持的旧环境中添加兼容的Object.keys实现方法
2017/09/11 Javascript
vue实例的选项总结
2020/06/09 Javascript
[04:54]DOTA2 2017国际邀请赛:上届冠军WINGS采访短片
2017/08/09 DOTA
python处理csv数据的方法
2015/03/11 Python
详解Python3.1版本带来的核心变化
2015/04/07 Python
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
Python记录详细调用堆栈日志的方法
2015/05/05 Python
Python2.x版本中基本的中文编码问题解决
2015/10/12 Python
Python面向对象程序设计之私有属性及私有方法示例
2019/04/08 Python
Django--权限Permissions的例子
2019/08/28 Python
pytorch中的卷积和池化计算方式详解
2020/01/03 Python
HTML5和CSS3让网页设计提升到下一个高度
2009/08/14 HTML / CSS
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
HTML5 Canvas中绘制矩形实例
2015/01/01 HTML / CSS
中国宠物用品商城:E宠商城
2016/08/27 全球购物
美国面料纺织品商城:Fabric.com
2017/06/28 全球购物
什么是设计模式
2012/06/17 面试题
食品安全责任书
2014/04/15 职场文书
班组长安全工作职责
2014/07/15 职场文书
红领巾广播站广播稿
2015/08/19 职场文书
2016春季小学开学寄语
2015/12/03 职场文书
Python Numpy之linspace用法说明
2021/04/17 Python
DIV CSS实现网页背景半透明效果
2021/12/06 HTML / CSS