使用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中使用中文的方法
Feb 19 Python
用Python实现一个简单的能够发送带附件的邮件程序的教程
Apr 08 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
Apr 13 Python
Python selenium 父子、兄弟、相邻节点定位方式详解
Sep 15 Python
Django的分页器实例(paginator)
Dec 01 Python
python使用os.listdir和os.walk获得文件的路径的方法
Dec 16 Python
Python操作Oracle数据库的简单方法和封装类实例
May 07 Python
python excel转换csv代码实例
Aug 26 Python
pytorch之Resize()函数具体使用详解
Feb 27 Python
python实现俄罗斯方块小游戏
Apr 24 Python
python:删除离群值操作(每一行为一类数据)
Jun 08 Python
python脚本第一行如何写
Aug 30 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 iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
解析php通过cookies获取远程网页的指定代码
2013/06/25 PHP
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
2015/10/09 PHP
php封装一个异常的处理类
2017/06/08 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
用YUI做了个标签浏览效果
2007/02/20 Javascript
JavaScript 判断判断某个对象是Object还是一个Array
2010/01/28 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
2015/10/12 Javascript
js文字横向滚动特效
2015/11/11 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
使用VUE实现在table中文字信息超过5个隐藏鼠标移到时弹窗显示全部
2019/09/16 Javascript
Python合并多个装饰器小技巧
2015/04/28 Python
python实现学生信息管理系统
2020/04/05 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
tensorflow使用神经网络实现mnist分类
2018/09/08 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
Python3.0中普通方法、类方法和静态方法的比较
2019/05/03 Python
pyinstaller参数介绍以及总结详解
2019/07/12 Python
python3实现斐波那契数列(4种方法)
2019/07/15 Python
Python中的self用法详解
2019/08/06 Python
基于python判断目录或者文件代码实例
2019/11/29 Python
CSS3实现文字描边的2种方法(小结)
2020/02/14 HTML / CSS
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
FC-Moto丹麦:欧洲最大的摩托车服装和头盔商店之一
2019/08/20 全球购物
购房协议书
2014/04/11 职场文书
电子专业毕业生自荐信
2014/05/25 职场文书
优秀团员事迹材料1500字
2014/08/31 职场文书
落实八项规定专题民主生活会对照检查材料
2014/09/15 职场文书
药品销售内勤岗位职责
2015/04/13 职场文书
2015年全国爱眼日活动方案
2015/05/05 职场文书
酒店开业主持词
2015/07/02 职场文书