利用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去除文件中空格、Tab及回车的方法
Apr 12 Python
Python3实现的画图及加载图片动画效果示例
Jan 19 Python
使用python进行文本预处理和提取特征的实例
Jun 05 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
Dec 17 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
May 04 Python
PyQt5实现简易电子词典
Jun 25 Python
在python中做正态性检验示例
Dec 09 Python
tf.concat中axis的含义与使用详解
Feb 07 Python
Python使用Numpy模块读取文件并绘制图片
May 13 Python
python爬虫要用到的库总结
Jul 28 Python
python中Array和DataFrame相互转换的实例讲解
Feb 03 Python
利用python Pandas实现批量拆分Excel与合并Excel
May 23 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
PhpStorm配置Xdebug调试的方法步骤
2019/02/02 PHP
PHP生成图表pChart的示例解析
2020/07/31 PHP
Javascript学习笔记二 之 变量
2010/12/15 Javascript
js实现的常用的左侧导航效果
2013/10/17 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
2014/08/20 Javascript
js使用for循环与innerHTML获取选中tr下td值
2014/09/26 Javascript
修改或扩展jQuery原生方法的代码实例
2015/01/13 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
jquery中JSON的解析方式
2015/03/16 Javascript
JS选项卡动态替换banner图片路径的方法
2015/05/11 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
JS采用绝对定位实现回到顶部效果完整实例
2016/06/20 Javascript
早该知道的7个JavaScript技巧
2016/06/21 Javascript
模拟javascript中的sort排序(简单实例)
2016/08/17 Javascript
重新理解JavaScript的六种继承方式
2017/03/24 Javascript
vue mint-ui tabbar变组件使用
2018/05/04 Javascript
layui在form表单页面通过Validform加入简单验证的方法
2019/09/06 Javascript
vue解决花括号数据绑定不成功的问题
2019/10/30 Javascript
js模拟实现烟花特效
2020/03/10 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
Python编写一个闹钟功能
2017/07/11 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
对python实现合并两个排序链表的方法详解
2019/01/23 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
2020/03/11 Python
Spring http服务远程调用实现过程解析
2020/06/11 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
人力资源管理专业学生自我评价
2013/11/20 职场文书
小学生考试获奖感言
2014/01/30 职场文书
城市精细化管理实施方案
2014/03/04 职场文书
办公自动化专业大学生职业规划书
2014/03/06 职场文书
小学教师寄语大全
2014/04/03 职场文书
演讲稿开场白台词
2014/08/25 职场文书