利用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 相关文章推荐
12步教你理解Python装饰器
Feb 25 Python
Python 通过pip安装Django详细介绍
Apr 28 Python
详解如何用OpenCV + Python 实现人脸识别
Oct 20 Python
python函数式编程学习之yield表达式形式详解
Mar 25 Python
Python实现拷贝/删除文件夹的方法详解
Aug 29 Python
如何用python写一个简单的词法分析器
Dec 18 Python
python 文本单词提取和词频统计的实例
Dec 22 Python
python调用其他文件函数或类的示例
Jul 16 Python
Python列表去重复项的N种方法(实例代码)
May 12 Python
详解用Python调用百度地图正/逆地理编码API
Jul 02 Python
利用Python实现朋友圈中的九宫格图片效果
Sep 03 Python
python在CMD界面读取excel所有数据的示例
Sep 28 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 中文和编码判断代码
2010/05/16 PHP
PHP下对数组进行排序的函数
2010/08/08 PHP
php curl选项列表(超详细)
2013/07/01 PHP
PHP连接和操作MySQL数据库基础教程
2014/09/29 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
2016/03/15 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
在IE中调用javascript打开Excel的代码(downmoon原作)
2007/04/02 Javascript
JQuery.uploadify 上传文件插件的使用详解 for ASP.NET
2010/01/22 Javascript
javascript判断是手机还是电脑访问网页的简单实例分享
2014/06/03 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
jQuery过滤选择器详解
2015/01/13 Javascript
表单验证插件Validation应用的实例讲解
2015/10/10 Javascript
JavaScript  event对象整理及详细介绍
2016/10/10 Javascript
vue+mockjs模拟数据实现前后端分离开发的实例代码
2017/08/08 Javascript
Express + Session 实现登录验证功能
2017/09/08 Javascript
ES6 javascript中class静态方法、属性与实例属性用法示例
2017/10/30 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
layui select 禁止点击的实现方法
2019/09/05 Javascript
vue实现弹幕功能
2019/10/25 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
webpack.DefinePlugin与cross-env区别详解
2020/02/23 Javascript
Python装饰器的函数式编程详解
2015/02/27 Python
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
2018/03/23 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2018/04/02 Python
python3处理含有中文的url方法
2018/05/10 Python
python+numpy+matplotalib实现梯度下降法
2018/08/31 Python
python实现QQ邮箱/163邮箱的邮件发送
2019/01/22 Python
对Python定时任务的启动和停止方法详解
2019/02/19 Python
Django使用Jinja2模板引擎的示例代码
2019/08/09 Python
基于Python中isfile函数和isdir函数使用详解
2019/11/29 Python
Python项目跨域问题解决方案
2020/06/22 Python
软件工程师面试题
2012/06/25 面试题
法院反腐倡廉心得体会
2014/09/09 职场文书
2014年转正工作总结
2014/11/08 职场文书
小学生组织委员竞选稿
2015/11/21 职场文书