位置: 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是什么)

  • 苹果微信怎么设置微信钱包锁(苹果微信怎么设置置顶)

    苹果微信怎么设置微信钱包锁(苹果微信怎么设置置顶)

  • 苹果13耳机怎么连接(苹果13耳机怎么连接有线)

    苹果13耳机怎么连接(苹果13耳机怎么连接有线)

  • 芝麻购开通怎么关闭(芝麻购服务是什么)

    芝麻购开通怎么关闭(芝麻购服务是什么)

  • 华为mate30能不能插u盘(华为mate30能不能用120w的充电)

    华为mate30能不能插u盘(华为mate30能不能用120w的充电)

  • 用手机号注册软件有危险吗(用手机号注册软件可以看得到真实姓名吗)

    用手机号注册软件有危险吗(用手机号注册软件可以看得到真实姓名吗)

  • 移动硬盘和u盘相比最大的优势是(移动硬盘和u盘的使用寿命)

    移动硬盘和u盘相比最大的优势是(移动硬盘和u盘的使用寿命)

  • xs国行是双卡吗(xs国行也是单卡吗)

    xs国行是双卡吗(xs国行也是单卡吗)

  • win7ultimate是什么版本(开机出现win7ultimate)

    win7ultimate是什么版本(开机出现win7ultimate)

  • ipad录屏可以录多久(ipad录屏可以录腾讯会议的声音吗)

    ipad录屏可以录多久(ipad录屏可以录腾讯会议的声音吗)

  • 小度在家可以刷抖音吗(小度在家刷机固件)

    小度在家可以刷抖音吗(小度在家刷机固件)

  • 苹果11手机竖屏锁定怎么设置(苹果11手机竖屏照片怎么改为横屏)

    苹果11手机竖屏锁定怎么设置(苹果11手机竖屏照片怎么改为横屏)

  • 淘宝多长时间可以退货(淘宝多长时间可以追评)

    淘宝多长时间可以退货(淘宝多长时间可以追评)

  • 钉钉删除好友是双向的吗(钉钉删除好友有提醒吗)

    钉钉删除好友是双向的吗(钉钉删除好友有提醒吗)

  • 苹果手机拨打电话自动闪退(苹果手机拨打电话右上角有个小黄点)

    苹果手机拨打电话自动闪退(苹果手机拨打电话右上角有个小黄点)

  • ipad充电不停的自动重启(ipad充电不停的闪)

    ipad充电不停的自动重启(ipad充电不停的闪)

  • 手机微信语音有回音怎么回事(手机微信语音有声音,打电话没声音怎么回事)

    手机微信语音有回音怎么回事(手机微信语音有声音,打电话没声音怎么回事)

  • 处理器的速度常用什么表述(处理器的运算速度)

    处理器的速度常用什么表述(处理器的运算速度)

  • 高斯投影是等面积投影吗(高斯投影是一种等角投影吗)

    高斯投影是等面积投影吗(高斯投影是一种等角投影吗)

  • 饿了么会员红包没用完的下个月能领取吗(饿了么会员红包在哪里看)

    饿了么会员红包没用完的下个月能领取吗(饿了么会员红包在哪里看)

  • 淘宝发的红包在哪里(淘宝发的红包在哪提现)

    淘宝发的红包在哪里(淘宝发的红包在哪提现)

  • 苹果max有nfc吗(苹果有max手机吗?)

    苹果max有nfc吗(苹果有max手机吗?)

  • 苹果11支持30w快充吗(苹果11支持30w快充伤电池吗为什么)

    苹果11支持30w快充吗(苹果11支持30w快充伤电池吗为什么)

  • 抖音收藏的音乐不小心删除怎么找回(抖音收藏的音乐怎么批量删除)

    抖音收藏的音乐不小心删除怎么找回(抖音收藏的音乐怎么批量删除)

  • 计算机网络通信系统是(计算机网络通信的显著特点)

    计算机网络通信系统是(计算机网络通信的显著特点)

  • 无线供电原理(无线供电原理是什么)

    无线供电原理(无线供电原理是什么)

  • 表格不够用怎么往下拉(表格不够用怎么往下拉的视频)

    表格不够用怎么往下拉(表格不够用怎么往下拉的视频)

  • x27pro什么时候开售(vivox27pro发售时间)

    x27pro什么时候开售(vivox27pro发售时间)

  • wps表格打印预览快捷键是(wps表格打印预览显示不全怎么设置)

    wps表格打印预览快捷键是(wps表格打印预览显示不全怎么设置)

  • 在快手上怎么买东西(在快手上怎么买点赞)

    在快手上怎么买东西(在快手上怎么买点赞)

  • K210学习笔记(一)——什么是K210?(k210中文手册)

    K210学习笔记(一)——什么是K210?(k210中文手册)

  • 小规模纳税人本月应交增值税
  • 综合收入扣税
  • 购买办公用品属于会计对象吗
  • 消费卡预付卡能入账吗
  • 土地租赁增值税发票税是多少
  • 销售费用与管理的关系
  • 分公司非独立核算是什么意思
  • 房地产公司的利润怎么分析
  • 无票收入申报时要填税率吗
  • 单独计价入账的土地是无形资产吗
  • 公司购买汽车抵税规则
  • 加工费月底需要全部结转吗
  • 生产性生物资产计提折旧的方法
  • 上年的一张服务费的发票能否做账到今年?
  • 增值税总分机构可以汇总纳税吗
  • win10windows资源管理器怎么打开
  • 罗马尼亚卫生部长
  • windows11怎么回到桌面
  • 如何使用ChapGPT
  • 在win7中创建快捷方式可以创建什么
  • 税法中的视同行为如何开具发票
  • 合并报表六大抵消分录通俗理解
  • 如何用u盘装系统知乎
  • 以产品对外投资需要进项税额转出吗
  • 360安全路由器怎么重启
  • win11可以触屏吗
  • 铁路货物运输代理
  • 房地产企业前期物业费可否税前扣除
  • 招标单位收取标书费多少钱
  • 工会经费申报表填写说明
  • 冰川湾国家公园的冰川不止有白色一种
  • 基建账如何并入会计科目
  • 模式识别与图像处理能做什么
  • 【机器学习】支持向量回归
  • java web中的转发和重定向
  • 代扣代缴应付职工薪酬账务处理
  • 税控开票清单
  • 新建会计帐套怎么建
  • 进项税转出的金额能加计吗
  • window10解压文件
  • 电子口岸无纸化报关
  • 2020年小规模纳税人增值税政策
  • SQLServer 2008 :error 40出现连接错误的解决方法
  • 个体工商户纳税人类型怎么填
  • 免缴土地使用税是不是不用交税
  • 事业单位未取得相关证书不予受理
  • 转出未交增值税借方余额表示什么
  • 销售货物时发票多开了金额如何处理?
  • 新收入准则按照期间确认收入
  • 如何做好工程后期维保
  • 冲减多计提的工资摘要怎么写
  • 公司帐户转到法人账户
  • 零售行业涉及到什么专业
  • mysql数据库增加列
  • XP系统怎么设置双屏幕
  • mac有线不能上网
  • linux pb
  • xmp文件是干嘛用的
  • linux服务器dns配置
  • ubuntu更换版本
  • win7电脑蓝牙图标怎么弄出来
  • 录制界面
  • 360se是什么文件夹
  • windows7 运行
  • win10开始菜单磁贴颜色
  • windows 10 正式版
  • nodejs读写json文件
  • css的transition和animation
  • 有关于月亮的诗句
  • python中get怎么用
  • 批量dns解析
  • unity3d怎么用
  • node 动态路由
  • 简单又实用的
  • 地税局公务员考试科目
  • 增值税税负偏低的风险点
  • 西安市灵活就业社保缴费截止时间
  • 个人所得税app密码给别人有风险吗
  • 江苏国税发票出库时间
  • 北京税务热线电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设