利用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时间整形转标准格式的示例分享
Feb 14 Python
Python中用altzone()方法处理时区的教程
May 22 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
Jul 09 Python
Python实现的多线程同步与互斥锁功能示例
Nov 30 Python
谈谈python中GUI的选择
Mar 01 Python
Pandas 合并多个Dataframe(merge,concat)的方法
Jun 08 Python
python读取文本中的坐标方法
Oct 14 Python
Pycharm新建模板默认添加个人信息的实例
Jul 15 Python
django自带serializers序列化返回指定字段的方法
Aug 21 Python
Python json模块与jsonpath模块区别详解
Mar 05 Python
python Cartopy的基础使用详解
Nov 01 Python
判断Python中的Nonetype类型
May 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中捕获超时事件的方法实例
2015/02/12 PHP
Codeigniter的dom类用法实例
2015/06/26 PHP
PHP弹出对话框技巧详细解读
2015/09/26 PHP
thinkPHP框架实现生成条形码的方法示例
2018/06/06 PHP
PHP模版引擎原理、定义与用法实例
2019/03/29 PHP
Javascript中的默认参数详解
2014/10/22 Javascript
javascript异步编程代码书写规范Promise学习笔记
2015/02/11 Javascript
javascript中in运算符用法分析
2015/04/28 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
2015/08/25 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
jQuery检查元素存在性(推荐)
2016/09/17 Javascript
HTML的select控件美化
2017/03/27 Javascript
Vue 组件间的样式冲突污染
2017/08/31 Javascript
echarts学习笔记之图表自适应问题详解
2017/11/22 Javascript
浅谈Vue Element中Select下拉框选取值的问题
2018/03/01 Javascript
CentOS7中源码编译安装NodeJS的完整步骤
2018/10/13 NodeJs
javascript实现点击小图显示大图
2020/11/29 Javascript
python开发之list操作实例分析
2016/02/22 Python
常见python正则用法的简单实例
2016/06/21 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
python如何以表格形式打印输出的方法示例
2019/06/21 Python
在python中将list分段并保存为array类型的方法
2019/07/15 Python
Django 开发调试工具 Django-debug-toolbar使用详解
2019/07/23 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
2020/02/07 Python
Window系统下Python如何安装OpenCV库
2020/03/05 Python
python实现超级马里奥
2020/03/18 Python
解决pycharm安装第三方库失败的问题
2020/05/09 Python
详解python中的异常捕获
2020/12/15 Python
利用CSS3实现毛玻璃效果示例源码
2016/09/25 HTML / CSS
阿迪达斯意大利在线商店:adidas意大利
2016/09/19 全球购物
三只松鼠官方旗舰店:全网坚果销售第1
2017/11/25 全球购物
介绍一下Java的安全机制
2012/06/28 面试题
企业宣传策划方案
2014/05/29 职场文书
爱护环境卫生倡议书
2015/04/29 职场文书
学校捐款活动总结
2015/05/09 职场文书