【发布时间】:2010-07-22 05:57:06
【问题描述】:
我需要获取我机器上所有打开端口的列表以及打开它们的应用程序。 我需要以编程方式获取这些信息。
谢谢。
【问题讨论】:
我需要获取我机器上所有打开端口的列表以及打开它们的应用程序。 我需要以编程方式获取这些信息。
谢谢。
【问题讨论】:
您必须执行以下操作:
socket=ls -l /proc/<pid>/fd | grep socket | sed 's/.*socket:\[//' | sed 's/\]//'
grep $socket /proc/net/tcp
解析上一个命令的输出(第二个条目包含端口信息)
【讨论】:
我希望会出现一个更聪明的答案。我就是这样做的(在 Python 中以编程方式),试图重写一个名为 NetHogs 的程序。我的版本is here,特别是here is the module in Python 用于解析来自/proc 的表格。如果你不是 Python 识字(去学习它),然后看看 original NetHogs,它使用了 C/C++ 的混合(并且读起来有点痛苦,因此重写了)。
值得注意的是,从/proc 解析套接字信息的大量或快速重复尝试非常占用 CPU,因为操作系统必须处理每个系统调用,并动态解析内部结构。因此,您会在我链接到的两个项目的源代码中找到一些缓存和时间假设。
简而言之,您需要将/proc/<pid>/fd 中为每个进程提供的套接字inode 与/proc/net/<proto> 中提供的连接相关联。同样,示例解析以及如何定位所有这些都存在于两个项目中。
【讨论】:
exec('netstat');
【讨论】:
打开文件(包括套接字)的信息可以从/proc目录中挖出来。
This article 提供了很多细节并帮助您入门。
【讨论】:
ss -nltup
netstat -ltupn
lsof -iTCP -sTCP:LISTEN
编辑:抱歉,不是程序化的。但如果您想分叉一个进程,这很有帮助。 每次都重新发明轮子没有意义。
【讨论】: