yihong0618 和朋友们的频道 头像

消息来源频道

yihong0618 和朋友们的频道

@hyi0618

频道8,612 位成员公开可见0 人在线

yihong0618 和朋友们的频道

成员规模8,612 位成员
在线情况0 人在线
消息总数10,129 条消息
浏览量总数3,298,582 次浏览

在这个频道里搜索消息……

t.me/hyi0618

https://github.com/jschwinger233/ktcpdump
非常狗屎,非常难用,我甚至怀疑有多少人能编译成功,但是如果能帮到大家解决内核网络连通性问题那我也不要脸了😀当然文档是不想写的
编译需要静态链接 libpcap,可以参考 https://github.com/mozillazg/ptcpdump 把 the-tcpdump-group/libpcap submodule 进来。如果不想编译也信得过我的话也可以下载附件😀 不搞 github releases,想想都累
运行起来至少需要 /proc/kallsym 和 kprobe,在 x86-64。如果想使用看起来棒棒实际很弱智的逐行追踪功能还需要安装 dbgsym 的 image。我 ubuntu 可以无痛照抄攻略 https://ubuntu.com/server/docs/debug-symbol-packages 羡慕吗😀
基本用法:
1. 观测出网和入流流量: ktcpdump -i __netif_receive_skb_core,dev_hard_start_xmit 'src host 1.1.1.1 and src port 80 and tcp[tcpflags]&tcp-syn!=0' 你可以指定(几乎)(几乎个屁)任意的内核函数,但如果你不知道要观测哪个函数就 很遗憾了 可以先用 cilium/pwru 定个大概位置。
默认就会写 pcap 文件到 /tmp/a.pcap 里,不过由于只能抓 skb 线性区,预期就是没有 payload 只有头😀
2. 当然可以用符号+偏移或者纯地址的方式,比如 ktcpdump -i ffffffffa719d990,ip_rcv+5 ,地址和偏移都可以用 0x 开头的 hex,不带 0x 的 hex,十进制。
以上是编写这一堆 bug 的初衷,直到下面这个功能的出场就开始鬼畜了:
3. 逐行追踪内核函数的运行: ktcpdump -i 'tcp_v4_rcv+' src host 1.1.1.1 其实还是 “符号+偏移” 的容颜,只是把偏移换成 asterisk 代表通配。此时必须 -d 指定 dbgsym linux image 如 -d /usr/lib/debug/boot/vmlinux-6.8.0-50-generic
所以想复现我前两天在 sr1(IP(dst="127.0.0.1")/ICMP()) 的排查,需要先后运行:
sudo ./ktcpdump -i 'ip_route_input_slow+*' -d /usr/lib/debug/boot/vmlinux-6.8.0-50-generic icmp and dst host 127.0.0.1
sudo ./ktcpdump -i '__fib_validate_source+*' -d /usr/lib/debug/boot/vmlinux-6.8.0-50-generic icmp and dst host 127.0.0.1
前摇很长是预期行为,因为 kprobe attach 很慢,可以 -v 看进度。打断退出也很慢。。。
不要让我修 bug,除非能在我的 Linux gray-l-PF4RDLEQ 6.8.0-51-generic #52~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Dec 9 15:00:52 UTC 2 x86_64 x86_64 x86_64 GNU/Linux 复现。