iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python3怎么使用libpcap库抓包及处理数据
  • 533
分享到

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

2023-07-04 12:07:39 533人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

本文小编为大家详细介绍“python3怎么使用libpcap库抓包及处理数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“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库(linuxMac系统可参考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

        • src 过滤源ip

        src 8.8.8.8

        • dst过滤目的ip

        dst 8.8.8.8

        2)过滤端口

        • port进行单个端口过滤

        port 22

        • portange进行多个端口过滤

        portange 1-1024

        • 可使用src或dst指定端口方向

        src port 22

        dst port 22

        3)指定协议

        tcp

        udp

        icmp

        4)使用组合条件

        • and 进行与逻辑

        src localhost and dst port 22

        src localhost && dst port 22

        • or 进行或逻辑

        port 80 or 22

        port 80 || 22

        示例代码及运行效果:

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

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

        --结束END--

        本文标题: python3怎么使用libpcap库抓包及处理数据

        本文链接: https://www.lsjlt.com/news/345015.html(转载时请注明来源链接)

        有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

        本篇文章演示代码以及资料文档资料下载

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

        下载Word文档
        猜你喜欢
        • python3怎么使用libpcap库抓包及处理数据
          本文小编为大家详细介绍“python3怎么使用libpcap库抓包及处理数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“python3怎么使用libpcap库抓包及处理数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习...
          99+
          2023-07-04
        • python3使用libpcap库进行抓包及数据处理的操作方法
          目录一、安装libpcap库1、在线安装2、离线安装2.1 下载离线安装文件2.2 执行离线安装操作二、使用libpcap库1、导入及指定pcap库2、常用API介绍2.1 获取网络...
          99+
          2024-04-02
        • python如何使用libpcap库进行抓包及数据处理
          今天小编给大家分享一下python如何使用libpcap库进行抓包及数据处理的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。p...
          99+
          2023-07-04
        • 怎么使用python3线程池ThreadPoolExecutor处理csv文件数据
          这篇文章主要介绍“怎么使用python3线程池ThreadPoolExecutor处理csv文件数据”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用python3线程池ThreadPoolEx...
          99+
          2023-07-02
        • 数据库用户资源管理涉及到的数据包有哪些
          本篇内容介绍了“数据库用户资源管理涉及到的数据包有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!用户资...
          99+
          2024-04-02
        • Java结构化数据处理开源库SPL怎么使用
          本篇内容主要讲解“Java结构化数据处理开源库SPL怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java结构化数据处理开源库SPL怎么使用”吧!现代Java应用架构越来越强调数据存储和...
          99+
          2023-06-30
        • 怎么使用Python3多线程处理爬虫
          本文小编为大家详细介绍“怎么使用Python3多线程处理爬虫”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Python3多线程处理爬虫”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。多线程到底什么是多线程...
          99+
          2023-07-05
        • linux中怎么利用python3连接mysql数据库
          linux中怎么利用python3连接mysql数据库,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.安装pymysqlpymysql就是作为python3环境下mysq...
          99+
          2023-06-09
        • mysql数据库中怎么处理重复数据
          这篇文章给大家介绍mysql数据库中怎么处理重复数据,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。方法一:防止出现重复数据也就是说我们再设计表的时候,就应该对这些数据设置一个UNIQUE 索引,在插入的时候就可以保证其...
          99+
          2023-06-19
        • 数据库空间使用怎么管理
          数据库空间管理是确保数据库运行顺畅和数据完整性的重要方面。以下是一些数据库空间管理的最佳实践:1. 监控数据库空间使用情况:使用数据...
          99+
          2023-06-06
          数据库空间 空间
        • python3使用mutagen进行音频元数据处理的方法
          目录一、安装1、在线安装2、离线安装2.1 下载离线安装文件 2.2  执行离线安装操作 二、基础用法1、获取音频文件元数据  2、...
          99+
          2024-04-02
        • 如何在Python中使用npm包处理数据?
          Python和npm包都是非常流行的工具,它们之间的结合可以让我们更加高效地处理数据。本文将介绍如何在Python中使用npm包处理数据,并提供一些示例代码。 首先,让我们来了解一下npm包。npm是Node.js的包管理器,它允许开发人员...
          99+
          2023-08-25
          npm 数据类型 linux
        • 使用MongoDB做数据库怎么管理
          管理MongoDB数据库可以使用MongoDB提供的命令行工具mongo和可视化管理工具MongoDB Compass。1. 使用命...
          99+
          2023-09-01
          mongodb 数据库
        • 怎么在R语言中使用dplyr包对数据进行处理
          这期内容当中小编将会给大家带来有关怎么在R语言中使用dplyr包对数据进行处理,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。数据筛选函数:#可使用filter()函数筛选/查找特定条件的行或者样本#fil...
          99+
          2023-06-08
        • 使用数据库分区的原因及好处是什么
          这篇文章主要介绍“使用数据库分区的原因及好处是什么”,在日常操作中,相信很多人在使用数据库分区的原因及好处是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”使用数据库分区的...
          99+
          2024-04-02
        • 数据库1045错误怎么处理
          数据库1045错误是因为用户没有足够的权限访问数据库导致的。处理方法如下: 检查用户名和密码是否正确:确保你正在使用正确的用户名...
          99+
          2023-10-28
          数据库
        • AndroidRxJava异步数据处理库使用详解
          目录观察者模式操作符创建Observable转换Observable过滤Observable组合Observable错误处理Schedulers调度器-解决多线程问题管理RxJava...
          99+
          2022-11-13
          Android RxJava异步数据处理 Android RxJava
        • 怎么理解数据库包和包体的删除语法
          本篇内容主要讲解“怎么理解数据库包和包体的删除语法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解数据库包和包体的删除语法”吧!我创建了这个小工具程序来显...
          99+
          2024-04-02
        • MySQL数据库索引的弊端及怎么使用
          本篇内容介绍了“MySQL数据库索引的弊端及怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!合理利用索引在工作中,我们可能判断数据表中...
          99+
          2023-06-21
        • 怎么使用Spring Boot处理JSON数据
          这篇文章主要介绍“怎么使用Spring Boot处理JSON数据”,在日常操作中,相信很多人在怎么使用Spring Boot处理JSON数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Spring ...
          99+
          2023-06-02
        软考高级职称资格查询
        编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
        • 官方手机版

        • 微信公众号

        • 商务合作