利用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 shell根据ip获取主机名代码示例
Nov 25 Python
浅谈numpy数组的几种排序方式
Dec 15 Python
Python3多线程爬虫实例讲解代码
Jan 05 Python
python3+PyQt5自定义视图详解
Apr 24 Python
如何利用Python开发一个简单的猜数字游戏
Sep 22 Python
pytorch 准备、训练和测试自己的图片数据的方法
Jan 10 Python
Python JSON编解码方式原理详解
Jan 20 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
Feb 12 Python
解决reload(sys)后print失效的问题
Apr 25 Python
基于python计算并显示日间、星期客流高峰
May 07 Python
Selenium 配置启动项参数的方法
Dec 04 Python
Python selenium的这三种等待方式一定要会!
Jun 10 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
11个PHP 分页脚本推荐
2011/08/15 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
jQuery使用手册之三 CSS操作
2007/03/24 Javascript
jQuery实现tab选项卡效果的方法
2015/07/08 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
JavaScript实现公历转农历功能示例
2017/02/13 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
nodejs 图片预览和上传的示例代码
2017/09/30 NodeJs
JavaScript比较同一天的时间大小实例代码
2018/02/09 Javascript
Vue.js 父子组件通信的十种方式
2018/10/30 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
在Vue中创建可重用的 Transition的方法
2020/06/02 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
纯js+css实现在线时钟
2020/08/18 Javascript
[02:34]2016完美“圣”典风云人物:BurNIng专访
2016/12/10 DOTA
Python 字典(Dictionary)操作详解
2014/03/11 Python
Python实现将Excel转换为json的方法示例
2017/08/05 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
2018/05/18 Python
TensorFlow数据输入的方法示例
2018/06/19 Python
python write无法写入文件的解决方法
2019/01/23 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
使用keras实现Precise, Recall, F1-socre方式
2020/06/15 Python
python利用os模块编写文件复制功能——copy()函数用法
2020/07/13 Python
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
南京软件公司的.net程序员笔试题
2014/08/31 面试题
关于期中考试的反思
2014/02/02 职场文书
大学生全国两会报告感想
2014/03/17 职场文书
体现团队精神的口号
2014/06/06 职场文书
2014年社团工作总结范文
2014/11/27 职场文书
项目经理岗位职责
2015/01/31 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书
Python自动化测试PO模型封装过程详解
2021/06/22 Python
table不让td文字溢出操作方法
2022/12/24 HTML / CSS