位置: IT常识 - 正文

python3使用libpcap库进行抓包及数据处理(libpcap python)

编辑:rootadmin
python版本:python 3.9 libpcap版本:1.11.0b7 python libpcap库是底层绑定c语言libpcap库的开发包,旨在提供python应用可访问的unix c libpcap库API(以及为win32系统提供的Npcap、WinPcap),直接使用底层c代码,性能 ...

推荐整理分享python3使用libpcap库进行抓包及数据处理(libpcap python),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:libpcap python,python libpcap,python lirc,python lirc,python libs,python libpcap,lib python,python 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)。pypi地址: https://pypi.org/project/libpcap/github 地址: https://github.com/karpierz/libpcap

一、安装libpcap库1、在线安装直接使用pip进行安装:pip install libpcap默认安装最新版本。

2、离线安装

2.1 下载离线安装文件

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

2.2 执行离线安装操作

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

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

python -m pip install ./libpcap-1.11.0b7

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

安装命令如下:

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

二、使用libpcap库1、导入及指定pcap库import libpcaplibpcap.config(LIBPCAP="wpcap")2、常用API介绍

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

https://www.tcpdump.org/manpages/pcap.3pcap.html

这里描述下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是数据包

返回值:无返回值

python3使用libpcap库进行抓包及数据处理(libpcap python)

使用示例:

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

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类型;

示例代码及运行效果:

完整代码获取途径:

关注微信公众号(聊聊博文,文末可扫码)后回复202210290101获取。

3.2、离线数据解析

可以使用libpcap库进行离线抓包文件的解析,这里进行简单的示例:1)首先需要使用open_offline函数打开pcap文件,需要注意的是,函数的第一个参数必须是byte类型;2)使用pkthdr函数创建header,获取包头信息(时间戳、包大小)​;3)使用next函数循环读取数据包,需要注意的是,获取的packet对象的contents是C语言类型,需要使用它ctypes的pointer函数进行转换​;4)数据包(比如IP头)的解析可使用struct的unpack函数​;示例代码及运行效果:

完整代码获取途径:

关注微信公众号(聊聊博文,文末可扫码)后回复202210290102获取。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

示例代码及运行效果:

完整代码获取途径:

关注微信公众号(聊聊博文,文末可扫码)后回复202210290103获取。三、资源下载本文涉及libpcap源代码及whl文件,可从百度网盘获取:https://pan.baidu.com/s/1E-7xgKqcBDfKwMDIs8XvDQ关注微信公众号(聊聊博文,文末可扫码)后回复2022102901获取。
本文链接地址:https://www.jiuchutong.com/zhishi/304625.html 转载请保留说明!

上一篇:phpcms跟帝国cms区别是什么(帝国cms和thinkphp哪个好)

