我有一个开放的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查看我的更详细的答案。