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

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

我在开放网络端口时遇到了一种奇怪的情况。我的主要问题是,为什么没有与开放 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      -  

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

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

更新

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

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

看起来内核崩溃的方式导致进程消失并且端口保持打开状态。

答案1

内核打开的端口不会与程序名称一起显示。我想到了一些 NFS 和 OCFS 的东西。也许是类似的东西?

或者可能是内核错误。检查内核日志以查找 OOPS 和 BUG。

答案2

您是否以 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

答案3

执行'netstat --tcp --udp --listening --program' 作为root 用户否则你不会得到PID/程序名称

然后使用 kill -9 PID 命令

答案4

我能够通过 netstat 获取进程的 inode,然后使用 lsof 来跟踪该进程。请参阅我在https://serverfault.com/a/847910/94376

相关内容