利用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 相关文章推荐
Windows系统下使用flup搭建Nginx和Python环境的方法
Dec 25 Python
requests和lxml实现爬虫的方法
Jun 11 Python
解决Spyder中图片显示太小的问题
Apr 27 Python
python 中文件输入输出及os模块对文件系统的操作方法
Aug 27 Python
python实现n个数中选出m个数的方法
Nov 13 Python
python对视频画框标记后保存的方法
Dec 07 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
Jan 29 Python
python进阶之自定义可迭代的类
Aug 20 Python
Python中__repr__和__str__区别详解
Nov 07 Python
python matplotlib包图像配色方案分享
Mar 14 Python
解决Pymongo insert时会自动添加_id的问题
Dec 05 Python
python文件与路径操作神器 pathlib
Apr 01 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 根据IP地址控制访问的代码
2010/04/22 PHP
PHP数据类型的总结分析
2013/06/13 PHP
PHP+Ajax验证码验证用户登录
2016/07/20 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
Ext面向对象开发实践(续)
2008/11/18 Javascript
ExtJs grid行 右键菜单的两种方法
2010/06/19 Javascript
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
2013/11/25 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
jQuery使用$.ajax进行即时验证的方法
2015/12/08 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
2016/12/26 Javascript
bootstrap——bootstrapTable实现隐藏列的示例
2017/01/14 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
vue鼠标悬停事件实例详解
2019/04/01 Javascript
生成无限制的微信小程序码的示例代码
2019/09/20 Javascript
[03:44]2015国际邀请赛选手档案—Cloud9.NoTail
2015/07/28 DOTA
[02:58]魔廷新尊——痛苦女王至宝语音台词节选
2020/06/14 DOTA
Python格式化压缩后的JS文件的方法
2015/03/05 Python
Python使用修饰器执行函数的参数检查功能示例
2017/09/26 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
出国留学自荐信
2013/10/25 职场文书
信息科学与技术专业求职信范文
2014/02/20 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
房屋认购协议书
2015/01/29 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
导游词之南迦巴瓦峰
2019/11/19 职场文书
晶体管单管来复再生式收音机
2021/04/22 无线电
JavaScript 对象创建的3种方法
2021/11/17 Javascript