使用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 18 Python
Python3实现从文件中读取指定行的方法
May 22 Python
使用Python对Csv文件操作实例代码
May 12 Python
关于Python中浮点数精度处理的技巧总结
Aug 10 Python
Python实现比较扑克牌大小程序代码示例
Dec 06 Python
Python实现加载及解析properties配置文件的方法
Mar 29 Python
python读取ini配置的类封装代码实例
Jan 08 Python
Python Socketserver实现FTP文件上传下载代码实例
Mar 27 Python
numpy库reshape用法详解
Apr 19 Python
解决python虚拟环境切换无效的问题
Apr 30 Python
详解Python中第三方库Faker
Sep 25 Python
python单元测试之pytest的使用
Jun 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
用PHP动态生成虚拟现实VRML网页
2006/10/09 PHP
使用PHP数组实现无限分类,不使用数据库,不使用递归.
2006/12/09 PHP
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
PHP优于Node.js的五大理由分享
2012/09/15 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
2016/01/28 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
php上传图片并给图片打上透明水印的代码
2010/06/07 Javascript
jQuery修改class属性和CSS样式整理
2015/01/30 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
微信小程序 使用picker封装省市区三级联动实例代码
2016/10/28 Javascript
vuejs响应用户事件(如点击事件)
2017/03/14 Javascript
CSS3 动画卡顿性能优化的完美解决方案
2018/09/20 Javascript
JavaScript实现图片的放大缩小及拖拽功能示例
2019/05/14 Javascript
在Vue中使用icon 字体图标的方法
2019/06/14 Javascript
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
[01:47]2018年度DOTA2最佳教练-完美盛典
2018/12/16 DOTA
解读Django框架中的低层次缓存API
2015/07/24 Python
使用python加密自己的密码
2015/08/04 Python
常见的python正则用法实例讲解
2016/06/21 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
使用Template格式化Python字符串的方法
2019/01/22 Python
python tkinter基本属性详解
2019/09/16 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
2020/01/05 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
高中毕业的自我鉴定
2013/12/09 职场文书
感恩节活动方案
2014/01/27 职场文书
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
法定授权委托证明书
2014/09/27 职场文书
2016年国培研修日志
2015/11/13 职场文书
小学班主任心得体会
2016/01/07 职场文书
《所见》教学反思
2016/02/23 职场文书
python删除csv文件的行列
2021/04/06 Python
「睡美人」爱洛公主粘土人开订
2022/03/22 日漫