如何从task_struct得到netstat(网络连接)的相关信息
netstat得到的信息有:Active Internet connections (w/o servers)Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 2 210.34.6.89:telnet 210.34.6.96:2873 ESTABLISHED
tcp 296 0 210.34.6.89:1165 210.34.6.84:netbios-ssn ESTABLISHED
tcp 0 0 localhost.localdom:9001 localhost.localdom:1162 ESTABLISHED
tcp 0 0 localhost.localdom:1162 localhost.localdom:9001 ESTABLISHED
tcp 0 80 210.34.6.89:1161 210.34.6.10:netbios-ssn CLOSE
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 1 [ ] STREAM CONNECTED 16178 @000000dd
unix 1 [ ] STREAM CONNECTED 16176 @000000dc
unix 9 [ ] DGRAM 5292 /dev/log
unix 1 [ ] STREAM CONNECTED 16182 @000000dfActive Internet connections 和 Active UNIX domain sockets 两部分。
通过进程的task_struct结构可也得到第二部分的socket信息。
请问第一部分的信息是如何得到的呢? 或者说
如何从进程的task_struct 结构 得到该进程的网络连接情况,监听哪些端口等等。
如果通过进程的task_struct 结构不能得到网络连接信息,请问通过内核的哪些结构体 可以得到网络连接的信息?
谢谢~ 回复 1# xiongweixie
通过task_struct的fd应该可以获取到socket信息
回复 2# 瀚海书香
恩 是可以的
但是如何得到tcp 连接端口ip地址呢? netstat 是通过读取/proc/net/tcp 和 /proc/net/unix 来获取tcp 连接信息和unixsocket,具体细节可以看内核代码如何实现这两个文件的。通过task_struct来获取socket,这个很复杂吧?task_struct 和socket没有直接关联,而是通过文件系统间接关联。你要得到所有socket,还要遍历所有的task_struct。 回复 4# MoWaters
谢谢你的回复
是的我遍历了 tasks得到的只有socket 的信息 得不到 udp tcp的信息 所以 想想办法找到这些信息呢 找到如何实现了~
感谢各位的回帖~
有兴趣的具体看这个函数~
struct socket *sockfd_lookup(int fd, int *err) 楼主你好,我有一些问题想请教你,能否QQ上聊,我QQ是1163024056,谢谢
页:
[1]