2010-07-22 24 views

回答

2

我希望有一个更聪明的答案会出现。我做了这个(以Python编程),试图重写一个名为NetHogs的程序。我的版本号为is here,特别是here is the module in Python,用于从/proc解析表格。如果你不是Python literate(去了解它),然后看看original NetHogs,它使用C/C++的混合(并且因此重写有点痛苦)。

值得注意的是,大量或快速反复尝试解析来自/proc的套接字信息非常耗费CPU资源,因为操作系统必须处理所有系统调用,并动态解析内部结构。因此,您会发现一些缓存,以及我已将您链接到的两个项目源中的时间假设。

简而言之,您需要将在/proc/<pid>/fd中给出的每个进程的套接字inode与/proc/net/<proto>中给出的连接关联起来。再次,示例解析以及如何找到所有这些都出现在这两个项目中。

0
exec('netstat'); 
+0

netstat告诉你哪些端口是打开的,但不是哪些应用程序打开它们。 LSF会做到这一点。 – 2010-07-22 06:03:30

+1

'netstat -p'显示PID – n0rd 2010-07-22 06:56:54

+0

@ n0rd:所有这些年,我都不知道!非常感谢那个提示,+1! – 2010-07-22 11:18:18

0

有关打开文件(包括套接字)的信息可以从/proc目录中挖出。

This article给出了很多细节,让你开始。

2

您必须实现以下几点:

  1. 插座= ls -l /proc/<pid>/fd | grep socket | sed 's/.*socket:\[//' | sed 's/\]//'

  2. 的grep $插座的/ proc /净/ TCP

  3. 解析从之前的命令的输出(第二个条目包含端口信息)

+0

+1,因为我的建议的骨头上放了一些肉。如果我正在实施,这可能是足够的信息。 – 2010-07-22 11:17:00

0
ss -nltup 
netstat -ltupn 
lsof -iTCP -sTCP:LISTEN 

编辑:啊对不起,不是程序化的。但如果你想分叉一个进程很有用。 每次重新发明车轮都没有意义。

相关问题