xiongweixie 发表于 2013-05-21 06:20

如何从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 结构不能得到网络连接信息,请问通过内核的哪些结构体 可以得到网络连接的信息?

谢谢~

瀚海书香 发表于 2013-05-22 15:16

回复 1# xiongweixie
通过task_struct的fd应该可以获取到socket信息

   

xiongweixie 发表于 2013-05-22 23:13

回复 2# 瀚海书香


    恩 是可以的
    但是如何得到tcp 连接端口ip地址呢?

MoWaters 发表于 2013-05-23 09:16

netstat 是通过读取/proc/net/tcp 和 /proc/net/unix 来获取tcp 连接信息和unixsocket,具体细节可以看内核代码如何实现这两个文件的。通过task_struct来获取socket,这个很复杂吧?task_struct 和socket没有直接关联,而是通过文件系统间接关联。你要得到所有socket,还要遍历所有的task_struct。

xiongweixie 发表于 2013-05-30 01:37

回复 4# MoWaters


    谢谢你的回复
    是的我遍历了 tasks得到的只有socket 的信息    得不到 udp tcp的信息 所以 想想办法找到这些信息呢

xiongweixie 发表于 2013-05-30 02:26

找到如何实现了~
感谢各位的回帖~

有兴趣的具体看这个函数~
struct socket *sockfd_lookup(int fd, int *err)

nq13141516 发表于 2016-07-27 20:44

楼主你好,我有一些问题想请教你,能否QQ上聊,我QQ是1163024056,谢谢
页: [1]
查看完整版本: 如何从task_struct得到netstat(网络连接)的相关信息