使用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实用技巧两则
Aug 29 Python
Python实现打印螺旋矩阵功能的方法
Nov 21 Python
Python构建网页爬虫原理分析
Dec 19 Python
python批量导入数据进Elasticsearch的实例
May 30 Python
Python3实现腾讯云OCR识别
Nov 27 Python
Python使用Pickle模块进行数据保存和读取的讲解
Apr 09 Python
python和mysql交互操作实例详解【基于pymysql库】
Jun 04 Python
python opencv将表格图片按照表格框线分割和识别
Oct 30 Python
Pytorch maxpool的ceil_mode用法
Feb 18 Python
Pytorch中.new()的作用详解
Feb 18 Python
python修改linux中文件(文件夹)的权限属性操作
Mar 05 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
Mar 14 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实现数组递归转义的方法
2014/08/28 PHP
PHP浮点数精度问题汇总
2015/05/13 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
2019/10/11 PHP
PHP安全之register_globals的on和off的区别
2020/07/23 PHP
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
2008/03/22 Javascript
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
深入理解bootstrap框架之入门准备
2016/10/09 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
2016/12/08 Javascript
Bootstrap3多级下拉菜单
2017/02/24 Javascript
react-router JS 控制路由跳转实例
2017/06/15 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
JavaScript实现网页计算器功能
2020/10/29 Javascript
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
Python跳出循环语句continue与break的区别
2014/08/25 Python
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
Django使用详解:ORM 的反向查找(related_name)
2018/05/30 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
2019/06/13 Python
Python jieba库用法及实例解析
2019/11/04 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
在python中list作函数形参,防止被实参修改的实现方法
2020/06/05 Python
python使用列表的最佳方案
2020/08/12 Python
python实现简单的tcp 文件下载
2020/09/16 Python
请解释一下webService? 如何用.net实现webService
2014/06/09 面试题
编辑个人求职信范文
2013/09/21 职场文书
小学生检讨书大全
2014/02/06 职场文书
离婚协议书怎么写
2014/09/12 职场文书
2016年党员创先争优公开承诺书
2016/03/25 职场文书
会计专业自荐信范文
2019/05/22 职场文书
解决Django transaction进行事务管理踩过的坑
2021/04/24 Python
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android
MySQL数据库配置信息查看与修改方法详解
2022/06/25 MySQL
Python docx库删除复制paragraph及行高设置图片插入示例
2022/07/23 Python