原始套接字--包过滤器BPF学习记录

news/2024/5/17 22:29:16

参考文章:https://blog.csdn.net/jin787730090/article/details/117993915
可以使用以下命令生成bpf code

tcpdump -dd -i lo port 6172

输出如下结果

{ 0x28, 0, 0, 0x0000000c },
{ 0x15, 0, 8, 0x000086dd },
{ 0x30, 0, 0, 0x00000014 },
{ 0x15, 2, 0, 0x00000084 },
{ 0x15, 1, 0, 0x00000006 },
{ 0x15, 0, 17, 0x00000011 },
{ 0x28, 0, 0, 0x00000036 },
{ 0x15, 14, 0, 0x0000181c },
{ 0x28, 0, 0, 0x00000038 },
{ 0x15, 12, 13, 0x0000181c },
{ 0x15, 0, 12, 0x00000800 },
{ 0x30, 0, 0, 0x00000017 },
{ 0x15, 2, 0, 0x00000084 },
{ 0x15, 1, 0, 0x00000006 },
{ 0x15, 0, 8, 0x00000011 },
{ 0x28, 0, 0, 0x00000014 },
{ 0x45, 6, 0, 0x00001fff },
{ 0xb1, 0, 0, 0x0000000e },
{ 0x48, 0, 0, 0x0000000e },
{ 0x15, 2, 0, 0x0000181c },
{ 0x48, 0, 0, 0x00000010 },
{ 0x15, 0, 1, 0x0000181c },
{ 0x6, 0, 0, 0x00040000 },
{ 0x6, 0, 0, 0x00000000 },

tcpdump 提供了 -d 选项来阐述这段数字的意义

tcpdump -d -i lo port 6172
(000) ldh      [12]
(001) jeq      #0x86dd          jt 2    jf 10
(002) ldb      [20]
(003) jeq      #0x84            jt 6    jf 4
(004) jeq      #0x6             jt 6    jf 5
(005) jeq      #0x11            jt 6    jf 23
(006) ldh      [54]
(007) jeq      #0x181c          jt 22   jf 8
(008) ldh      [56]
(009) jeq      #0x181c          jt 22   jf 23
(010) jeq      #0x800           jt 11   jf 23
(011) ldb      [23]
(012) jeq      #0x84            jt 15   jf 13
(013) jeq      #0x6             jt 15   jf 14
(014) jeq      #0x11            jt 15   jf 23
(015) ldh      [20]
(016) jset     #0x1fff          jt 23   jf 17
(017) ldxb     4*([14]&0xf)
(018) ldh      [x + 14]
(019) jeq      #0x181c          jt 22   jf 20
(020) ldh      [x + 16]
(021) jeq      #0x181c          jt 22   jf 23
(022) ret      #262144
(023) ret      #0

其中 ld是加载某位的数据,jeq是做相等比较

