这个问题在我做毕设的时候一直没有想到合适的方案,我原来一直觉得操作系统应该是有相关的API的,可是查了很多资料都没有找到。
今天在看一篇别的文章的时候看到了netstat命令,这个命令可以查看端口的占用情况,理论上来说它的实现中应该可以用于参考,我在网上找到了这个http://blog.csdn.net/iiprogram/article/details/1829534,身边现在没有编译环境,无法尝试。
另一个方面,我们其实可以做一些更简单的事情,比如我们自己通过命令行调用Netstat命令,在输出中查找PID为我们想查看的进程PID,其占用的端口就会格式化的列出,我们只需要直接解析一下就好了。有的时候事情本来很简单,但是方向找错了就会很悲剧。。。
这里给出来一个列子,我们可以通过枚举来找到我们关注的进程的PID,比如QQ的,在我的电脑里面是11944,我们通过 netstat -aon|findstr "11944"得到如下的输出:
UDP 0.0.0.0:4002 *:* 11944
UDP 0.0.0.0:4003 *:* 11944
UDP 0.0.0.0:50010 *:* 11944
UDP 0.0.0.0:50648 *:* 11944
UDP 0.0.0.0:51062 *:* 11944
UDP 0.0.0.0:51319 *:* 11944
UDP 0.0.0.0:51690 *:* 11944
UDP 0.0.0.0:54067 *:* 11944
UDP 0.0.0.0:54389 *:* 11944
UDP 0.0.0.0:54939 *:* 11944
UDP 0.0.0.0:55133 *:* 11944
UDP 0.0.0.0:55139 *:* 11944
UDP 0.0.0.0:55141 *:* 11944
UDP 0.0.0.0:55142 *:* 11944
UDP 0.0.0.0:55143 *:* 11944
UDP 0.0.0.0:55146 *:* 11944
UDP 0.0.0.0:55171 *:* 11944
UDP 0.0.0.0:55581 *:* 11944
UDP 0.0.0.0:55602 *:* 11944
UDP 0.0.0.0:55848 *:* 11944
UDP 0.0.0.0:56204 *:* 11944
UDP 0.0.0.0:56686 *:* 11944
UDP 0.0.0.0:56688 *:* 11944
UDP 0.0.0.0:56952 *:* 11944
UDP 0.0.0.0:57683 *:* 11944
UDP 0.0.0.0:58074 *:* 11944
UDP 0.0.0.0:58084 *:* 11944
UDP 0.0.0.0:58489 *:* 11944
UDP 0.0.0.0:58597 *:* 11944
UDP 0.0.0.0:60143 *:* 11944
UDP 0.0.0.0:61170 *:* 11944
UDP 0.0.0.0:61943 *:* 11944
UDP 0.0.0.0:62119 *:* 11944
UDP 0.0.0.0:62861 *:* 11944
UDP 0.0.0.0:63984 *:* 11944
UDP 0.0.0.0:63985 *:* 11944
UDP 0.0.0.0:64622 *:* 11944
UDP 127.0.0.1:56329 *:* 11944
很好,这说明该进程占用了38个端口,只要解析第二列就可以得到进程占用端口的列表!