使用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写的一个文本编辑器
Jan 23 Python
python字符串替换示例
Apr 24 Python
从零学Python之入门(四)运算
May 27 Python
对python:循环定义多个变量的实例详解
Jan 20 Python
详解Python中is和==的区别
Mar 21 Python
selenium+python环境配置教程详解
May 28 Python
利用Python将图片中扭曲矩形的复原
Sep 07 Python
Scrapy 配置动态代理IP的实现
Sep 28 Python
Python命令行参数argv和argparse该如何使用
Feb 08 Python
matplotlib之多边形选区(PolygonSelector)的使用
Feb 24 Python
利用python做数据拟合详情
Nov 17 Python
分享3个非常实用的 Python 模块
Mar 03 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实现获取及设置用户访问页面语言类
2014/09/24 PHP
Symfony2框架创建项目与模板设置实例详解
2016/03/17 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
JavaScript 常见对象类创建代码与优缺点分析
2009/12/07 Javascript
juqery 学习之四 筛选过滤
2010/11/30 Javascript
window.open不被拦截的实现代码
2012/08/22 Javascript
js取得url地址参数实例
2013/02/22 Javascript
jquery清空textarea等输入框实现代码
2013/04/22 Javascript
jQuery插件zepto.js简单实现tab切换
2015/06/16 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
详解JavaScript中this的指向问题
2017/01/20 Javascript
Angular2开发——组件规划篇
2017/03/28 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
Angular2学习笔记之数据绑定的示例代码
2018/01/03 Javascript
angular2中Http请求原理与用法详解
2018/01/11 Javascript
jQuery实现checkbox全选功能完整实例
2018/07/12 jQuery
JS中async/await实现异步调用的方法
2019/08/28 Javascript
微信小程序 搜索框组件代码实例
2019/09/06 Javascript
js根据后缀判断文件文件类型的代码
2020/05/09 Javascript
javascript实现移动端轮播图
2020/12/09 Javascript
Python获取任意xml节点值的方法
2015/05/05 Python
python3中bytes和string之间的互相转换
2017/02/09 Python
利用Hyperic调用Python实现进程守护
2018/01/02 Python
python 猴子补丁(monkey patch)
2019/06/26 Python
Windows10+anacond+GPU+pytorch安装详细过程
2020/03/24 Python
python删除某个目录文件夹的方法
2020/05/26 Python
python中pivot()函数基础知识点
2021/01/03 Python
世界闻名的衬衫制造商:Savile Row Company
2018/07/30 全球购物
街道务虚会发言材料
2014/10/20 职场文书
死亡赔偿协议书
2015/01/28 职场文书
毕业设计致谢词
2015/05/14 职场文书
创业计划书之农家乐
2019/10/09 职场文书
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android