问题描述
我正在开发一个基于 ebpf 的监控项目,用于监控 Linux 上外部进程的套接字。在监视服务器(侦听器)进程的情况下,使用 ebpf 挂钩来接受()系统调用,我可以获得为远程对等方创建的新套接字 ID。 我需要获取新创建的套接字的远程对等地址。
我知道 lsof
处理 /proc/<pid>/fd
和 /proc/net/tcp
以根据进程 ID 过滤查询的项目。
但到目前为止,我没有看到它在 Ubuntu-20 上是如何工作的,因为我没有看到 /proc/<pid>/fd
中的套接字 ID 和 /proc/net/tcp
中的列表匹配。
示例:
# ls -al /proc/531903/fd
total 0
dr-x------ 2 dima dima 0 Jul 23 20:57 .
dr-xr-xr-x 9 dima dima 0 Jul 23 20:05 ..
lrwx------ 1 dima dima 64 Jul 23 20:57 0 -> /dev/pts/4
lrwx------ 1 dima dima 64 Jul 23 20:57 1 -> /dev/pts/4
l-wx------ 1 dima dima 64 Jul 23 20:57 10 -> 'pipe:[270323787]'
lrwx------ 1 dima dima 64 Jul 23 20:57 2 -> /dev/pts/4
lrwx------ 1 dima dima 64 Jul 23 20:57 3 -> 'socket:[2947859549]'
lrwx------ 1 dima dima 64 Jul 23 20:57 4 -> 'socket:[2952899042]'
lr-x------ 1 dima dima 64 Jul 23 20:57 5 -> 'pipe:[270323784]'
l-wx------ 1 dima dima 64 Jul 23 20:57 6 -> 'pipe:[270323784]'
# netstat -ano | grep 44000
tcp 0 0 127.0.0.1:45350 127.0.0.1:44000 ESTABLISHED off (0.00/0/0)
tcp6 0 0 :::44000 :::* LISTEN off (0.00/0/0)
tcp6 0 0 127.0.0.1:44000 127.0.0.1:45350 ESTABLISHED off (0.00/0/0)
# cat /proc/net/tcp | grep ABE
19: 0100007F:B126 0100007F:ABE0 01 00000000:00000000 00:00000000 00000000 1000 0 3167851807 1 0000000000000000 20 4 24 10 -1
因此,3167851807
是 /proc/net/tcp
输出中的 inode,但它与 'socket:[2952899042]'
输出中的 ls -al /proc/531903/fd
不匹配。
我缺少什么?
其次,可以使用netlink
API 来查询sockets,避免解析/proc/net/tcp
目录吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)