我有ubuntu / hardy服务器,内核2.6.24-23-server和netstat:
# netstat --version net-tools 1.60 netstat 1.42 (2001-04-15)
问题是我们有很多ESTABLISHED连接,在netstat -ntap输出中不显示PID或程序名。 Netstat从root调用,没有chroots,grsecurity,也没有这样的事情(或者我被告知:)。
任何想法可能是错的?
UPDATE
lsof -n -i工作正常,并显示连接的pid /进程名称。
这将在像NFS这样的内核进程中出现,但偶尔也会在常规应用程序中出现:RHEL 5具有相同的行为。
# netstat -taupen | grep 30715 tcp 0 0 0.0.0.0:30715 0.0.0.0:* LISTEN 66558 81467710 -
注意lsof,另一方面,正确的话:
# lsof -i:30715 AppName 1598 useracct 78u IPv4 81467710 TCP *:30715 (LISTEN)
198_141:~ # netstat -anp|grep 33000 tcp 0 0 0.0.0.0:53000 0.0.0.0:* LISTEN - 198_141:~ # lsof -i:33000 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME vsftpd 28147 root 3u IPv4 4089990174 TCP *:33000 (LISTEN) 198_141:~ # id uid=0(root) gid=100(users) groups=16(dialout),100(users) 198_141:~ #
在我看来,可能有两种情况:
1)正常权限用户执行“netstat”不能看到root启动的进程
2)一些进程在内核中运行
对于已build立的连接,这应该只发生在从内核空间(如NFS或DRBD)启动的连接上。 很显然,等待的连接可能会让这个进程死在他们的下面。 如果你不能确定是什么导致给定的连接,粘贴输出,有人可以告诉你它是什么。
我有相同的行为,我的猜测是,netstat的行为可能已经改变。 例如,我看到“wget”的端口和程序,但不是Apache的PHP进程,这对我来说更重要。
解决方法:我重写了脚本以使用lsof(请参阅上面的提示)