利用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中的对象拷贝示例 python引用传递
Jan 23 Python
使用Python脚本将绝对url替换为相对url的教程
Apr 24 Python
浅析Python中yield关键词的作用与用法
Nov 29 Python
基于Python和Scikit-Learn的机器学习探索
Oct 16 Python
理论讲解python多进程并发编程
Feb 09 Python
Django中Forms的使用代码解析
Feb 10 Python
python判断列表的连续数字范围并分块的方法
Nov 16 Python
python 实现矩阵上下/左右翻转,转置的示例
Jan 23 Python
python正则-re的用法详解
Jul 28 Python
python求平均数、方差、中位数的例子
Aug 22 Python
基于pytorch 预训练的词向量用法详解
Jan 06 Python
jupyter notebook tensorflow打印device信息实例
Apr 20 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中echo和print的区别
2014/08/28 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
2016/03/07 PHP
php中引用&的用法分析【变量引用,函数引用,对象引用】
2016/12/12 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
Laravel 模型使用软删除-左连接查询-表起别名示例
2019/10/24 PHP
JavaScript 对象成员的可见性说明
2009/10/16 Javascript
为超链接加上disabled后的故事
2010/12/10 Javascript
jquery ui对话框实例代码
2013/05/10 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
jQuery实现按比例缩放图片的方法
2017/04/29 jQuery
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
vue component组件使用方法详解
2017/07/14 Javascript
VUE2.0+Element-UI+Echarts封装的组件实例
2018/03/02 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
详解JS预解析原理
2020/06/16 Javascript
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
Python中创建字典的几种方法总结(推荐)
2017/04/27 Python
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
Python爬虫爬取一个网页上的图片地址实例代码
2018/01/16 Python
Python学习小技巧总结
2018/06/10 Python
利用rest framework搭建Django API过程解析
2019/08/31 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
OpenCV+python实现实时目标检测功能
2020/06/24 Python
python re.match()用法相关示例
2021/01/27 Python
移动通信专业自荐信范文
2013/11/12 职场文书
办公室经理岗位职责
2014/01/01 职场文书
大三学年自我鉴定范文(3篇)
2014/09/28 职场文书
2014年村官工作总结
2014/11/24 职场文书
劳保用品管理制度范本
2015/08/06 职场文书
SONY600GR,国产收音机厂商永远的痛
2022/04/05 无线电