利用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 相关文章推荐
Python3基础之基本运算符概述
Aug 13 Python
Python显示进度条的方法
Sep 20 Python
python实现去除下载电影和电视剧文件名中的多余字符的方法
Sep 23 Python
python插入数据到列表的方法
Apr 30 Python
Linux下为不同版本python安装第三方库
Aug 31 Python
python编写朴素贝叶斯用于文本分类
Dec 21 Python
django框架之cookie/session的使用示例(小结)
Oct 15 Python
Python将字符串常量转化为变量方法总结
Mar 17 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
Django1.11自带分页器paginator的使用方法
Oct 31 Python
Django 项目通过加载不同env文件来区分不同环境
Feb 17 Python
Selenium自动化测试工具使用方法汇总
Jun 12 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 strrpos()与strripos()函数
2013/08/31 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
2014/07/22 PHP
php实现的CSS更新类实例
2014/09/22 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
PHP递归调用数组值并用其执行指定函数的方法
2015/04/01 PHP
PHP实现简易计算器功能
2020/08/28 PHP
PHP count_chars()函数讲解
2019/02/14 PHP
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
jquery 事件对象属性小结
2010/04/27 Javascript
jquery 删除cookie失效的解决方法
2013/11/12 Javascript
jQuery简单实现banner图片切换
2014/01/02 Javascript
js实现屏幕自适应局部代码分享
2015/01/30 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
javascript基本语法
2016/05/31 Javascript
input file上传 图片预览功能实例代码
2016/10/25 Javascript
原生js轮播(仿慕课网)
2017/02/15 Javascript
JavaScript 异步调用
2017/10/25 Javascript
js定时器实现倒计时效果
2017/11/05 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
在vue中实现禁止回退上一步,路由不存历史记录
2020/07/22 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
对python生成业务报表的实例详解
2019/02/03 Python
对tensorflow中cifar-10文档的Read操作详解
2020/02/10 Python
Django Form常用功能及代码示例
2020/10/13 Python
python 调整图片亮度的示例
2020/12/03 Python
Allen Edmonds官方网站:一家美国优质男士鞋类及配饰制造商
2019/03/12 全球购物
美工的岗位职责
2013/11/14 职场文书
《地震中的父与子》教学反思
2014/04/10 职场文书
产品生产计划书
2014/05/07 职场文书
春节联欢会策划方案
2014/05/16 职场文书
小学生常见病防治方案
2014/06/06 职场文书
政协会议宣传标语
2014/10/09 职场文书
Python 如何将integer转化为罗马数(3999以内)
2021/06/05 Python
TV动画《间谍过家家》公开PV
2022/03/20 日漫