利用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标准库与第三方库详解
Jul 22 Python
python基础教程之序列详解
Aug 29 Python
初学Python实用技巧两则
Aug 29 Python
Python切换pip安装源的方法详解
Nov 18 Python
Golang与python线程详解及简单实例
Apr 27 Python
基于Python中capitalize()与title()的区别详解
Dec 09 Python
Python星号*与**用法分析
Feb 02 Python
分享Pycharm中一些不为人知的技巧
Apr 03 Python
Python使用matplotlib绘制三维参数曲线操作示例
Sep 10 Python
django xadmin 管理器常用显示设置方式
Mar 11 Python
Django contrib auth authenticate函数源码解析
Nov 12 Python
Alpine安装Python3依赖出现的问题及解决方法
Dec 25 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提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
PHP读取文件内容后清空文件示例代码
2014/03/18 PHP
浅谈php处理后端&接口访问超时的解决方法
2016/10/29 PHP
jquery 分页控件实现代码
2009/11/30 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
jqgrid 表格数据导出实例
2013/11/21 Javascript
JS判断不能为空实例代码
2013/11/26 Javascript
jQuery+css实现百度百科的页面导航效果
2014/12/16 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
JavaScript继承学习笔记【新手必看】
2016/05/10 Javascript
Vue组件开发初探
2017/02/14 Javascript
ES6新特性之Object的变化分析
2017/03/31 Javascript
详谈javascript精度问题与调整
2017/07/08 Javascript
基于对象合并功能的实现示例
2017/10/10 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
Python对象转JSON字符串的方法
2016/04/27 Python
深入理解python中的select模块
2017/04/23 Python
python实现对任意大小图片均匀切割的示例
2018/12/05 Python
python 按钮点击关闭窗口的实现
2020/03/04 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
TensorFlow低版本代码自动升级为1.0版本
2021/02/20 Python
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
惠普美国官方商店:HP Official Store
2016/08/28 全球购物
银行门卫岗位职责
2013/12/29 职场文书
单位绩效考核方案
2014/05/11 职场文书
卫生系统先进事迹
2014/05/13 职场文书
幼儿园标语大全
2014/06/19 职场文书
委托书怎样写
2014/08/30 职场文书
大型主题婚礼活动策划方案
2014/09/15 职场文书
2019数学教师下学期工作总结
2019/06/27 职场文书
python 解决微分方程的操作(数值解法)
2021/05/26 Python
Java Socket实现Redis客户端的详细说明
2021/05/26 Redis