(000) ldh      [12]      // 加载数据包的第12个字节
(001) jeq      #0x86dd   jt 2    jf 10    // 判断是否为IPv6数据包,如果是,跳转到第2行,否则跳转到第10行
(002) ldb      [20]      // 加载数据包的第20个字节
(003) jeq      #0x84     jt 6    jf 4     // 判断是否为ICMPv6数据包,如果是,跳转到第6行,否则跳转到第4行
(004) jeq      #0x6      jt 6    jf 5     // 判断是否为TCP数据包,如果是,跳转到第6行,否则跳转到第5行
(005) jeq      #0x11     jt 6    jf 23    // 判断是否为UDP数据包,如果是,跳转到第6行,否则跳转到第23行
(006) ldh      [54]      // 加载数据包的第54个字节,即TCP或UDP源端口
(007) jeq      #0x181c   jt 22   jf 8     // 判断源端口是否为6172,如果是,跳转到第22行,否则跳转到第8行
(008) ldh      [56]      // 加载数据包的第56个字节,即TCP或UDP目标端口
(009) jeq      #0x181c   jt 22   jf 23    // 判断目标端口是否为6172,如果是,跳转到第22行,否则跳转到第23行
(010) jeq      #0x800    jt 11   jf 23    // 判断是否为IPv4数据包,如果是,跳转到第11行,否则跳转到第23行
(011) ldb      [23]      // 加载数据包的第23个字节,即IPv4或IPv6协议版本号
(012) jeq      #0x84     jt 15   jf 13    // 判断是否为ICMPv6数据包,如果是,跳转到第15行,否则跳转到第13行
(013) jeq      #0x6      jt 15   jf 14    // 判断是否为TCP数据包,如果是,跳转到第15行,否则跳转到第14行
(014) jeq      #0x11     jt 15   jf 23    // 判断是否为UDP数据包,如果是,跳转到第15行,否则跳转到第23行
(015) ldh      [20]      // 加载数据包的第20个字节,即IP协议字段
(016) jset     #0x1fff   jt 23   jf 17    // 判断IP协议字段的值是否满足条件,如果满足,跳转到第23行,否则跳转到第17行
(017) ldxb     4*([14]&0xf)  // 根据数据包的第14个字节计算偏移量
(018) ldh      [x + 14]  // 加载偏移量位置的字节
(019) jeq      #0x181c   jt 22   jf 20    // 判断该字节是否为6172,如果是,跳转到第22行,否则跳转到第20行
(020) ldh      [x + 16]  // 加载偏移量+16位置的字节
(021) jeq      #0x181c   jt 22   jf 23    // 判断该字节是否为6172,如果是,跳转到第22行,否则跳转到第23行
(022) ret      #262144   // 匹配成功,返回262144
(023) ret      #0        // 匹配失败,返回0

http://www.mrgr.cn/p/80722226

相关文章

spring-websocket在SpringBoot(包含SpringSecurity)项目中的导入

✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。 🍎个人主页:Meteors.的博客 🥭本文内容:spring-websocket在SpringBoot(包含SpringSecurity…

途乐证券:沪指强势拉升涨0.63%,券商等板块走强,传媒板块活跃

31日早盘,两市股指全线走高,沪指一度涨超1%收复3300点,上证50指数盘中涨逾2%;随后涨幅有所收窄;两市成交额显着放大,北向资金净买入超90亿元。 到午间收盘,沪指涨0.63%报3296.58点,深…

ERROR in unable to locate ‘***/public/**/*‘ glob

前提 自己搭了一个react项目的脚手架,npm包下载一切都很正常,启动的时候突然就报ERROR in unable to locate ***/public/**/* glob这个错误,根据百度分析了一下产生的原因:webpack配置文件中的CopyWebpackPlugin导致的 网上给出的…

SpringBoot中间件—ORM(Mybatis)框架实现

目录 定义 需求背景 方案设计 代码展示 UML图 实现细节 测试验证 总结 源码地址(已开源):https://gitee.com/sizhaohe/mini-mybatis.git 跟着源码及下述UML图来理解上手会更快,拒绝浮躁,沉下心来搞 定义&#x…

Mycat-Balance使用指南

MyCAT Balance是一个Java NIO的高性能负载均衡器,可以替代普通的硬件的交换机或其LVS类似的复杂机制,实现MyCAT集群的负载均衡。 MyCAT Balance的配置文件在conf目录下,frontend-conf.为前端配置,包括绑定的端口等,js…

政策加持智能家居市场,涂鸦赋能客户打造“以人为本”智能生活新方式

7月18日,商务部等13部门联合发布了《关于促进家居消费若干措施的通知》(以下简称《通知》),《通知》指出,创新培育智能消费,支持企业运用物联网、云计算、人工智能等技术,着重加快智能家电、智能…

HDFS中namenode安全模式

HDFS中namenode安全模式 安全模式的现象探究step1step2step3step4 安全模式的概述控制进入时间和离开条件安全模式自动进入离开安全模式手动进入离开 安全模式的现象探究 step1 HDFS集群在停机状态下,使用hdfs -daemon命令逐个进程启动集群,观察现象首…

会议OA系统会议管理模块开发思路(layui搭建)

目录 一.为什么要进行开发 1.开发目的 2.项目流程 A.发起会议请求过程 1.首先实现我们的多选下拉框功能! 2.时间组件功能,并且提交我们新增加的会议内容 3.在进行发起会议编码时遇到的问题,BUG 3.1.有点时候js访问不到路径 3.2在增加…

linux下docker安装、镜像下载、镜像基础操作、容器基础操作

目录 一、环境准备 1、开启虚拟化 2、关闭防火墙 3、yum仓库获取阿里源(清华、京东都可以) 4、确保能ping到外网 二、安装docker 1、yum安装docker 2、启动docker并设置开机自启 3、安装docker-ce阿里镜像加速器 三、docker基本操作 1、查看版…

FileHub使用教程:Github Token获取步骤,使用快人一步

FileHub介绍 filehub是我开发的一个免费文件存储软件,可存万物。软件仓库:GitHub - Sjj1024/s-hub: 一个使用github作为资源存储的软件 软件下载地址:。有问题可以留言或者提Issue, 使用第一步:获取Github Token 使…

【字节跳动青训营】后端笔记整理-3 | Go语言工程实践之测试

**本文由博主本人整理自第六届字节跳动青训营(后端组),首发于稀土掘金:🔗Go语言工程实践之测试 | 青训营 目录 一、概述 1、回归测试 2、集成测试 3、单元测试 二、单元测试 1、流程 2、规则 3、单元测试的例…

卷积神经网络识别人脸项目—使用百度飞桨ai计算

卷积神经网络识别人脸项目的详细过程 整个项目需要的准备文件: 下载链接: 链接:https://pan.baidu.com/s/1WEndfi14EhVh-8Vvt62I_w 提取码:7777 链接:https://pan.baidu.com/s/10weqx3r_zbS5gNEq-xGrzg 提取码&#x…

Transformer 论文学习笔记

重新学习了一下,整理了一下笔记 论文:《Attention Is All You Need》 代码:http://nlp.seas.harvard.edu/annotated-transformer/ 地址:https://arxiv.org/abs/1706.03762v5 翻译:Transformer论文翻译 特点&#xff1…

网络面试合集

传输层的数据结构是什么? 就是在问他的协议格式:UDP&TCP 2.1.1三次握手 通信前,要先建立连接,确保双方都是在线,具有数据收发的能力。 2.1.2四次挥手 通信结束后,会有一个断开连接的过程&#xff0…

二十、像素流送,软件即游戏,SaaG时代到来

有了像素流送插件,就可以在远程计算机上运行虚幻引擎应用,并将其渲染效果和音频流送到任意平台的现代网页浏览器上。此外,还可以在浏览器上与流互动,遥控虚幻引擎应用。 1、启用像素流插件 虚幻编辑器的主菜单中选择 编辑(Edit) > 插件(Plugins),在图像(Graph…

selenium-web自动化测试

一、selenium环境部署 1.准备chrome浏览器(其他浏览器也行) 2.准备chrome驱动包 步骤一:查看自己的谷歌浏览器版本(浏览器版本和驱动版本一定要对应) 步骤二:下载对应的驱动包, 下载路径 : ChromeDriver - WebDriver for Chrom…

DragGAN:用崭新的方式进行图像处理

该项目的论文被SIGGRAPH 2023 收录,论文以 StyleGAN2 架构为基础,实现了 “Drag” 关键点就能轻松 P 图的效果。 https://github.com/XingangPan/DragGAN https://vcai.mpi-inf.mpg.de/projects/DragGAN/ 目录 原图1测试一测试二测试三 原图2测试一测试…

【数据结构与算法】基数排序

基数排序 基数排序(Radix Sort)属于“分配式排序”,又称“桶子法”或 bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用。基数排序法是属于稳定性…

【文献分享】比目前最先进的模型轻30%!高效多机器人SLAM蒸馏描述符!

论文题目:Descriptor Distillation for Efficient Multi-Robot SLAM 中文题目:高效多机器人SLAM蒸馏描述符 作者:Xiyue Guo, Junjie Hu, Hujun Bao and Guofeng Zhang 作者机构:浙江大学CAD&CG国家重点实验室 香港中文大学…

51单片机——串行口通信

目录 1、51单片机串口通信介绍 2、串行口相关寄存器 2.1 、串行口控制寄存器SCON和PCON 2.1.1 SCON:串行控制寄存器 (可位寻址) 2.1.2 PCON:电源控制寄存器(不可位寻址) 2.2、串行口数据缓冲寄存器SBUF 2.3、从机地址控制…