这个问题在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
一般情况我们就能判断出是那个程序,即使有的时候有同名的程序,我们也可以通过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
C:\Documents and Settings\xxxxx>tasklist |findstr "[^0-9]920[^0-9]"
xxxxxxxxxx.exe               920 Console                 0      5,692 K
 
当然如果你用aport这类的工具也能做到,但是除非是大规模应用,否则的话不会每台服务器上都可以统一装上这类工具。