利用python-pypcap抓取带VLAN标签的数据包方法

作者:chenxiangneu 时间:2021-03-15 04:46:20 

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标签的数据包方法

来源:https://blog.csdn.net/chenxiangneu/article/details/78350406

标签:python,pypcap,VLAN,数据包
0
投稿

猜你喜欢

  • TensorFlow实现iris数据集线性回归

    2023-11-14 09:56:39
  • Django rstful登陆认证并检查session是否过期代码实例

    2022-11-04 16:17:15
  • Python实现数据可视化看如何监控你的爬虫状态【推荐】

    2022-07-15 11:50:43
  • 详解Bagging算法的原理及Python实现

    2021-06-10 00:20:41
  • Python的ORM框架SQLAlchemy入门教程

    2023-01-17 03:41:05
  • Python代码块及缓存机制原理详解

    2023-07-02 08:12:07
  • Python3中的json模块使用详解

    2021-09-27 22:21:22
  • 使用Python实现一个栈判断括号是否平衡

    2022-01-04 02:20:29
  • 解决出现SoapFault (looks like we got no XML document)的问题

    2023-11-19 04:21:01
  • Javascript:keyCode键盘键码值表

    2008-02-21 13:16:00
  • Python中if __name__ == "__main__"详细解释

    2023-10-16 06:36:56
  • Tornado 多进程实现分析详解

    2022-06-13 20:51:56
  • PHPExcel笔记, mpdf导出

    2024-06-05 09:44:57
  • BigPipe:高性能的"流水线技术"网页

    2010-11-02 12:47:00
  • 从多个tfrecord文件中无限读取文件的例子

    2023-10-23 13:29:19
  • knockoutjs动态加载外部的file作为component中的template数据源的实现方法

    2024-04-10 10:38:26
  • Python 实现删除某路径下文件及文件夹的实例讲解

    2021-05-07 08:31:49
  • Python的Django中将文件上传至七牛云存储的代码分享

    2023-11-28 14:00:24
  • 基于Python实现语音合成小工具

    2023-01-13 15:25:38
  • try finally 妙用,防止内存泄漏

    2008-03-26 12:52:00
  • asp之家 网络编程 m.aspxhome.com