利用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实现在线程里运行scrapy的方法
Apr 07 Python
详解Python中with语句的用法
Apr 15 Python
Python实现Sqlite将字段当做索引进行查询的方法
Jul 21 Python
pandas 空的dataframe 插入列名的示例
Oct 30 Python
浅谈python3.6的tkinter运行问题
Feb 22 Python
python笔记之mean()函数实现求取均值的功能代码
Jul 05 Python
python用pip install时安装失败的一系列问题及解决方法
Feb 24 Python
python3 使用traceback定位异常实例
Mar 09 Python
利用Python制作动态排名图的实现代码
Apr 09 Python
解决python 执行shell命令无法获取返回值的问题
Dec 05 Python
基于python的matplotlib制作双Y轴图
Apr 20 Python
Python 如何将integer转化为罗马数(3999以内)
Jun 05 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实现的获取URL信息的类
2007/01/02 PHP
PHP加Nginx实现动态裁剪图片方案
2014/03/10 PHP
php简单socket服务器客户端代码实例
2015/05/18 PHP
php实现简易聊天室应用代码
2015/09/23 PHP
PHP多进程通信-消息队列使用
2019/03/08 PHP
jQuery之自动完成组件的深入解析
2013/06/19 Javascript
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
appendChild() 或 insertBefore()使用与区别介绍
2013/10/11 Javascript
ff下JQuery无法监听input的keyup事件的解决方法
2013/12/12 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
学习JavaScript设计模式(封装)
2015/11/26 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
angularjs 页面自适应高度的方法
2018/01/17 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
基于Electron实现桌面应用开发代码实例
2020/07/07 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
[01:46]2018完美盛典章节片——坚守
2018/12/17 DOTA
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
python opencv检测目标颜色的实例讲解
2018/04/02 Python
python操作mysql代码总结
2018/06/01 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
如何用Python制作微信好友个性签名词云图
2019/06/28 Python
python Django里CSRF 对应策略详解
2019/08/05 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
python调用c++返回带成员指针的类指针实例
2019/12/12 Python
css3 media 响应式布局的简单实例
2016/08/03 HTML / CSS
html5视频常用API接口的实战示例
2020/03/20 HTML / CSS
介绍一下内联、左联、右联
2013/12/31 面试题
计算机专业毕业生的自我评价
2013/11/18 职场文书
小学生成长感言
2014/01/30 职场文书
工作过失检讨书
2014/02/23 职场文书
博士生求职信
2014/07/06 职场文书
Python中Matplotlib的点、线形状、颜色以及绘制散点图
2022/04/07 Python