tcp_connect_v4接口的调用栈,是用户态调用connect接口进入该路径。
cpp
#!/usr/bin/env bpftrace
#include <linux/net.h>
#include <linux/skbuff.h>
#include <uapi/linux/in.h>
kprobe:tcp_v4_connect {
printf("sa_family:0x%x\n", ((struct sockaddr_in *)arg1)->sin_family);
printf("sin_port:0x%x\n", ((struct sockaddr_in *)arg1)->sin_port);
printf("saddr:0x%x\n", ((struct sockaddr_in *)arg1)->sin_addr.s_addr);
@[kstack] = count();
}
END {
}
调用栈如下:
cpp
Attaching 2 probes...
sa_family:0x2
sin_port:0x5000
saddr:0x8871b40a
sa_family:0x2
sin_port:0xf0d2
saddr:0x100007f
sa_family:0x2
sin_port:0x1600
saddr:0xe435864
^C
@[
tcp_v4_connect+1
__inet_stream_connect+209
inet_stream_connect+54
__sys_connect+150
__x64_sys_connect+22
do_syscall_64+51
entry_SYSCALL_64_after_hwframe+68
]: 3