bpf程序】的更多相关文章

bpf都是怎么起作用的? 记得bpf之前是绑定在bpf bpf作用在哪里呀?…
概览 LSF(Linux socket filter)起源于BPF(Berkeley Packet Filter).基础从架构一致.但使用更简单.LSF内部的BPF最早是cBPF(classic).后来x86平台首先切换到eBPF(extended).但因为非常多上层应用程序仍然使用cBPF(tcpdump.iptables),而且eBPF还没有支持非常多平台,所以内核提供了从cBPF向eBPF转换的逻辑,而且eBPF在设计的时候也是沿用了非常多cBPF的指令编码. 可是在指令集合寄存器.还有架…
BPF的可移植性和CO-RE (Compile Once – Run Everywhere) 在上一篇文章中介绍了提高socket性能的几个socket选项,其中给出了几个源于内核源码树中的例子,如果选择使用内核树中的Makefile进行编译的话,可能会出现与本地头文件冲突的情况,如重复定义变量,结构体类型不对等错误.这些问题大大影响了BPF程序的可移植性. 本文将介绍BPF可移植性存在的问题,以及如何使用BPF CO-RE(Compile Once – Run Everywhere)解决这些问…
BPF CO-RE 示例代码解析 在BPF的可移植性和CO-RE一文的末尾提到了一个名为runqslower的工具,该工具用于展示在CPU run队列中停留的时间大于某一值的任务.现在以该工具来展示如何使用BPF CO-RE. 目录 BPF CO-RE 示例代码解析 环境 编译 运行 代码解析 内核空间(BPF)代码 用户空间代码 TIPs 总结 参考 环境 本地测试的话,建议采用Ubuntu,其内核本身已经开启了BTF选项,无需再对内核进行编译.我用的是Ubuntu 20.10,内核版本5.8…
本文地址:https://www.ebpf.top/post/ebpf_struct_ops 1. 前言 eBPF 的飞轮仍然在快速转动,自从 Linux 内核 5.6 版本支持 eBPF 程序修改 TCP 拥塞算法能力,可通过在用户态修改内核中拥塞函数结构指针实现:在 5.13 版本中该功能又被进一步优化,增加了该类程序类型直接调用部分内核代码的能力,这避免了在 eBPF 程序中需要重复实现内核中使用的 TCP 拥塞算法相关的函数. 这两个功能的实现,为 Linux 从宏内核向智能化的微内核提…
本文地址:https://www.ebpf.top/post/ubuntu_2104_bpf_env 1. 系统安装 1.1 Vagrant Vagrant 是一款用于构建及配置虚拟开发环境的软件,基于 Ruby,主要以命令行的方式运行.Vagrant 由 HashiCorp 官方出品,相信提到大名鼎鼎的 HashiCorp 公司,大家还能够联想到著名的安全密码存储 Valut.服务注册发现 Consul.大规模调度系统 Normad 等等. Vagrant 可基于官方提供的各种虚拟机打包文件(…
揭秘 BPF map 前生今世 本文地址:https://www.ebpf.top/post/map_internal 1. 前言 众所周知,map 可用于内核 BPF 程序和用户应用程序之间实现双向的数据交换, 为 BPF 技术中的重要基础数据结构. 在 BPF 程序中可以通过声明 struct bpf_map_def 结构完成创建,这其实带给我们一种错觉,感觉这和普通的 C 语言变量没有区别,然而事实真的是这样的吗? 事情远没有这么简单,读完本文以后相信你会有更大的惊喜. struct bp…
1.简介 所谓“底层数据包”指的是在“运行”于数据链路层的数据包,简单的说就是“以太网帧”,而我们常用的Socket只能发送“运行”在传输层的TCP.UDP等包,这些传输层数据包已经能满足绝大部分需求,但是有些时候还是需要发送底层数据包的(例如SYN扫描),那么如何发送呢? 本文记录了我试图实现的过程中遇到的一些问题以及解决办法,需要注明:①本文只考虑Windows上的实现  ②本文主要目的是实现发送部分  ③本文假定读者理解网络分层结构和一些基本的网络编程方法  ④本文只是在讨论常规技术,切勿…
Linux就这个范儿 第13章 打通任督二脉 0111010110……你有没有想过,数据从看得见或看不见的线缆上飞来飞去,是怎么实现的呢?数据传输业务的未来又在哪里?在前面两章中我们学习了Linux网络方面的各种工具,打造了形形色色的网络服务.然而我们并不满足于仅仅知道这些表面的知识,还希望深入了解它们的底层实现.那就来吧,打通任督二脉,探究不同类型的网络以及隐藏在网络后面的世界. 13.1 了解网络驱动工欲善其事,必先利其器.二十年前我们还走在狭窄的乡间小道开着信息牛车.时至今日,信息高速公路…
Ubuntu本地提权(CVE-2017-16995)漏洞复现 在 ichunqiu 看到的环境(https://www.ichunqiu.com/course/61487),觉得有意思就记录一下. 实验环境 操作机:Kali Linux IP:172.16.11.2 目标IP:172.16.12.2 目标账号密码:ichunqiu 工具下载地址:http://file.ichunqiu.com/r36f8pnp/ 实验目的 了解Ubuntu本地提权漏洞的危害 验证本地提权漏洞 知晓Ubuntu本…
一.Ubuntu16.04 (CVE-2017-16995) 1.漏洞概述 Ubuntu最新版本16.04存在本地提权漏洞,该漏洞存在于Linux内核带有的eBPF bpf(2)系统调用中,当用户提供恶意BPF程序使eBPF验证器模块产生计算错误,导致任意内存读写问题. 攻击者(普通用户)可以利用该漏洞进行提权攻击,获取root权限,危害极大.该漏洞编号是CVE-2017-16995,在之前的一些老版本已经修复了,但是在最新的Ubuntu版本中,又出现了这个漏洞,并且Twitter爆出了漏洞利用…
1.ktap是否有过滤的功能,之前bpf程序可以阻止某些trace的log的输出,ktap是否有这样的功能呢? 2.ftrace 和 perf 的ring buffer好像不是一个,有什么区别? 需求:想在f2fs_rename处打点,想看下各个入口参数 static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,                          struct inode *new_dir, s…
Linux未来监控tracing框架--eBPF eBPF源于早年间的成型于 BSD 之上的传统技术 BPF(Berkeley Packet Filter).BPF 的全称是 Berkeley Packet Filter,顾名思义,这是一个用于过滤(filter)网络报文(packet)的架构. BPF 是在 1997 年首次被引入 Linux 的,Linux 内核中的报文过滤机制其实是有自己的名字的:Linux Socket Filter,简称 LSF. 从 3.15 开始,一个套源于 BPF…
eBPF监控工具bcc系列一启航 在eBPF篇中,我们知道虽然可用 C 来实现 BPF,但编译出来的却仍然是 ELF 文件,开发者需要手动析出真正可以注入内核的代码.工作有些麻烦,于是就有人设计了 BPF Compiler Collection(BCC),BCC 是一个(基于 C 和 C++) python 库,实现了对 BCC 应用层接口的封装. 使用 BCC 进行 BPF 的开发仍然需要开发者自行利用 C 来设计 BPF 程序,其他的工作,包括编译.解析 ELF.加载 BPF 代码块以及创建…
Cilium架构 译自:http://docs.cilium.io/en/stable/architecture/ 本文档描述了Cilium的架构.它通过记录BPF数据路径(datapath)的钩子来实现Cilium数据路径,那么Cilium数据路径是如何与容器编排层继承,以及如何在各层(如BPF数据路径和Cilium代理)之间更新对象的? 数据路径 Linux内核在网络栈中支持一个BPF钩子集,使用这些勾子可以允许BPF程序(即使用回调函数运行).Cilium数据路径使用这些钩子加载BPF程序…
使用k3s测试Cilium,安装步骤可以参见官方文档 Cilium安装使用 docker安装 使用如下命令安装最新版本的docker yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce docker-…
全面介绍eBPF-概念 前面介绍了BCC可观测性和BCC网络,但对底层使用的eBPF的介绍相对较少,且官方欠缺对网络方面的介绍.下面对eBPF进行全面介绍. 目录 全面介绍eBPF-概念 BPF概述 eBPF的演进 使用eBPF可以做什么? 内核的eBPF校验器 bpf()系统调用 eBPF 程序类型 eBPF 数据结构 eBPF辅助函数 如何编写eBPF程序 seccomp 概述 历史 BPF 编写过滤器 XDP XDP模式 模式介绍 模式校验 XDP Action AF_XDP 术语 UME…
BCC(可观测性) 目录 BCC(可观测性) 简介 动机 版本要求 安装 安装依赖 安装和编译LLVM 安装和编译BCC windows源码查看 BCC的基本使用 工具讲解 execsnoop opensnoop ext4slower (or btrfs, xfs, zfs*) biolatency biosnoop cachestat tcpconnect+tcpaccept+tcpretrans runqlat profile BCC的开发 可观测性 Lesson 1. Hello Worl…
提高服务端性能的几个socket选项 在之前的一篇文章中,作者在配置了SO_REUSEPORT选项之后,使得应用的性能提高了数十倍.现在介绍socket选项中如下几个可以提升服务端性能的选项: SO_REUSEADDR SO_REUSEPORT SO_ATTACH_REUSEPORT_CBPF/EBPF 验证环境:OS:centos 7.8:内核:5.9.0-1.el7.elrepo.x86_64 默认行为 TCP/UDP连接主要靠五元组来区分一条链接.只要五元组不同,则视为不同的连接. {pr…
eBPF 是一个用于访问 Linux 内核服务和硬件的新技术,由于其灵活性和高性能等特点,被迅速用于网络.出错.跟踪以及防火墙等多场景.目前国内已有少数企业开始尝试将 eBPF 引入生产实践,又拍云也是其中一个.专为技术开发者提供知识分享的 Open Talk 公开课邀请了又拍云开发工程师周晨约直播分享 eBPF 的学习经验与开发心得,并对其分享内容进行整理,下拉至文末点击阅读原文可回看原视频. 大家好,今天分享的主题是<eBPF 探索之旅>,围绕三部分展开: eBPF 是什么 eBPF 能做…
BCC和libbpf的转换 本文讲述如何将基于BCC的BPF应用转换为libbpf + BPF CO-RE.BPF CO-RE可以参见上一篇博文. 为什么是libbpf和BPF CO-RE? 历史上,当需要开发一个BPF应用时可以选择BCC 框架,在实现各种用于Tracepoints的BPF程序时需要将BPF程序加载到内核中.BCC提供了内置的Clang编译器,可以在运行时编译BPF代码,并将其定制为符合特定主机内核的程序.这是在不断变化的内核内部下开发可维护的BPF应用程序的唯一方法.在BPF…
XDP概述 XDP是Linux网络路径上内核集成的数据包处理器,具有安全.可编程.高性能的特点.当网卡驱动程序收到数据包时,该处理器执行BPF程序.XDP可以在数据包进入协议栈之前就进行处理,因此具有很高的性能,可用于DDoS防御.防火墙.负载均衡等领域. XDP数据结构 XDP程序使用的数据结构是xdp_buff,而不是sk_buff,xdp_buff可以视为sk_buff的轻量级版本. 两者的区别在于:sk_buff包含数据包的元数据,xdp_buff创建更早,不依赖与其他内核层,因此XDP…
通过Mellanox ConnectX NIC使用XDP加速 Accelerating with XDP over Mellanox ConnectX NICs XDP(eXpress Data Path)是Linux内核网络堆栈中的可编程数据路径.为BPF提供了一个框架,可以在运行时实现高性能的包处理.XDP与Linux网络堆栈协同工作,不是内核旁路. 由于XDP运行在内核网络驱动程序中,可以从网卡的RX环读取以太网帧并立即采取运行.XDP通过在驱动程序中实现的RX钩子插入eBPF基础架构.X…
目录 可编程网络DataPath XDP 的基本架构 XDP 的软件要求 XDP 的硬件要求 XDP 的工作流程及使用 XDP 的工作模式 XDP 的工作流程 Hello World XDP 的应用 参考 进阶参考 可编程网络DataPath 大部分网络数据的最终生产者和消费者都是应用程序,在一个计算机中,网络数据包需要经过网卡 <=> 系统内核 <=> 应用程序,才能完成传输. Linux 有严格的内核和用户空间隔离,网络数据在内核和应用程序之间的传输需要频繁的进行上下文切换,随…
*本文首发阿里云先知安全技术社区,原文链接https://xz.aliyun.com/t/2212 前言: 2018年3月中旬,Twitter 用户 @Vitaly Nikolenko 发布消息,称 ubuntu 最新版本(Ubuntu 16.04)存在高危的本地提权漏洞,而且推文中还附上了 EXP 下载地址. 由于该漏洞成功在aws Ubuntu镜像上复现,被认为是0DAY,引起了安全圈同学们的广泛关注.大体浏览了 一下exp代码,发现利用姿势很优雅,没有ROP,没有堆,没有栈,比较感兴趣,不…
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上. 这个版本,我们正式将默认的 Luajit 运行时切换到 Lua5.4 运行时,并且新增了 Rust 和 C++ 的混合编译支持,我们也集成了 Cargo 的包管理支持. 另外,我们新增了一个实用的 utils.glsl2spv 规则,用于实现…
前言 eBPF是一项革命性的技术,可以在Linux内核中运行沙盒程序,而无需重新编译内核或加载内核模块.它能够在许多内核 hook 点安全地执行字节码,主要应用在云原生网络.安全.跟踪监控等方面. eBPF 基金会 (https://ebpf.io) 是一个为 eBPF 技术而创建的非盈利性组织,隶属于 Linux 基金会,其意在推动 eBPF 更好地发展,使其得到更加广泛的运用. 下面我将介绍如何在Rust中开发基于eBPF技术的应用示例.(该示例教程主要面向具备Rust开发基础的同学) (一…
winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统.开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力.它提供了以下的各项功能:1. 捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据包:2.在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉:3.在网络上发送原始的数据包:4.收集网络通信过程中的统计信息 软件简介 Winpcap WinPcap是用于网络封包抓取的一套…
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 一. XDP Socket示例解析 源码参见:https://github.com/xdp-project/xdp-tutorial/tree/master/advanced03-AF_XDP 该示例演示了如何通过BPF将网络数据包从XDP Hook点旁路到用户态的XDP Socket,解析过程中为突出重点,将只关注重点代码段,一些函数会被精简,比如…
原文:MVC Application Lifecycle 来一探究竟在MVC应用程序中参与请求处理的各个不同组件. 目录: 序言 背景 UrlRoutingModule RouteHandler MvcHandler ControllerFactory Controller ActionInvoker ActionResult ViewEngine 总结 关注点 序言 在这篇文章中我们将讨论MVC应用程序生成周期以及当请求从一个组件传到另一个组件时是如何被处理的.我们将说说这些在应用程序生命周期…