我有一个奇怪的情况,一个开放的网络端口。我的主要问题是,为什么没有与开放 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 安装)在端口 5666 上侦听,但没有运行 nrpe 守护程序。如果我尝试启动它,它会立即退出。
lsof -i :5666
也不显示任何输出。我的系统上没有运行 (x)inetd。
更新
是的,我以 root 身份运行这些命令。Telnet 可以,但从来没有任何响应。
经过进一步调查,我发现了一个内核错误dmesg
:这是一个运行旧内核的 EC2 实例(实际上是其中的几个)(2.6.16 显然不稳定)。阻止崩溃的解决方法是升级内核。
看起来内核崩溃的方式导致进程消失并保持端口打开。
您是否以 root 或 sudo 身份运行 netstat 和 lsof?注意最后一列:
从 netstat 联机帮助页:
你怎么知道没有人跑?如果端口正在使用中,它会立即退出并出现“使用中的套接字”错误是有道理的。telnet 到端口时会发生什么?
内核打开的端口不会显示程序名称。我想到了一些 NFS 和 OCFS 的东西。也许是这样的?
或者它可能是一个内核错误。检查内核日志中的 OOPS 和 BUG。
以root 用户身份执行 'netstat --tcp --udp --listening --program' 。否则你不会给出PID/程序名称
然后使用 kill -9 PID 命令
我实际上写了一个小 shell 脚本来帮助解决这些偶尔出现的问题:
另存为/usr/local/bin/tracer;输出:
您将需要 root 权限才能使用它
我能够通过 netstat 获取它的 inode 并使用该 inode 和 lsof 来跟踪该过程。在https://serverfault.com/a/847910/94376中查看我更详细的答案。
有时,在程序列表中看不到 nfs 相关程序。
此外,LDAP pam 模块和 libnss_ldap 打开与 ldap 服务器的连接,但没有实际进程保持连接打开,因此 netstat -tnp 显示没有进程的活动连接。