使用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 相关文章推荐
RC4文件加密的python实现方法
Jun 30 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
Jun 26 Python
Python实现PS图像调整颜色梯度效果示例
Jan 25 Python
Python将DataFrame的某一列作为index的方法
Apr 08 Python
Python3.遍历某文件夹提取特定文件名的实例
Apr 26 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
Jul 06 Python
Python利用WMI实现ping命令的例子
Aug 14 Python
Python3标准库之threading进程中管理并发操作方法
Mar 30 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
Apr 01 Python
pyinstaller将含有多个py文件的python程序做成exe
Apr 29 Python
python多线程和多进程关系详解
Dec 14 Python
教你怎么用Python监控愉客行车程
Apr 29 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
压力如何影响浓缩咖啡品质
2021/03/03 咖啡文化
PHP 飞信好友免费短信API接口开源版
2010/07/22 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
2013/06/25 PHP
php var_export与var_dump 输出的不同
2013/08/09 PHP
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
php约瑟夫问题解决关于处死犯人的算法
2015/03/23 PHP
PHP数组操作简单案例分析
2016/10/15 PHP
php技巧小结【推荐】
2017/01/19 PHP
实例讲解PHP验证邮箱是否合格
2019/01/28 PHP
Firefox window.close()的使用注意事项
2009/04/11 Javascript
js 多浏览器分别判断代码
2010/04/01 Javascript
基于jquery完美拖拽,可返回拖动轨迹
2012/03/29 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2013/10/24 Javascript
JS实现的生成随机数的4个函数分享
2015/02/11 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
2015/02/13 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
Javascript中Array用法实例分析
2015/06/13 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
2018/05/23 Javascript
用Fundebug插件记录网络请求异常的方法
2019/02/21 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
python爬虫之自动登录与验证码识别
2020/06/15 Python
Python全局锁中如何合理运用多线程(多进程)
2019/11/06 Python
python3 循环读取excel文件并写入json操作
2020/07/14 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
Sunglasses Shop丹麦:欧洲第一的太阳镜在线销售网站
2017/10/22 全球购物
初中校园广播稿
2014/02/02 职场文书
中学生个人自我评价
2014/02/06 职场文书
学生手册评语
2014/05/05 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
小学生自我评价100字(15篇)
2014/09/18 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
篮球赛闭幕式主持词
2015/07/03 职场文书