我正在尝试制作一个TCP性能监视器工具,我要提取的主要值是tcpi_rtt
from tcp_info
对于进程内套接字,这可以像python中的getsockopt(socket.SOL_TCP, socket.TCP_INFO)
获得
但是外部过程呢?对于TCP连接,在python的root下,我尝试os.open(/proc/XXXX/fd/4)
套接字inode,但失败了OSError: [Errno 6] No such device or address:
。此方法仅适用于常规fd或stdin/stdout。在
在linux上有没有什么通用的方法可以窥探其他进程的tcp_信息?在
据我所知,没有任何python工具可以满足您的要求,也没有一种简单的方法可以让我自己解析proc目录。因此,您可以自己实现ss command的纯python版本(或者至少了解它如何根据/proc/<;pid>;/net/*中的信息计算RTT),或者解析其输出。我更像是一个bash的人,所以这是我拼凑起来得到的(RTT,PID)对列表:
在ss命令中,-t表示显示TCP连接,-p表示打印进程(PID)信息。使用-e选项,您还可以获得inode编号,您可以使用它来确定/proc/XXXX/fd/中的文件描述符编号。例如,在我的机器上运行进程31117,文件描述符编号为11,对应于索引节点编号为31159的套接字:
^{pr2}$不能“打开”像/proc/pid/fd/4这样的套接字文件的原因是因为这些都是指向不存在的文件的链接。从它们获得的唯一信息是套接字的名称(inode number)。在
相关问题 更多 >
编程相关推荐