列出进程 PID 正在侦听的端口(最好使用 iproute2 工具)?

Tho*_*ner 87 ip monitoring port-forwarding iproute

我希望列出 PID 当前正在侦听的所有端口。

您建议我如何获取有关流程的此类数据?

jof*_*fel 76

您可以使用ssiproute2 包(类似于netstat):

ss -l -p -n | grep "pid=1234,"
Run Code Online (Sandbox Code Playgroud)

或(对于较旧的 iproute2 版本):

ss -l -p -n | grep ",1234,"
Run Code Online (Sandbox Code Playgroud)

将 1234 替换为程序的 PID。

  • 另外,这仅适用于 root 权限:) (4认同)
  • 还有`-u` 或`-t` 仅用于udb 或tcp。:+1: 这些都可以像这样堆叠:`ss -tlnp`,并消除填充宽度输出,[我觉得很烦人](http://superuser.com/q/983076/309066) 你可以用管道尽管 cat 或更少或 w/e:`ss -tlnp | 猫` (3认同)

Ram*_*esh 67

我不知道使用iproute2工具的方法。但作为一种解决方法,你可以试试这个。

lsof -Pan -p PID -i
Run Code Online (Sandbox Code Playgroud)

应该给你你正在寻找的信息。


输出

lsof -Pan -p 27808 -i
COMMAND   PID   USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
httpd   27808 apache    5u  IPv6 112811294      0t0  TCP *:80 (LISTEN)
httpd   27808 apache    7u  IPv6 112811298      0t0  TCP *:8443 (LISTEN)
httpd   27808 apache    9u  IPv6 112811303      0t0  TCP *:443 (LISTEN)
Run Code Online (Sandbox Code Playgroud)

我从这里得到了这个命令,但不确定确切的链接,因为我已经在笔记本中记下了所有这些命令。但你也可以从那里退房。


Raz*_*aza 17

您可以使用netstat它来计算每个监听进程的 pid。

netstat - 打印网络连接、路由表、接口统计信息、伪装连接和多播成员资格

-a, --all 显示侦听和非侦听(对于 TCP 这意味着已建立的连接)套接字。使用 --interfaces 选项,显示未标记的接口

--numeric , -n 显示数字地址,而不是尝试确定符号主机、端口或用户名。

-p, --program 显示每个套接字所属程序的PID和名称。

下面是一个例子:

# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1507/rpcbind
tcp        0      0 0.0.0.0:51188               0.0.0.0:*                   LISTEN      1651/rpc.statd
tcp        0      0 0.0.0.0:1013                0.0.0.0:*                   LISTEN      1680/ypbind
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1975/sshd
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      1763/cupsd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      2081/master
tcp        0      0 127.0.0.1:27017             0.0.0.0:*                   LISTEN      2119/mongod
tcp        0     48 172.16.33.73:22             172.16.127.110:51850        ESTABLISHED 25473/sshd
tcp        0      0 172.16.33.73:22             172.16.127.110:51214        ESTABLISHED 24699/sshd
tcp        0      0 :::111                      :::*                        LISTEN      1507/rpcbind
tcp        0      0 :::9200                     :::*                        LISTEN      1994/java
tcp        0      0 :::9300                     :::*                        LISTEN      1994/java
tcp        0      0 :::22                       :::*                        LISTEN      1975/sshd
tcp        0      0 ::1:631                     :::*                        LISTEN      1763/cupsd
tcp        0      0 ::1:25                      :::*                        LISTEN      2081/master
tcp        0      0 :::59162                    :::*                        LISTEN      1651/rpc.statd
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,尽管我已被告知 iproute2 工具已弃用 `netstat`,我希望避免它。 (2认同)

slm*_*slm 13

@jofel 的回答向您展示了要使用的适当工具ss,这里是 iproute2 中其他网络工具的替代品。

不推荐使用的命令及其 iproute2 等效命令如下:

deprecated      replacement(s)
==========      ==============
- arp           ip n (ip neighbor)
- ifconfig      ip a (ip addr), ip link, ip -s (ip -stats)
- iptunnel      ip tunnel
- iwconfig      iw
- nameif        ip link, ifrename
- netstat       ss, ip route (for netstat-r), ip -s link (for netstat -i), 
                ip maddr (for netstat-g)

- route         ip r (ip route)
Run Code Online (Sandbox Code Playgroud)

基本列表也在维基百科上:http : //en.wikipedia.org/wiki/Iproute2

参考