eBPF bpftrace 实现个UNIX socket抓包试试
https://github.com/Rtoax/test/tree/master/bpf/bpftrace/study
#!/usr/bin/bpftrace// 荣涛
// UNIX socket STREAM 抓包
// 2021年7月8日
// 内核版本: 3.10.0-1062.el7.x86_64#include <linux/aio.h>
#include <linux/socket.h>
#include <linux/net.h>
#include <linux/fs.h>
#include <linux/mount.h>
#include <linux/module.h>
#include <net/sock.h>
#include <net/af_unix.h>//#include "undump/msghdr.h"BEGIN
{if($1 == 0) {printf("USAGE: undump.bt [PID]\n");exit();}printf("Dump UNIX socket of PID %d. Ctrl-C to end\n", $1);printf("%-8s %-20s %-5s %-s\n", "TIME", "PATH", "SIZE", "DATA");
}kprobe:unix_stream_recvmsg,
kprobe:unix_dgram_recvmsg
/pid == $1/
{@[probe, ustack, comm] = count();$iocb = (struct kiocb *)arg0;$sock = (struct socket *)arg1;$msghdr = (struct msghdr *)arg2;$size = arg3;$flags = arg4;$sk = $sock->sk;$unsk = (struct unix_sock *)$sk;$ops = $sock->ops;/* 显示 TCP 还是 UDP 模式if($sock->type == SOCK_DGRAM) {printf("\033[1;31m Recv SOCK_DGRAM UNIX msg, \033[m");} else if ($sock->type == SOCK_STREAM) {printf("\033[1;31m Recv SOCK_STREAM UNIX msg, \033[m");}*///printf("UNIX PATH %s\n", str($unsk->path.dentry->d_parent->d_name.name), str($unsk->path.dentry->d_name.name));time("%H:%M:%S ");printf("%-20s ", str($unsk->path.dentry->d_name.name));}//static int unix_stream_read_actor(struct sk_buff *skb, int skip, int chunk, struct unix_stream_read_state *state)
kprobe:unix_stream_read_actor
/pid == $1/
{$skb = (struct sk_buff *)arg0;$data = $skb->data;$len = $skb->len;//$_msghdr = (struct MsgHdr *)$skb->data;printf("%-5d ", $skb->len);printf("%s\n", str($data));//printf("(%d->%d) id %d\n", $_msghdr->src, $_msghdr->dst, $_msghdr->id);}END
{printf("Goodbye!\n");
}
eBPF bpftrace 实现个UNIX socket抓包试试相关推荐
- eBPF BCC 实现UNIX socket抓包
在之前,我写了一个<eBPF bpftrace 实现个UNIX socket抓包试试>,但是很受限啊,不能完整打印包数据信息,今天又写了一个BCC的,感觉没问题了. 不多说,直接上代码: ...
- socket抓包_64、抓包分析tcp与udp
从前面的两个案例,我们了解到了如何通过原生socket函数分别创建tcp和udp服务,以及通过相应的客户端进行连接测试.在本文中,我们将继续深入地去了解tcp和udp的差别,和思考它们两者如何应该多个 ...
- java socket 抓包_linux下用socket的抓包程序
void die(char *why, int n) { perror(why); exit(n); } int do_promisc(char *nif, int sock ) { struct i ...
- 如何给UNIX域Socket套接字抓包?
目录 源代码 client.c common.c common.h Makefile server.c undump.sh 测试 源代码 https://github.com/Rtoax/test/t ...
- 转载:实用 FRIDA 进阶 --- objection :内存漫游、hook anywhere、抓包
转载:实用FRIDA进阶:内存漫游.hook anywhere.抓包:https://www.anquanke.com/post/id/197657 frida github 地址:https://g ...
- Linux系统无线网络抓包程序(分析手机WIFI MAC地址)
前面讲述了使用tcpdump和wireshark抓WIFI包,但这只是使用工具的层面,再深一层则是自己写代码实现这个功能.本文在前面文章<Linux系统有线网络抓包程序>的基础上添加实现无 ...
- :实用 FRIDA 进阶 --- objection :内存漫游、hook anywhere、抓包
转载:实用FRIDA进阶:内存漫游.hook anywhere.抓包:https://www.anquanke.com/post/id/197657 frida github 地址:https://g ...
- 实用frida进阶:内存漫游、hook anywhere、抓包
目录 1 内存漫游 1.1 获取基本信息 1.2 提取内存信息 1.3 内存堆搜索与执行 1.4 启动activity或service 2 Frida hook anywhere 2.1 object ...
- 安卓抓包 python hook_搞定某APP的TCP抓包,并直接调用so文件进行Hook抓取
APP抓包比较繁琐,尤其是对方优先走socket,发TCP包,而不是走应用层发http/https协议.这种抓包更烦躁,绝大部分利用中间人攻击原理这种代理抓包软件都抓不到tcp请求,代理抓包软件大都只 ...
最新文章
- java实现上传_文件上传(java)
- C#3.0笔记(五)Lambda表达式
- ProtoBuf使用指南(C++)
- Redis实现分布式锁1
- 如何实现windows和linux之间的文件传输
- 《关键对话——注意观察,如何判断对话氛围是否安全》读书笔记(四)
- gcc: internal compiler error: Killed (program cci)错误
- Good Time 冲刺 六
- dubbo服务降级与限流
- 推理集 —— 特殊的工具
- linux 路由表设置 之 route 指令详解【转】
- 基本的 HTML 标签
- android采集声卡,农步祥作品 - Android系统下使用USB声卡音质测评报告 [Soomal]
- python转化excel数字日期为标准日期
- win7系统怎么安装dhcp服务器,笔者研习win7系统安装dhcp服务器的技巧介绍
- 一个简单的爬虫例子-天气
- VScode终端配置bash.git(默认),terminal.integrated.shell:windows路径查找不到前提下
- 安卓内存监控工具,2021年Android面试心得,系列教学
- 麻省理工学院智能探索计划,旨在探索人类智力基础
- 快速记忆电阻器色环值
热门文章
- Java中 volatile 关键字的最全总结,赶快给自己查缺补漏吧!
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换)
- 移除动态view android,请教Android,动态添加到控件能动态删除吗?
- Element - Vue UI Framework
- Java线程通信之等待/通知
- 网络编程基础_5.3聊天室-多人聊天室
- 使用虚拟按钮(Ghost Buttons)的25个网站
- 网上看到的,关于测试用例编写粒度准则
- spinlock导读
- html设置边框dw,Dreamweaver表格边框设置的css语法大全