使用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
Python 随机生成中文验证码的实例代码
Mar 20 Python
简单的通用表达式求10乘阶示例
Mar 03 Python
python爬虫获取多页天涯帖子
Feb 23 Python
对python中的os.getpid()和os.fork()函数详解
Aug 08 Python
Python3.7安装keras和TensorFlow的教程图解
Jun 18 Python
python将图片转base64,实现前端显示
Jan 09 Python
Python-jenkins 获取job构建信息方式
May 12 Python
Python如何转换字符串大小写
Jun 04 Python
Python2手动安装更新pip过程实例解析
Jul 16 Python
Django celery异步任务实现代码示例
Nov 26 Python
Python文件名匹配与文件复制的实现
Dec 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写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
2014/10/21 PHP
关于php中的json_encode()和json_decode()函数的一些说明
2016/11/20 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
清华大学出版的事半功倍系列 javascript全部源代码
2007/05/04 Javascript
Javascript的构造函数和constructor属性
2010/01/09 Javascript
Javascript 面向对象 重载
2010/05/13 Javascript
解析img图片没找到onerror事件 Stack overflow at line: 0
2013/12/23 Javascript
Nodejs实现多人同时在线移动鼠标的小游戏分享
2014/12/06 NodeJs
JavaScript使用FileSystemObject对象写入文本文件内容的方法
2015/08/05 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
你不知道的高性能JAVASCRIPT
2016/01/18 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
2016/05/10 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
bootstrap vue.js实现tab效果
2017/02/07 Javascript
SVG描边动画
2017/02/23 Javascript
关于自定义Egg.js的请求级别日志详解
2018/12/12 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
2019/05/14 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
原生JS实现多条件筛选
2020/08/19 Javascript
python实现汉诺塔方法汇总
2016/07/25 Python
python获取多线程及子线程的返回值
2017/11/15 Python
Python利用神经网络解决非线性回归问题实例详解
2019/07/19 Python
python 装饰器重要在哪
2021/02/14 Python
pycharm配置安装autopep8自动规范代码的实现
2021/03/02 Python
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
自我鉴定范文
2013/11/10 职场文书
职业技术学校毕业生推荐信
2013/12/03 职场文书
物理力学求职信
2014/02/18 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
技术股份合作协议书
2014/10/05 职场文书
钳工实训报告总结
2014/11/04 职场文书
优秀党务工作者先进事迹材料
2014/12/25 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
幼儿园大班教师评语
2019/06/21 职场文书