下一篇:mysql中binlog有什么作用(mysql binlog是什么)

  • word文档底色怎么改成白色(word文档底色怎么变成白色)

    word文档底色怎么改成白色(word文档底色怎么变成白色)

  • 荣耀30pro+支持防水吗(荣耀30pro有防盗功能吗)

    荣耀30pro+支持防水吗(荣耀30pro有防盗功能吗)

  • 10086怎么添加亲情号码(10086怎么添加亲情号码发什么)

    10086怎么添加亲情号码(10086怎么添加亲情号码发什么)

  • 物联卡限速解决方法(物联卡限速是怎么回事)

    物联卡限速解决方法(物联卡限速是怎么回事)

  • 手机闪光灯能开一夜吗(手机闪光灯能开一晚上吗)

    手机闪光灯能开一夜吗(手机闪光灯能开一晚上吗)

  • 打印机无法启动打印作业是怎么回事(打印机无法启动作业)

    打印机无法启动打印作业是怎么回事(打印机无法启动作业)

  • qq群名片打不出特殊符号(qq群名片改不了怎么办)

    qq群名片打不出特殊符号(qq群名片改不了怎么办)

  • 删除和卸载有区别吗(删除与卸载有什么区别)

    删除和卸载有区别吗(删除与卸载有什么区别)

  • 电脑以太网网络电缆被拔出什么意思(电脑以太网网络电缆)

    电脑以太网网络电缆被拔出什么意思(电脑以太网网络电缆)

  • 苹果电脑进入bios设置(苹果电脑进入不了恢复模式)

    苹果电脑进入bios设置(苹果电脑进入不了恢复模式)

  • mp3充电要多久(mp3充一次电能用多久)

    mp3充电要多久(mp3充一次电能用多久)

  • 手机面部识别为什么不能用了(手机面部识别为什么不灵敏)

    手机面部识别为什么不能用了(手机面部识别为什么不灵敏)

  • 红米手机怎么下载不了微信(红米手机怎么下载小说到mp4)

    红米手机怎么下载不了微信(红米手机怎么下载小说到mp4)

  • 红包发不出去怎么回事(红包发不出去怎么设置)

    红包发不出去怎么回事(红包发不出去怎么设置)

  • 主板性能主要看什么(主板性能主要看什么芯片)

    主板性能主要看什么(主板性能主要看什么芯片)

  • q9550和q9650比差多少(q9650和q9550cpu参数配置)

    q9550和q9650比差多少(q9650和q9550cpu参数配置)

  • iphone强制开机怎么开(iphone然后强制开机)

    iphone强制开机怎么开(iphone然后强制开机)

  • 写字板和word的区别(word文档和写字板一样吗)

    写字板和word的区别(word文档和写字板一样吗)

  • ipad2怎么删照片(ipad2的照片怎样删除)

    ipad2怎么删照片(ipad2的照片怎样删除)

  • 华为手机指南针不准怎么调(华为手机指南针不显示海拔如何设置)

    华为手机指南针不准怎么调(华为手机指南针不显示海拔如何设置)

  • 小米推送通知是什么意思(小米系统消息推送)

    小米推送通知是什么意思(小米系统消息推送)

  • iphone11怎么设置双卡(iphone11怎么设置双卡双待)

    iphone11怎么设置双卡(iphone11怎么设置双卡双待)

  • 知乎浏览记录别人看得到吗(知乎的浏览记录别人能看见吗)

    知乎浏览记录别人看得到吗(知乎的浏览记录别人能看见吗)

  • 计算机键盘基础知识(计算机键盘基础题目)

    计算机键盘基础知识(计算机键盘基础题目)

  • iphonexr港版支持电信卡吗(苹果xr港版可以用国行充电器吗)

    iphonexr港版支持电信卡吗(苹果xr港版可以用国行充电器吗)

  • 播放ppt的笔叫什么(播放幻灯片的笔叫什么)

    播放ppt的笔叫什么(播放幻灯片的笔叫什么)

  • 红魔3什么时候出上市(红魔3全新)

    红魔3什么时候出上市(红魔3全新)

  • 手机数据线接口发烫(手机数据线接口发烫还能用吗)

    手机数据线接口发烫(手机数据线接口发烫还能用吗)

  • 教你如何使用注册表给Win11开启传统右键菜单(注册的注释)

    教你如何使用注册表给Win11开启传统右键菜单(注册的注释)

  • win10蓝牙驱动程序错误解决方法(win10蓝牙驱动程序下载)

    win10蓝牙驱动程序错误解决方法(win10蓝牙驱动程序下载)

  • Win11 Build 22000.160(KB5005189)预览版发布,更新了哪些内容

    Win11 Build 22000.160(KB5005189)预览版发布,更新了哪些内容

  • 原生js实现复选框(全选/全不选/反选)效果【含完整代码】(原生js操作数组的方法)

    原生js实现复选框(全选/全不选/反选)效果【含完整代码】(原生js操作数组的方法)

  • 异地存货怎么审计
  • 个人购买二手房贷款能贷多少
  • 如何理解合并报表的调整和抵消
  • 残疾人加计扣除政策文件
  • 个体每月开票超10万
  • 房地产增值税怎么算抵扣土地款
  • 通行费电子发票可以抵扣吗
  • 辅导期一般纳税人
  • 劳动仲裁是怎样仲裁公司的
  • 捐赠个人支出需要交纳个税吗?
  • 运输增值税专票含税价怎么算
  • 企业个人所得税申报系统官网
  • 不同税率的依据
  • 兼职获得员工旅游资源
  • 开发项目的会议纪要
  • 应收账款坏账处理审计
  • 销售折扣计入增值税销售额的
  • 公司转账给法人最多可以转多少
  • 汇总转账凭证可以是一借多贷
  • 差额征税一般纳税人认定标准
  • 外经证金额没开完需要核销吗
  • 个人出租车辆给公司个人所得税
  • 印花税本月计提本月缴纳
  • 用人单位逾期未缴纳社会保险费可能会使用的文书
  • 衍生金融资产属于投资性资产吗
  • 收到办公室桶装水开的普票怎样入账?
  • 怎样清理ie
  • 鸿蒙系统怎么设置屏幕不休眠
  • 摊销费用的会计科目
  • kb4586781安装失败
  • 特殊收入扣减异常怎么解释
  • 期间损益结转有余额
  • PHP:apache_lookup_uri()的用法_Apache函数
  • 货款形式返还
  • 提坏账准备的调整分录
  • 劳务报酬所得缴纳时间
  • 2020香港回归23年
  • 企业发生的诉讼费用
  • framework启动
  • 取得投资是什么意思
  • php如何调用类
  • php中的类
  • php include和include_once
  • SpringBoot+Vue实现在线商城系统
  • openfoam中文教程
  • 小微企业所得税优惠政策最新2022
  • 个体工商户开普通发票需要交税吗
  • 现金流动负债比率和流动比率一样吗
  • 商业汇票如何申请操作
  • 股东投钱一般怎么投
  • 新公司成立需要刻哪些章
  • 工商年报认缴时间过期了怎么办
  • 本月计提费用,发票下个月到可以吗
  • 工会经费与工会福利的区别
  • 法定盈余公积一般按照企业
  • 社保扣费不成功会再次扣费吗
  • 应付暂估会计处理
  • 长期待摊费用怎么记账
  • sql sever使用教程
  • win7系统弹出cd
  • VMware虚拟机中不支持虚拟化
  • linux搭建l2tp服务器
  • 装win7提示失败怎么办
  • ubuntu tcp
  • win7系统误删文件可以恢复吗
  • win8的设置
  • perl脚本use strict
  • Node.js中的事件循环是什么意思
  • unity如何得到输入框的输入
  • nodejs10支持es6吗
  • javascript零基础
  • jquery获取值的几种方法
  • 四川国税发票查询验证
  • 安置残疾人就业增值税即征即退优惠
  • 深圳企业所得税税率多少
  • 亦庄税务局电话号码
  • 南京江宁汽车过户手续及费用
  • 税务稽查增值税账务调整案例
  • 建筑业甲方代扣代缴增值税吗
  • 每个省几个市
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设