netstat 显示没有 pid 的监听端口,但 lsof 没有

netstat 显示没有 pid 的监听端口,但 lsof 没有

这个问题类似于网络端口打开,但没有附加进程?

我已经尝试了那里的所有方法、查看了日志等等......但是什么也没发现。

我的 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。这在我的情况下有效。

相关内容