查找正在监听特定端口的进程

查找正在监听特定端口的进程

我想找到一些在指定端口上运行的进程80

我跑了

fuser 80/tcp

却一无所获

进而

netstat -tulpn|grep "80\|PID"

并得到

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 :::80                       :::*                        LISTEN      -  

PID 是-

那么这是什么-意思呢?谢谢!

答案1

简短的回答是:您需要 才能root查看所有绑定。

再长一点:

netstat 的手册页给出了一个并非在所有情况下都需要的提示:

PID/程序名称 斜杠分隔的拥有套接字的进程 ID (PID) 和进程名称对。 --program导致包含此列。您还需要超级用户权限才能查看不属于您的套接字的此信息。

因此,作为普通用户,您只能看到哪个进程监听该端口(如果您拥有该端口):

$ netcat -l -p 1234 &
$ netstat -tulpn
[...]
tcp        0      0 0.0.0.0:1234            0.0.0.0:*               LISTEN      8044/netcat     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -    
[...]

您可以看到“您的” netcat 进程,但看不到谁在监听端口 22。

我有一种感觉,原因在于您无法访问/proc/[PID]/fd非所有者进程。在那里,您可以找到进程[PID]当前已打开的文件描述符,而在 Un*x 中(几乎)所有东西都是文件……套接字也是如此。

在我的示例中sshd,pid 3934 监听端口 22(令人惊讶的是):

$ whoami
user
$ ls -l /proc/3934/fd
/bin/ls: cannot open directory /proc/3934/fd: Permission denied
$ sudo ls -l /proc/3934/fd
total 0
lrwx------ 1 root root 64 Apr 24 16:33 0 -> /dev/null
lrwx------ 1 root root 64 Apr 24 16:33 1 -> /dev/null
lrwx------ 1 root root 64 Apr 24 16:33 2 -> /dev/null
lrwx------ 1 root root 64 Apr 24 16:33 3 -> socket:[10481]
lrwx------ 1 root root 64 Apr 24 16:33 4 -> socket:[10483]

(第二个套接字绑定到我在 netstat 输出中省略的 IPv6 地址。)

相关内容