mis*_*yes 5 networking tcp netstat
例如,我想找到一些在指定端口上运行的进程80
我跑了
fuser 80/tcp
Run Code Online (Sandbox Code Playgroud)
并一无所获
进而
netstat -tulpn|grep "80\|PID"
Run Code Online (Sandbox Code Playgroud)
并得到了
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 :::80 :::* LISTEN -
Run Code Online (Sandbox Code Playgroud)
PID 是-
那么是什么-
意思呢?谢谢!
简短的回答是:您需要这样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 -
[...]
Run Code Online (Sandbox Code Playgroud)
您可以看到“您的”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]
Run Code Online (Sandbox Code Playgroud)
(第二个套接字绑定到 IPv6 地址,我在 netstat 输出中省略了该地址。)
归档时间: |
|
查看次数: |
3420 次 |
最近记录: |