利用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 25 Python
python最长回文串算法
Jun 04 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
Dec 10 Python
python语言元素知识点详解
May 15 Python
Python用Try语句捕获异常的实例方法
Jun 26 Python
python matplotlib 画dataframe的时间序列图实例
Nov 20 Python
详解Python修复遥感影像条带的两种方式
Feb 23 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
Jun 11 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
Nov 17 Python
scrapy redis配置文件setting参数详解
Nov 18 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
Mar 01 Python
python关于集合的知识案例详解
May 30 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在文件指定行中写入代码的方法
2012/05/23 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
PHP内核探索之解释器的执行过程
2015/12/22 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
2017/08/25 PHP
PHP中PCRE正则解析代码详解
2019/04/26 PHP
让你的PHP,APACHE,NGINX支持大文件上传
2021/03/09 PHP
javascript 关闭IE6、IE7
2009/06/01 Javascript
为指定元素增加样式的js代码
2009/12/09 Javascript
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
javascript+canvas制作九宫格小程序
2014/12/28 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
轻松实现js弹框显示选项
2016/09/13 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
js实现截图保存图片功能的代码示例
2017/02/16 Javascript
关于在mongoose中填充外键的方法详解
2017/08/14 Javascript
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
vue中锚点的三种方法
2018/07/06 Javascript
JQuery的加载和选择器用法简单示例
2019/05/13 jQuery
js实现单元格拖拽效果
2020/02/10 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
Python不规范的日期字符串处理类
2014/06/10 Python
使用Python解析JSON数据的基本方法
2015/10/15 Python
python 多个参数不为空校验方法
2019/02/14 Python
Pycharm简单使用教程(入门小结)
2019/07/04 Python
pytorch使用指定GPU训练的实例
2019/08/19 Python
opencv 实现特定颜色线条提取与定位操作
2020/06/02 Python
新手学python应该下哪个版本
2020/06/11 Python
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
土木工程建筑专业毕业生求职信
2013/10/21 职场文书
国际金融专业大学生职业生涯规划书
2013/12/28 职场文书
租房协议书范本
2014/04/09 职场文书
家长会学生演讲稿
2014/04/26 职场文书
幼儿园母亲节活动总结
2015/02/10 职场文书
红领巾广播站广播稿
2015/08/19 职场文书
一次线上mongo慢查询问题排查处理记录
2022/03/18 MongoDB