我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python3怎么使用libpcap库抓包及处理数据

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python3怎么使用libpcap库抓包及处理数据

本文小编为大家详细介绍“python3怎么使用libpcap库抓包及处理数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“python3怎么使用libpcap库抓包及处理数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    python版本:python 3.9

    libpcap版本:1.11.0b7

    python libpcap库是底层绑定c语言libpcap库的开发包,旨在提供python应用可访问的unix c libpcap库API(以及为win32系统提供的Npcap、WinPcap),直接使用底层c代码,性能很好。

    这里记录下Windows 10 环境下python3.9如何安装及使用libpcap库(Linux和mac系统可参考Windows)。

    python3怎么使用libpcap库抓包及处理数据

    python3怎么使用libpcap库抓包及处理数据

    一、安装libpcap库

    1、在线安装

    直接使用pip进行安装:

    pip install libpcap

    默认安装最新版本。

    python3怎么使用libpcap库抓包及处理数据

    2、离线安装

    2.1 下载离线安装文件

    可以在pypi页面源代码或whl文件。

    python3怎么使用libpcap库抓包及处理数据

    2.2 执行离线安装操作

    1) 可以使用源码进行安装

    解压文件到当前目录,然后执行安装命令:

    python -m pip install ./libpcap-1.11.0b7

    python3怎么使用libpcap库抓包及处理数据

    2)也可以使用whl文件进行离线安装

    安装命令如下:

    python -m pip install libpcap-1.11.0b7-py3-none-any.whl

    python3怎么使用libpcap库抓包及处理数据

    二、使用libpcap库

    1、导入及指定pcap库

    import libpcaplibpcap.config(LIBPCAP="wpcap")

    2、常用API介绍

    tcpdump就是以libpcap为基础实现的,c语言libpcap的文档可以在tcpdump官网找:

    python3怎么使用libpcap库抓包及处理数据

    这里描述下python常用接口。

    2.1 获取网络设备接口
    • lookupdev(errbuf)

    功能:该函数用于查找网络设备,返回的值可以被open_live函数直接调用。

    参数:

    errbuf为c语言字符串类型,用于获取错误信息。

    使用示例:

    import ctypes as ctimport libpcap as pcaperrbuf = ct.create_string_buffer(pcap.PCAP_ERRBUF_SIZE + 1)device = pcap.lookupdev(errbuf)print(errbuf.value)
    • findalldevs(alldevs, errbuf)

    功能:该函数用于查找所有网络设备。

    参数:

    alldevs为pcap_if_t结构体指针,用于存储查找到的所有网络设备信息。

    errbuf为c语言字符串类型,用于获取错误信息。

    使用示例:

    import ctypes as ctimport libpcap as pcaperrbuf = ct.create_string_buffer(pcap.PCAP_ERRBUF_SIZE + 1)alldevs = ct.POINTER(pcap.pcap_if_t)()    pcap.findalldevs(ct.byref(alldevs), errbuf)print(alldevs[0].name)pcap.freealldevs(alldevs)
    2.2 抓包接口
    • open_live(device:bytes,snaplen:int,promisc:int,to_ms:int,errbuf)

    功能:该函数用于打开一个用于捕获数据的网络设备

    参数:

    device为网络接口的名字,可通过api获取,也可以人为指定,如:"eth0"

    snaplen是捕获数据包的长度,不能大于65535

    promise用于标记是否开启混杂模式,1代表混杂模式,其它值代表非混杂模式

    to_ms代表需要等待的毫秒数,超过这个时间后,获得数据包的函数会立即返回,0表示一直等待直到有数据包到来

    errbuf为c语言字符串类型,用于获取错误信息。

    返回值:返回pcap_t类型指针,后面的所有操作都要使用这个指针。

    使用示例:

    import ctypes as ctimport libpcap as pcapdevice = b'eth0' # linux errbuf = ct.create_string_buffer(pcap.PCAP_ERRBUF_SIZE + 1)handle = pcap.open_live(device,4096,1,1000,errbuf)if errbuf.value:    print("hanle error :",errbuf.value)
    • open_offline(fname:bytes,errbuf)

    功能:该函数用于打开离线抓包文件

    参数:

    fname为文件名称,比如:b"/tmp/test1.cap"

    errbuf为c语言字符串类型,用于获取错误信息。

    返回值:返回pcap_t类型指针,后面的所有操作都要使用这个指针。

    使用示例:

    import ctypes as ctimport libpcap as pcaperrbuf = ct.create_string_buffer(pcap.PCAP_ERRBUF_SIZE + 1)handle = pcap.open_offline(fname,errbuf)if errbuf.value:    print("hanle error :",errbuf.value)
    2.3 数据包获取接口
    • next(handle,pheader)

    功能:该函数用于获取数据包,一次只获取一个包。

    参数:

    handle为pcap_t类型指针

    pheader为pcap_pkthdr结构体指针,可通过pkthdr函数创建

    返回值:返回u_char类型指针,代表包数据,可使用struct.unpack函数解析

    使用示例:

    import libpcap as pcappheader = pcap.pkthdr()packet = pcap.next(handle,pheader)
    2.4 写文件接口
    • dump_open(handle,fname:bytes)

    功能:该函数用于打开文件,存储获取到的数据包。

    参数:

    handle为pcap_t类型指针

    fname为文件名称

    返回值:返回pcap_dumper_t 类型指针,后面的所有操作都要使用这个指针。

    使用示例:

    import libpcap as pcapfname = b"realtime1.cap"fPcap = pcap.dump_open(handle,fname)
    • dump(handle,pheader,packet)

    功能:该函数用于存储获取到的数据包。

    参数:

    handle为pcap_dumper_t类型指针

    pheader为pcap_pkthdr结构体指针

    packet是数据包

    返回值:无返回值

    使用示例:

    fPcapUbyte = ct.cast(fPcap,ct.POINTER(ct.c_ubyte))pcap.dump(fPcapUbyte,pheader,packet)
    • dump_flush(handle)

    功能:该函数用于将缓存的数据刷到磁盘

    参数:

    handle为pcap_dumper_t类型指针

    返回值:错误码,0代表成功,-1代表出错

    2.5 资源释放接口
    • close(handle)

    功能:释放pcap_t类型指针

    参数:

    handle为pcap_t类型指针

    返回值:无返回值

    • dump_close(handle)

    功能:释放pcap_dumper_t类型指针

    参数:

    handle为pcap_dumper_t类型指针

    返回值:无返回值

    3、典型使用场景

    3.1、网卡实时抓包

    可以使用libpcap库进行网卡实时数据抓包,这里进行简单的示例:

    1)首先需要获取或指定抓包设备

    方法1 :指定网卡接口名称

    device = b'\Device\NPF_{BFDBF91E-9848-417D-B8AB-D3ED19990717}' # windows

    device = b'eth0' # linux

    Windows网卡接口名称可在wireshark的捕获界面看到,具体如下:

    python3怎么使用libpcap库抓包及处理数据

    linux网卡名称获取:ifconfig

    方法2 :使用lookupdev获取网卡接口名称

    device = pcap.lookupdev(errbuf)

    方法3 :使用findalldevs获取网卡接口名称

    alldevs = ct.POINTER(pcap.pcap_if_t)()

    pcap.findalldevs(ct.byref(alldevs), errbuf)

    device =alldevs[0].name

    2)使用open_live函数进行网卡抓包;

    3)使用pkthdr函数创建header,获取包头信息(时间戳、包大小);

    4)使用next函数循环读取数据包,需要注意的是,获取的packet对象的contents是C语言类型,需要使用它ctypes的pointer函数进行转换;

    5)数据包(比如IP头)的解析可使用struct的unpack函数;

    6)如果要将抓包数据存盘,可使用dump_open、dump、dump_flush系列函数进行操作,需要注意的是,dump_open函数的第二个参数必须是byte类型;

    示例代码及运行效果:

    python3怎么使用libpcap库抓包及处理数据

      3.2、离线数据解析

      可以使用libpcap库进行离线抓包文件的解析,这里进行简单的示例:

      1)首先需要使用open_offline函数打开pcap文件,需要注意的是,函数的第一个参数必须是byte类型;

      2)使用pkthdr函数创建header,获取包头信息(时间戳、包大小);

      3)使用next函数循环读取数据包,需要注意的是,获取的packet对象的contents是C语言类型,需要使用它ctypes的pointer函数进行转换;

      4)数据包(比如IP头)的解析可使用struct的unpack函数;

      示例代码及运行效果:

      python3怎么使用libpcap库抓包及处理数据

        3.3、使用过滤条件抓包

        网卡实时抓包和离线数据解析时,可以设置过滤条件,避免数据量过大。

        过滤条件示例:

        1) 过滤IP

        • host 过滤某个ip的所有包

        host 8.8.8.8

        • class="lazy" data-src 过滤源ip

        class="lazy" data-src 8.8.8.8

        • dst过滤目的ip

        dst 8.8.8.8

        2)过滤端口

        • port进行单个端口过滤

        port 22

        • portange进行多个端口过滤

        portange 1-1024

        • 可使用class="lazy" data-src或dst指定端口方向

        class="lazy" data-src port 22

        dst port 22

        3)指定协议

        tcp

        udp

        icmp

        4)使用组合条件

        • and 进行与逻辑

        class="lazy" data-src localhost and dst port 22

        class="lazy" data-src localhost && dst port 22

        • or 进行或逻辑

        port 80 or 22

        port 80 || 22

        示例代码及运行效果:

        python3怎么使用libpcap库抓包及处理数据

        读到这里,这篇“python3怎么使用libpcap库抓包及处理数据”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

        免责声明:

        ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

        ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

        python3怎么使用libpcap库抓包及处理数据

        下载Word文档到电脑,方便收藏和打印~

        下载Word文档

        猜你喜欢

        python3怎么使用libpcap库抓包及处理数据

        本文小编为大家详细介绍“python3怎么使用libpcap库抓包及处理数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“python3怎么使用libpcap库抓包及处理数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习
        2023-07-04

        python如何使用libpcap库进行抓包及数据处理

        今天小编给大家分享一下python如何使用libpcap库进行抓包及数据处理的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。p
        2023-07-04

        怎么使用python3线程池ThreadPoolExecutor处理csv文件数据

        这篇文章主要介绍“怎么使用python3线程池ThreadPoolExecutor处理csv文件数据”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用python3线程池ThreadPoolEx
        2023-07-02

        ​Couchbase数据库怎么安装及使用

        Couchbase数据库安装本指南介绍了在Linux和Windows系统上安装和配置Couchbase数据库的详细步骤。包括通过Docker或下载安装程序安装的过程,以及配置、连接、操作和管理数据库的说明。同时提供了N1QL查询、索引和缓存的使用方面的最佳实践,以优化性能和可靠性。
        ​Couchbase数据库怎么安装及使用
        2024-04-10

        ​SQLite数据库怎么安装及使用

        SQLite数据库安装和使用安装:Windows:下载并解压缩SQLite二进制文件,添加目标目录到路径变量。macOS:通过Homebrew安装SQLite;对于AppleSilicon,安装Rosetta2。Linux:通过系统包管理器安装SQLite。使用:建立连接:使用sqlite3模块建立数据库连接。创建表:使用CREATETABLE语句创建表。插入数据:使用INSERT语句插入数据。查询数据:使用SELECT语句查询数据。更新数据:使用UPDATE语句更新数据。删除数据:使用DELETE语句删
        ​SQLite数据库怎么安装及使用
        2024-04-13

        Java结构化数据处理开源库SPL怎么使用

        本篇内容主要讲解“Java结构化数据处理开源库SPL怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java结构化数据处理开源库SPL怎么使用”吧!现代Java应用架构越来越强调数据存储和
        2023-06-30

        怎么在R语言中使用dplyr包对数据进行处理

        这期内容当中小编将会给大家带来有关怎么在R语言中使用dplyr包对数据进行处理,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、数据筛选函数:#可使用filter()函数筛选/查找特定条件的行或者样本#f
        2023-06-08

        数据库空间使用怎么管理

        数据库空间管理是确保数据库运行顺畅和数据完整性的重要方面。以下是一些数据库空间管理的最佳实践:1. 监控数据库空间使用情况:使用数据库管理系统(DBMS)提供的监控工具来跟踪数据库空间使用情况。这样可以及时发现空间不足或空间浪费的情况。2.
        2023-06-06

        使用MongoDB做数据库怎么管理

        管理MongoDB数据库可以使用MongoDB提供的命令行工具mongo和可视化管理工具MongoDB Compass。1. 使用命令行工具mongo:- 打开终端或命令提示符,输入`mongo`命令连接到MongoDB服务。- 使用`us
        2023-09-01

        怎么使用Python处理文本数据

        本篇内容介绍了“怎么使用Python处理文本数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!用python处理文本数据实验目的熟悉pyth
        2023-07-02

        怎么使用Spring Boot处理JSON数据

        这篇文章主要介绍“怎么使用Spring Boot处理JSON数据”,在日常操作中,相信很多人在怎么使用Spring Boot处理JSON数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Spring
        2023-06-02

        怎么使用python处理数据类型及颜色空间转换

        这篇文章主要介绍“怎么使用python处理数据类型及颜色空间转换”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用python处理数据类型及颜色空间转换”文章能帮助大家解决问题。一、图像数据类型
        2023-07-02

        Python数据处理之pd.Series()函数怎么使用

        本文小编为大家详细介绍“Python数据处理之pd.Series()函数怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python数据处理之pd.Series()函数怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一
        2023-07-02

        怎么使用NumPy进行数组数据处理

        本篇内容主要讲解“怎么使用NumPy进行数组数据处理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用NumPy进行数组数据处理”吧!介绍NumPy是Python中用于数值计算的核心包之一,
        2023-07-05

        IDEA中怎么使用数据库工具窗口管理数据库

        在IDEA中,可以使用数据库工具窗口来管理数据库。以下是在IDEA中使用数据库工具窗口管理数据库的步骤:打开数据库工具窗口:在IDEA顶部菜单中选择View -> Tool Windows -> Database,或者使用快捷键Alt +
        IDEA中怎么使用数据库工具窗口管理数据库
        2024-04-03

        常用的python图像处理库有哪些及怎么使用

        这篇“常用的python图像处理库有哪些及怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“常用的python图像处理库
        2023-06-30

        MySQL数据库索引的弊端及怎么使用

        本篇内容介绍了“MySQL数据库索引的弊端及怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!合理利用索引在工作中,我们可能判断数据表中
        2023-06-21

        PostgreSQL数据库视图及子查询怎么使用

        本篇内容介绍了“PostgreSQL数据库视图及子查询怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!视图表里面保存的是实际数据,视图
        2023-06-29

        编程热搜

        • Python 学习之路 - Python
          一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
          Python 学习之路 - Python
        • chatgpt的中文全称是什么
          chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
          chatgpt的中文全称是什么
        • C/C++中extern函数使用详解
        • C/C++可变参数的使用
          可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
          C/C++可变参数的使用
        • css样式文件该放在哪里
        • php中数组下标必须是连续的吗
        • Python 3 教程
          Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
          Python 3 教程
        • Python pip包管理
          一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
          Python pip包管理
        • ubuntu如何重新编译内核
        • 改善Java代码之慎用java动态编译

        目录