这个问题类似于网络端口打开,但没有附加进程?
我已经尝试了那里的所有方法、查看了日志等等......但是什么也没发现。
我的 netstat 显示一个 TCP 监听端口和一个没有 pid 的 UDP 端口。当我使用 lsof 搜索这些端口时,什么也没有出现。
netstat -lntup
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:44231 0.0.0.0:* LISTEN -
udp 0 0 0.0.0.0:55234 0.0.0.0:* -
以下命令不显示任何内容:
lsof | grep 44231
lsof | greo 55234
fuser -n tcp 44231
fuser -n udp 55234
重新启动后,除了新的端口号外,这两个“相同”的连接仍然存在:
netstat -lntup
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:45082 0.0.0.0:* LISTEN -
udp 0 0 0.0.0.0:37398 0.0.0.0:* -
再次,lsof 和 fuser 命令没有显示任何内容。
你知道它们是什么吗?我应该担心它们吗?
答案1
根据您提供的数据,我认为它与某些 NFS 挂载或使用 RPC 的某些内容有关。
您可以检查rpcinfo -p
某些 RPC 相关服务可能使用的端口。
以下是在我的系统上显示的样子
# netstat -nlp | awk '{if ($NF == "-")print $0}'
tcp 0 0 0.0.0.0:55349 0.0.0.0:* LISTEN -
udp 0 0 0.0.0.0:18049 0.0.0.0:* -
# rpcinfo -p
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 10249 status
100024 1 tcp 10249 status
100021 1 udp 18049 nlockmgr
100021 3 udp 18049 nlockmgr
100021 4 udp 18049 nlockmgr
100021 1 tcp 55349 nlockmgr
100021 3 tcp 55349 nlockmgr
100021 4 tcp 55349 nlockmgr
答案2
有些进程/pid 仅对 root 可用。尝试
sudo netstat -antlp
它应该返回每个不处于 TIME_WAIT 状态的开放端口的 pid
或者,如果你想知道与特定端口相关的进程 ID(例如 8765),请使用代码
netstat -tulpn | grep :8765
答案3
根据@user202173 和其他人的提示,我能够使用以下命令来追踪拥有端口的进程,即使它-
在 netstat 中列出。
这是我的起始情况。sudo netstat
显示带有 PID/程序的端口-
。lsof -i
什么都没有显示。
$ sudo netstat -ltpna | awk 'NR==2 || /:8785/'
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::8785 :::* LISTEN -
tcp6 1 0 ::1:8785 ::1:45518 CLOSE_WAIT -
$ sudo lsof -i :8785
$
-e
现在我们开始钓鱼吧。首先让我们通过添加到我们的调用来获取 inode netstat
。
$ sudo netstat -ltpnae | awk 'NR==2 || /:8785/'
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp6 0 0 :::8785 :::* LISTEN 199179 212698803 -
tcp6 1 0 ::1:8785 ::1:45518 CLOSE_WAIT 0 0 -
接下来使用lsof
获取附加到该 inode 的进程。
$ sudo lsof | awk 'NR==1 || /212698803/'
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
envelope_ 145661 145766 drees 15u IPv6 212698803 0t0 TCP *:8785 (LISTEN)
现在我们知道了进程 ID,所以我们可以查看该进程。不幸的是,这是一个已终止的进程。它的 PPID 为 1,所以我们也无法终止它的父进程(参见我怎样才能终止其父进程为 init 的进程?)理论上 init 最终可能会清理它,但是我厌倦了等待并重新启动了。
$ ps -lf -p 145661
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
0 Z drees 145661 1 2 80 0 - 0 exit May01 ? 00:40:10 [envelope] <defunct>
答案4
我不知道这是否有用。我遇到了同样的问题,我做了以下事情:首先,我使用选项 -a(全部)和 -e(扩展)调用 netstat。使用后一个选项,我可以看到与所用端口关联的 Inode。然后,我使用获得的 inode 编号调用 lsof |grep,并获得了与该 inode 关联的进程的 PID。这在我的情况下有效。