使用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之有容乃大的list(1)
Sep 14 Python
python中实现php的var_dump函数功能
Jan 21 Python
从局部变量和全局变量开始全面解析Python中变量的作用域
Jun 16 Python
Python 装饰器使用详解
Jul 29 Python
浅谈Python中带_的变量或函数命名
Dec 04 Python
Python去除字符串前后空格的几种方法
Mar 04 Python
Django Python 获取请求头信息Content-Range的方法
Aug 06 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
Aug 29 Python
Python测试Kafka集群(pykafka)实例
Dec 23 Python
python json.dumps() json.dump()的区别详解
Jul 14 Python
使用OpenCV实现道路车辆计数的使用方法
Jul 15 Python
浅谈Python __init__.py的作用
Oct 28 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
ThinkPHP3.2.3数据库设置新特性
2015/03/05 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
利用php操作memcache缓存的基础方法示例
2017/08/02 PHP
Prototype PeriodicalExecuter对象 学习
2009/07/19 Javascript
extjs 学习笔记(三) 最基本的grid
2009/10/15 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
2013/02/16 Javascript
js的Prototype属性解释及常用方法
2014/05/08 Javascript
jQuery学习笔记之 Ajax操作篇(三) - 过程处理
2014/06/23 Javascript
jQuery常用的一些技巧汇总
2016/03/26 Javascript
JS中split()用法(将字符串按指定符号分割成数组)
2016/10/24 Javascript
vue多种弹框的弹出形式的示例代码
2017/09/18 Javascript
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
vue使用自定义icon图标的方法
2018/05/14 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
JS通过识别id、value值对checkbox设置选中状态
2020/02/19 Javascript
JavaScript实现点击图片换背景
2020/11/20 Javascript
[03:49]2016完美“圣”典风云人物:AMS专访
2016/12/06 DOTA
Python中unittest模块做UT(单元测试)使用实例
2015/06/12 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
python中的json总结
2018/10/11 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
python装饰器相当于函数的调用方式
2019/12/27 Python
Python hashlib常见摘要算法详解
2020/01/13 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
Microsoft Advertising美国:微软搜索广告
2019/05/01 全球购物
实现向右循环移位
2014/07/31 面试题
Ado与Ado.net的相同与不同
2014/12/08 面试题
公休请假条
2014/04/11 职场文书
2015关爱留守儿童工作总结
2014/12/12 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
社区青年志愿者活动总结
2015/05/06 职场文书
大学生村官工作心得体会
2016/01/23 职场文书
利用javaScript处理常用事件详解
2021/04/14 Javascript
Golang的继承模拟实例
2021/06/30 Golang