networking端口打开,但没有附加进程?

我有一个开放的networking端口进行奇怪的情况。 我的主要问题是,为什么没有一个程序与一个开放的TCP端口相关联:

netstat -ln --program Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN - 

对于我的具体情况,应该有一个监听端口5666的nrpe守护进程(opsview install),但是没有运行nrpe守护进程。 如果我尝试启动它,它会立即退出。

lsof -i :5666也不显示任何输出。 没有(x)inetd在我的系统上运行。

UPDATE

是的,我以root身份运行这些命令。 Telnet可以,但从来没有任何回应。

经过进一步的调查,我在dmesg发现了一个内核错误:这是一个EC2实例(实际上有几个)运行一个较旧的内核(2.6.16显然是不稳定的)。 停止崩溃的修复是升级内核 。

看起来内核崩溃的方式导致进程消失,并将端口打开。

内核打开的端口不会显示程序名称。 一些NFS和OCFS的东西浮现在脑海。 也许是这样的?

或者它可能是一个内核错误。 检查内核日志中的OOPS和BUG。

你是否以root或者sudo运行netstat和lsof? 注意最后一列:

 netstat -ln --program tcp 0 0 192.168.21.1:53 0.0.0.0:* LISTEN - tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - sudo netstat -ln --program tcp 0 0 192.168.21.1:53 0.0.0.0:* LISTEN 2566/named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 2566/named tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3125/sshd 

从netstat手册页:

您还需要超级用户权限才能在不属于您的套接字上查看此信息。

你怎么知道没有人在跑? 如果端口正在使用中,则会立即使用“使用中的套接字”错误退出。 当你telnet到端口时会发生什么?

 telnet localhost 5666 

root用户身份执行'netstat –tcp –udp –listening –program'。 其他明智的你不会给PID /程序名称

然后使用kill -9 PID命令

我实际上写了一个小的shell脚本来帮助识别这些偶然的问题:

 #! /bin/bash ([ "$1" = "" ] || [ "$2" = "" ]) && echo "Usage: tracer <space> <port>" && exit 0 for i in `fuser -n $1 $2` do ps aux | grep $i | grep -v 'grep' done 

保存为/ usr / local / bin / tracer; 输出:

 root@mo-log:/usr/flows# tracer tcp 80 80/tcp: root 27904 0.0 0.0 111668 3292 ? Ss Aug04 0:03 /usr/sbin/apache2 -k start www-data 32324 0.0 0.0 335332 3560 ? Sl Aug05 0:00 /usr/sbin/apache2 -k start www-data 32327 0.0 0.0 335324 3560 ? Sl Aug05 0:00 /usr/sbin/apache2 -k start 

您将需要root权限才能使用它

有时,nfs相关的程序不能在程序列表中看到。

此外,LDAP pam模块和libnss_ldap打开到ldap服务器的连接,但是没有一个实际进程保持连接打开,所以netstat -tnp显示一个没有进程的活动连接。

我能够通过netstat获取它的inode,然后用lsof来使用这个inode来追踪这个过程。 在https://serverfault.com/a/847910/94376查看我的更详细的答案&#x3002;