能否从 Linux 内核数据类型“struct sock”中检索套接字端口?
Can one retrieve a socket's port from the Linux Kernel data type `struct sock`?
动机
我正在尝试编写一个 bpftrace 程序来跟踪套接字何时准备好通过连接到 kprobe sock_def_readable
进行读取。我会得到一个 struct sock
来检查。我想将它映射回我在用户区创建的套接字。
问题
如何从 struct sock
恢复端口号?
我只是扩展了 inet_sk
的定义...这只是一个转换。
#!/usr/bin/env bpftrace
#include <linux/net/inet_sock.h>
BEGIN
{
printf("network tracing");
}
kprobe:sock_def_readable
{
$inet_sock = (struct inet_sock *)arg0;
printf("sock_def_readable destination port %d, source port %d \n", $inet_sock->inet_sport, $inet_sock->inet_dport);
}
动机
我正在尝试编写一个 bpftrace 程序来跟踪套接字何时准备好通过连接到 kprobe sock_def_readable
进行读取。我会得到一个 struct sock
来检查。我想将它映射回我在用户区创建的套接字。
问题
如何从 struct sock
恢复端口号?
我只是扩展了 inet_sk
的定义...这只是一个转换。
#!/usr/bin/env bpftrace
#include <linux/net/inet_sock.h>
BEGIN
{
printf("network tracing");
}
kprobe:sock_def_readable
{
$inet_sock = (struct inet_sock *)arg0;
printf("sock_def_readable destination port %d, source port %d \n", $inet_sock->inet_sport, $inet_sock->inet_dport);
}