使用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 28 Python
Python实现的寻找前5个默尼森数算法示例
Mar 25 Python
python SMTP实现发送带附件电子邮件
May 22 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
python 3.6.4 安装配置方法图文教程
Sep 18 Python
对Pandas MultiIndex(多重索引)详解
Nov 16 Python
基于Django静态资源部署404的解决方法
Jul 28 Python
python实现LRU热点缓存及原理
Oct 29 Python
Python字符串的修改方法实例
Dec 19 Python
在keras下实现多个模型的融合方式
May 23 Python
详解BeautifulSoup获取特定标签下内容的方法
Dec 07 Python
Python中的变量与常量
Nov 11 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中static关键字原理的学习研究分析
2011/07/18 PHP
php简单socket服务器客户端代码实例
2015/05/18 PHP
php实现的简单数据库操作Model类
2016/11/16 PHP
Symfony查询方法实例小结
2017/06/28 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
2009/11/12 Javascript
javascript forEach通用循环遍历方法
2010/10/11 Javascript
最常用的12种设计模式小结
2011/08/09 Javascript
javascript弹出层输入框(示例代码)
2013/12/11 Javascript
解析jQuery的三种bind/One/Live事件绑定使用方法
2013/12/30 Javascript
JsRender for object语法简介
2014/10/31 Javascript
JS新包管理工具yarn和npm的对比与使用入门
2016/12/09 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
2017/03/09 Javascript
NodeJs模拟登陆正方教务
2017/04/28 NodeJs
ReactNative 之FlatList使用及踩坑封装总结
2017/11/29 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
2020/04/25 Javascript
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python通过字典dict判断指定键值是否存在的方法
2015/03/21 Python
Python Numpy:找到list中的np.nan值方法
2018/10/30 Python
使用PyQt4 设置TextEdit背景的方法
2019/06/14 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
python中的colorlog库使用详解
2019/07/05 Python
解决Django响应JsonResponse返回json格式数据报错问题
2020/08/09 Python
阿迪达斯印度官方商城:adidas India
2017/03/26 全球购物
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
六道php面试题附答案
2014/06/05 面试题
金讯Java笔试题目
2013/06/18 面试题
strstr()的简单实现
2013/09/26 面试题
软件测试面试题
2015/10/21 面试题
药店主任岗位责任制
2014/02/10 职场文书
大学生军训感想
2014/02/16 职场文书
酒店行政人事部经理职务说明书
2014/02/26 职场文书
个人工作表现评语
2014/04/30 职场文书
浪漫的婚礼主持词
2015/06/30 职场文书