iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python如何使用libpcap库进行抓包及数据处理
  • 404
分享到

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

2023-07-04 12:07:15 404人浏览 泡泡鱼

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

摘要

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

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

python版本:python 3.9

libpcap版本:1.11.0b7

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

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

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

一、安装libpcap库

1、在线安装

直接使用pip进行安装:

pip install libpcap

默认安装最新版本。

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

2、离线安装

2.1 下载离线安装文件

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

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

2.2 执行离线安装操作

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

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

python -m pip install ./libpcap-1.11.0b7

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

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

安装命令如下:

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

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

二、使用libpcap库

1、导入及指定pcap库

import libpcaplibpcap.config(LIBPCAP="wpcap")

2、常用API介绍

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

python如何使用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的捕获界面看到,具体如下:

python如何使用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类型;

示例代码及运行效果:

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

3.2、离线数据解析

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

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

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

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

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

示例代码及运行效果:

python如何使用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

示例代码及运行效果:

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

以上就是“python如何使用libpcap库进行抓包及数据处理”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网Python频道。

--结束END--

本文标题: python如何使用libpcap库进行抓包及数据处理

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

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

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

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

下载Word文档
猜你喜欢
  • python如何使用libpcap库进行抓包及数据处理
    今天小编给大家分享一下python如何使用libpcap库进行抓包及数据处理的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。p...
    99+
    2023-07-04
  • python3使用libpcap库进行抓包及数据处理的操作方法
    目录一、安装libpcap库1、在线安装2、离线安装2.1 下载离线安装文件2.2 执行离线安装操作二、使用libpcap库1、导入及指定pcap库2、常用API介绍2.1 获取网络...
    99+
    2024-04-02
  • python3怎么使用libpcap库抓包及处理数据
    本文小编为大家详细介绍“python3怎么使用libpcap库抓包及处理数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“python3怎么使用libpcap库抓包及处理数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习...
    99+
    2023-07-04
  • 如何使用Python中的数据分析库进行数据处理
    如何使用Python中的数据分析库进行数据处理人们越来越重视数据处理和分析的重要性。随着电子设备的不断普及和互联网的发展,我们每天都会产生大量的数据。要从这些海量的数据中提取有用的信息和洞察,就需要使用强大的工具和技术。Python作为一种...
    99+
    2023-10-22
    Python 数据分析 数据处理
  • 使用Charles进行网络抓包截取数据
    如何使用Charles进行网络抓包截取数据 文章目录 前言一、Charles是什么?二、使用步骤1.下载安装2.配置网络3.SSL代理设置(可选)4.开始抓包5.查看抓包数据6.截取数据...
    99+
    2023-09-02
    网络 网络爬虫
  • 如何使用Node.js+Cheerio进行数据抓取
    这篇文章主要介绍“如何使用Node.js+Cheerio进行数据抓取”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用Node.js+Cheerio进行数据抓取...
    99+
    2024-04-02
  • 如何在Python中使用同步打包API进行数据处理?
    Python作为一种流行的编程语言,拥有许多用于数据处理的工具和库。在这些工具和库中,同步打包API是一个非常有用的工具,可以帮助我们在Python中进行数据处理。 同步打包API是一个用于打包和同步处理多个数据流的工具。它可以将多个数据流...
    99+
    2023-09-18
    同步 打包 api
  • 如何使用fiddler对手机APP进行抓包
    这篇文章主要讲解了“如何使用fiddler对手机APP进行抓包”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用fiddler对手机APP进行抓包”吧!fiddler手机抓包原理在本机开...
    99+
    2023-06-05
  • 如何在Laravel中使用Python函数进行数据处理?
    Laravel是一个流行的PHP框架,它提供了许多强大的功能和工具,可以使Web应用程序的开发过程更加高效和简便。然而,有时候我们需要使用其他编程语言的函数来处理数据,比如Python。在本文中,我们将介绍如何在Laravel中使用Pyth...
    99+
    2023-06-05
    git 函数 laravel
  • 如何在Python中进行网络数据抓取
    如何在Python中进行网络数据抓取网络数据抓取是指从互联网上获取信息的过程,在Python中,有许多强大的库可以帮助我们实现这个目标。本文将介绍如何使用Python进行网络数据抓取,并提供具体的代码示例。安装必要的库在开始之前,我们需要安...
    99+
    2023-10-22
    数据抓取 Python编程 网络数据抓取
  • Python中如何进行数据预处理?
    Python是一种广泛使用的编程语言,它在数据科学和机器学习领域中也非常受欢迎。在这些领域中,数据预处理是一个至关重要的步骤,因为原始数据通常是不完整、不一致和不可靠的。在本文中,我们将讨论Python中如何进行数据预处理。 1.导入数据 ...
    99+
    2023-08-11
    日志 numy load
  • 如何在 Python 函数中使用 Linux 数组进行数据处理?
    在 Python 中,我们经常需要使用数组来存储和处理数据。而在 Linux 系统中,数组也是常见的数据类型之一。那么,在 Python 函数中如何使用 Linux 数组进行数据处理呢?本文将为您详细介绍。 首先,让我们来了解一下 Pyth...
    99+
    2023-07-20
    函数 linux 数组
  • 如何在Python中使用numpy和django进行数据处理?
    Python是一种面向对象的编程语言,广泛用于数据处理、科学计算和Web开发等领域。其中,numpy和django是Python中非常流行的两个库,分别用于数值计算和Web开发。在本文中,我们将介绍如何在Python中使用numpy和dja...
    99+
    2023-11-01
    numpy django numy
  • Spring大数据:如何使用Python进行重定向和数据处理?
    Spring大数据是一个非常流行的开源框架,它提供了一套完整的解决方案来处理大规模数据。在实际应用中,我们通常需要对大量数据进行重定向和数据处理,而Python语言则是处理这些任务的一种优秀的选择。在本文中,我们将介绍如何使用Python...
    99+
    2023-08-24
    重定向 spring 大数据
  • PHP 中如何使用数组进行数据处理?
    PHP是一种广泛应用于Web开发的脚本语言。在PHP中,数组是一种非常重要的数据结构,用于存储和处理大量数据。数组提供了一种方便的方式来组织和访问数据,使得数据处理变得更加容易和高效。在本文中,我们将介绍PHP中如何使用数组进行数据处理,希...
    99+
    2023-10-24
    数组 unix numpy
  • 如何使用 PHP 函数进行数据预处理?
    php 数据预处理函数可用于进行类型转换、数据清理、日期和时间处理。具体来说,类型转换函数允许变量类型转换(例如 int、float、string);数据清理函数可删除或替换无效数据(如...
    99+
    2024-05-02
    数据预处理 php 函数
  • 如何在Python中使用npm包处理数据?
    Python和npm包都是非常流行的工具,它们之间的结合可以让我们更加高效地处理数据。本文将介绍如何在Python中使用npm包处理数据,并提供一些示例代码。 首先,让我们来了解一下npm包。npm是Node.js的包管理器,它允许开发人员...
    99+
    2023-08-25
    npm 数据类型 linux
  • 如何使用NumPy进行高效的数据处理?
    NumPy是Python科学计算的核心库,它提供了一系列高效的数据结构和算法,能够大大简化数据处理和分析的过程。在本文中,我们将介绍如何使用NumPy进行高效的数据处理。 安装NumPy 在开始使用NumPy之前,需要先安装它。可以使用...
    99+
    2023-06-17
    教程 编程算法 numy
  • Unix 环境下,如何使用 Python 数组进行数据打包和解包?
    Unix 环境下,Python 是一个广泛使用的编程语言。Python 中数组是一种非常强大的数据结构,它可以存储不同类型的数据。在本文中,我们将探讨如何使用 Python 数组进行数据打包和解包。 Python 数组中的元素可以是任何类型...
    99+
    2023-11-02
    数组 unix 打包
  • Python使用pandas将表格数据进行处理
    目录前言一、构建es库中的数据1.1 创建索引1.2 插入数据1.3 查询数据二、对excel表格中的数据处理操作2.1 导出es查询的数据前言 任务描述: 当前有一份excel表格...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作