利用python-pypcap抓取带VLAN标签的数据包方法


Posted in Python onJuly 23, 2019

1、背景介绍

在采用通常的socket抓包方式下,操作系统会自动将收到包的VLAN信息剥离,导致上层应用收到的包不会含有VLAN标签信息。而libpcap虽然是基于socket实现抓包,但在收到数据包后,会进一步恢复出剥离的VLAN信息,能够满足需要抓取带VLAN标签信息的数据包的需求场景。

python-pypcap包是对libpcap库的python语言封装,本文主要介绍如果利用python-pypcap在网络接口抓取带VLAN标签的数据包。

2、环境准备

libpcap-0.9.4

python-pypcap-1.15,该包依赖libpcap-0.9.4

可以通过在python交互式环境下运行import pcap,如果导入成功,说明python-pypcap-1.15已成功安装。

3、抓包实现

pypcap包封装了libpcap提供的许多接口函数,简单的抓包可以采用如下几个步骤完成:

1)Open a handle to a packetcapture descriptor.

fpcap = pcap.pcap(name=iface)

指定从iface接口抓包,此处可以添加其他相关抓包参数,大家可以参考对pcap.pcap类的说明。

2)设置过滤规则

fpcap.setfilter('inbound')

此处inbound表示抓取所有发送到该接口的包,不抓取从该接口发送出的数据包,规则的设置同tcpdump抓包设置过滤规则相同。

3)调用loop函数循环抓包

fpcap.loop(callback,None)

源文件中对loop函数的说明如下:

利用python-pypcap抓取带VLAN标签的数据包方法

此处需要说明的是,在实际使用中发现提供了cnt参数后程序运行会报错,而不加cnt参数可以成功运行,即采用fpcap.loop(callback,None)。

4)实现包处理回调函数callback

callback函数声明如下:

利用python-pypcap抓取带VLAN标签的数据包方法

这里需要说明的是,参数timestamp和pkt会由loop函数自动传入,pkt表示数据包,但其类型是buffer类型,这里可以采用图中的scapy.layers.l2.Ether(str(pkt))将pkt转化为scapy的Ether类型[如果包为dot3类型的,也将自动转化为Dot3类型的对象,此处针对isis协议]。然后再通过p.time = timestamp将时间戳信息更新到包中。后续就可以按照处理scapy的Ether类型包的方式进行进一步包处理。

4、示例

下述代码实现了一个线程类,能够在指定的接口iface上抓取进入该接口的包并打印包概要信息。

利用python-pypcap抓取带VLAN标签的数据包方法

以上这篇利用python-pypcap抓取带VLAN标签的数据包方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用函数默认值实现函数静态变量的方法
Aug 18 Python
python BeautifulSoup设置页面编码的方法
Apr 03 Python
python使用urllib2提交http post请求的方法
May 26 Python
在Python程序中操作MySQL的基本方法
Jul 29 Python
Python聚类算法之基本K均值实例详解
Nov 20 Python
Python多线程经典问题之乘客做公交车算法实例
Mar 22 Python
python监控linux内存并写入mongodb(推荐)
Sep 11 Python
基于Python代码编辑器的选用(详解)
Sep 13 Python
Python中xrange与yield的用法实例分析
Dec 26 Python
python利用Tesseract识别验证码的方法示例
Jan 21 Python
Python转换时间的图文方法
Jul 01 Python
Django model.py表单设置默认值允许为空的操作
May 19 Python
python 抓包保存为pcap文件并解析的实例
Jul 23 #Python
Django ModelForm组件使用方法详解
Jul 23 #Python
Pandas之groupby( )用法笔记小结
Jul 23 #Python
Python OpenCV调用摄像头检测人脸并截图
Aug 20 #Python
使用PYTHON解析Wireshark的PCAP文件方法
Jul 23 #Python
Django 静态文件配置过程详解
Jul 23 #Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
Jul 23 #Python
You might like
探讨:如何编写PHP扩展
2013/06/13 PHP
php中simplexml_load_string使用实例分享
2014/02/13 PHP
如何用PHP来实现一个动态Web服务器
2015/07/29 PHP
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
2013/01/09 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
js简单实现Select互换数据的方法
2015/08/17 Javascript
jQuery validate插件实现ajax验证重复的2种方法
2016/01/22 Javascript
JS实现回到页面顶部动画效果的简单实例
2016/05/24 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
jQuery编写textarea输入字数限制代码
2017/03/23 jQuery
微信小程序实现折叠面板
2018/01/31 Javascript
JavaScript实现小球沿正弦曲线运动
2020/09/07 Javascript
nodejs基础之多进程实例详解
2018/12/27 NodeJs
jquery ajax 请求小技巧实例分析
2019/11/11 jQuery
vue实现pdf文档在线预览功能
2019/11/26 Javascript
JS实现导航栏楼层特效
2020/01/01 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
python获取从命令行输入数字的方法
2015/04/29 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
TensorFlow实现简单卷积神经网络
2018/05/24 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
2018/11/06 Python
详解Python Matplot中文显示完美解决方案
2019/03/07 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
使用pyinstaller逆向.pyc文件
2019/12/20 Python
python 实现音频叠加的示例
2020/10/29 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
2021/01/29 Python
Feelunique澳大利亚:欧洲的化妆品零售电商
2019/12/18 全球购物
出纳岗位职责模板
2013/11/27 职场文书
车间调度岗位职责
2013/11/30 职场文书
大型车展策划方案
2014/02/01 职场文书
上班迟到检讨书
2014/09/15 职场文书
vue route新窗口跳转页面并且携带与接收参数
2022/04/10 Vue.js
SpringBoot接入钉钉自定义机器人预警通知
2022/07/15 Java/Android