使用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 实现文件的递归拷贝实现代码
Aug 02 Python
Python运行的17个时新手常见错误小结
Aug 07 Python
python字符串替换示例
Apr 24 Python
Python bsddb模块操作Berkeley DB数据库介绍
Apr 08 Python
python输出当前目录下index.html文件路径的方法
Apr 28 Python
[原创]使用豆瓣提供的国内pypi源
Jul 02 Python
python实现NB-IoT模块远程控制
Jun 20 Python
浅谈django rest jwt vue 跨域问题
Oct 26 Python
对Python 除法负数取商的取整方式详解
Dec 12 Python
kafka监控获取指定topic的消息总量示例
Dec 23 Python
Python基于yaml文件配置logging日志过程解析
Jun 23 Python
python中validators库的使用方法详解
Sep 23 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安全配置
2006/12/06 PHP
PHP下一个非常全面获取图象信息的函数
2008/11/20 PHP
Zend Framework中的简单工厂模式 图文
2012/07/10 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
php不用正则验证真假身份证
2013/11/06 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
2014/10/15 PHP
php用正则判断是否为数字的方法
2016/03/25 PHP
PHP实现微信小程序用户授权的工具类示例
2019/03/05 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
Laravel框架实现简单的学生信息管理平台案例
2019/05/07 PHP
php链式操作的实现方式分析
2019/08/12 PHP
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
2014/03/13 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
2016/03/13 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
Vue中自定义全局组件的实现方法
2017/12/08 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
2019/05/29 Javascript
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
解决python3捕获cx_oracle抛出的异常错误问题
2018/10/18 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
Python创建一个空的dataframe,并循环赋值的方法
2018/11/08 Python
详解Python with/as使用说明
2018/12/13 Python
对Python3使运行暂停的方法详解
2019/02/18 Python
使用Python脚本zabbix自定义key监控oracle连接状态
2019/08/28 Python
Python-openpyxl表格读取写入的案例详解
2020/11/02 Python
细说NumPy数组的四种乘法的使用
2020/12/18 Python
财务管理专业毕业生求职信
2014/06/02 职场文书
植树造林的宣传标语
2014/06/23 职场文书
锅炉工岗位职责
2015/02/13 职场文书
多属性、多分类MySQL模式设计
2021/04/05 MySQL
Python基础之数据类型知识汇总
2021/05/18 Python
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs