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

mho*_*ost 27 port rpc netstat

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

我已经从那里尝试了一切,查看了日志等......但找不到任何东西。

我的 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:*                           - 
Run Code Online (Sandbox Code Playgroud)

以下命令不显示任何内容:

lsof | grep 44231
lsof | greo 55234
fuser -n tcp 44231
fuser -n udp 55234
Run Code Online (Sandbox Code Playgroud)

重新启动后,除了新的端口号外,那些“相同”的两个连接还在那里:

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:*                           - 
Run Code Online (Sandbox Code Playgroud)

再一次,lsof 和 fuser 命令什么也没显示。

任何想法它们是什么?我应该关心他们吗?

小智 21

某些进程/pid 仅对 root 可用。尝试

sudo netstat -antlp
Run Code Online (Sandbox Code Playgroud)

它应该返回每个未处于 TIME_WAIT 状态的开放端口的 pid

或者,如果您想知道与特定端口相关的进程 ID(例如 8765),请使用代码

netstat -tulpn | grep :8765
Run Code Online (Sandbox Code Playgroud)

  • **每个打开的 TCP 端口** 仅使用此命令。UDP 端口将不会显示。 (3认同)

Hrv*_*jar 15

根据您提供的数据,我会说它与某些 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
Run Code Online (Sandbox Code Playgroud)

  • 如果您遇到此问题并希望强制 nlockmgr 使用特定端口,请尝试以下解决方案:http://www.fclose.com/39625/fixing-ports-used-by-nfs-server。 (2认同)

stu*_*eek 13

根据@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
$
Run Code Online (Sandbox Code Playgroud)

现在我们去钓鱼吧。首先让-e我们通过添加到我们的netstat调用来获取 inode 。

$ 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           -
Run Code Online (Sandbox Code Playgroud)

下一个用于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)
Run Code Online (Sandbox Code Playgroud)

现在我们知道进程 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>
Run Code Online (Sandbox Code Playgroud)


and*_*ieb 5

我不知道这些具体是什么,但是内核模块(例如 NFS)没有与这些套接字关联的 PID。在 lsmod 中寻找可疑的东西。