使用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 实现归并排序算法
Jun 05 Python
下载安装setuptool和pip linux安装pip    
Jan 24 Python
详解Python发送邮件实例
Jan 10 Python
python实现手机通讯录搜索功能
Feb 22 Python
Pycharm保存不能自动同步到远程服务器的解决方法
Jun 27 Python
python SVM 线性分类模型的实现
Jul 19 Python
Python 用turtle实现用正方形画圆的例子
Nov 21 Python
windows下python安装pip方法详解
Feb 10 Python
pandas中ix的使用详细讲解
Mar 09 Python
python实现暗通道去雾算法的示例
Sep 27 Python
python 装饰器的基本使用
Jan 13 Python
Python列表的索引与切片
Apr 07 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
Oracle Faq(Oracle的版本)
2006/10/09 PHP
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
2014/06/05 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
2014/11/05 PHP
php定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
Smarty简单生成表单元素的方法示例
2016/05/23 PHP
jquery 图片轮换效果
2010/07/29 Javascript
js中的caller和callee属性介绍和例子
2014/06/07 Javascript
jQuery.holdReady()方法用法实例
2014/12/27 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
论JavaScript模块化编程
2016/03/07 Javascript
前端程序员必须知道的高性能Javascript知识
2016/08/24 Javascript
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
原生js封装添加class,删除class的实例
2017/11/06 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
JavaScript中关于class的调用方法
2017/11/28 Javascript
vue axios 表单提交上传图片的实例
2018/03/16 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
2018/04/26 jQuery
详解React+Koa实现服务端渲染(SSR)
2018/05/23 Javascript
vue中过滤器filter的讲解
2019/01/21 Javascript
微信小程序mpvue点击按钮获取button值的方法
2019/05/29 Javascript
vue控制多行文字展开收起的实现示例
2019/10/11 Javascript
js实现整体缩放页面适配移动端
2020/03/31 Javascript
对python创建及引用动态变量名的示例讲解
2018/11/10 Python
python实现点击按钮修改数据的方法
2019/07/17 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
2020/04/14 Python
同程旅游英文网站:LY.com
2018/11/13 全球购物
自我评价中英文语句
2013/11/30 职场文书
母亲七十大寿答谢词
2014/01/18 职场文书
工艺员岗位职责
2014/02/11 职场文书
会计电算化专业求职信
2014/06/10 职场文书
2014年宣传工作总结
2014/11/18 职场文书
计算机专业自荐信
2015/03/05 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL