这个问题在Linux下很好解决:
Linux版本的netstat 本身就支持直接查看程序名称
例如我们查看一下23端口被是被哪个程序占用了,
# netstat -anp
然后我们会看到如下的一堆双方通信的IP和端口,以及处理它们的程序名及程序PID
如:
# netstat -anp |egrep ":22[\t ]"
tcp 0 0 :::22 :::* LISTEN 3550/sshd
tcp 0 0 ::ffff:192.168.0.250:22 ::ffff:192.168.0.1:4812 ESTABLISHED 20010/0
tcp 0 52 ::ffff:192.168.0.250:22 ::ffff:192.168.0.1:7336 ESTABLISHED 22241/2
tcp 0 0 ::ffff:192.168.0.250:22 ::ffff:192.168.0.1:6249 ESTABLISHED 19548/1
tcp 0 0 :::22 :::* LISTEN 3550/sshd
tcp 0 0 ::ffff:192.168.0.250:22 ::ffff:192.168.0.1:4812 ESTABLISHED 20010/0
tcp 0 52 ::ffff:192.168.0.250:22 ::ffff:192.168.0.1:7336 ESTABLISHED 22241/2
tcp 0 0 ::ffff:192.168.0.250:22 ::ffff:192.168.0.1:6249 ESTABLISHED 19548/1
一般情况我们就能判断出是那个程序,即使有的时候有同名的程序,我们也可以通过PID结合ps -ax给挖出来。当然实际上我们得到了PID,就已经可以对它进行操作了。
那么在Windows下呢?
其实也也不难,仔细看了看Window下的netstat程序,不难发现它也有一个类似显示进程ID的参数。
我们简单地通过80端口被占用的情况来说明下,不做详解。
C:\Documents and Settings\xxxxx>netstat -ano |findstr "0.0.0.0:80[^0-9]"
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 920
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 920
C:\Documents and Settings\xxxxx>tasklist |findstr "[^0-9]920[^0-9]"
xxxxxxxxxx.exe 920 Console 0 5,692 K
xxxxxxxxxx.exe 920 Console 0 5,692 K
当然如果你用aport这类的工具也能做到,但是除非是大规模应用,否则的话不会每台服务器上都可以统一装上这类工具。
本文转自xiaoyuwang 51CTO博客,原文链接:http://blog.51cto.com/wangxiaoyu/223551,如需转载请自行联系原作者