如何列出给定 PID 的所有当前网络连接?

Joh*_*ohn 7 linux process open-files

如果我有 PID,我如何才能找到为该进程打开的所有连接?我试过

netstat | grep $PID 
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用。我需要一个命令来获取该 PID 并打印所有打开的网络连接,但我不知道如何。我在其他形式上看到过关于 strace 的内容,但这对我来说没有意义。

Sté*_*las 8

lsof

lsof -ai -p "$pid"
Run Code Online (Sandbox Code Playgroud)

如果你不是root,你将只能为你的流程获得它。

从技术上讲,这仅适用于Internet套接字(已连接或未连接)。

如果您想要所有已建立的连接(或关联),互联网与否(例如 Unix 域套接字),您可以尝试(至少在 Linux 和 lsof 4.89 上):

lsof  -Ep "$pid" | grep -e '(ESTABLISHED)$' -e '->INO=.* '
Run Code Online (Sandbox Code Playgroud)

例如,对于我用来写这个答案的过程,它给出:

firefox 6261 chazelas    3u     unix 0xffff88026785d000       0t0   741948 type=STREAM ->INO=743009 4244,dbus-daem,58u
firefox 6261 chazelas    4u     unix 0xffff88017194c000       0t0   741280 type=STREAM ->INO=742999 3575,Xorg,57u
firefox 6261 chazelas    6u     unix 0xffff8802f544d400       0t0   743000 type=STREAM ->INO=741281 4244,dbus-daem,56u
firefox 6261 chazelas   11u     unix 0xffff8802f544e800       0t0   743004 type=STREAM ->INO=737278 4167,cinnamon-,21u
firefox 6261 chazelas   14u     unix 0xffff8801474b3c00       0t0   737279 type=STREAM ->INO=737280 6261,firefox,15u
firefox 6261 chazelas   15u     unix 0xffff8801474b7c00       0t0   737280 type=STREAM ->INO=737279 6261,firefox,14u
firefox 6261 chazelas   34u     unix 0xffff8801d0d01800       0t0   741294 type=STREAM ->INO=743006 4244,dbus-daem,57u
firefox 6261 chazelas   45u     IPv4             741950       0t0      TCP UNKNOWN:44232->host24-rangeA-akamai-aanp.cdn.thlon.isp.sky.com:http (ESTABLISHED)
firefox 6261 chazelas   53u     unix 0xffff880178356800       0t0   741947 type=STREAM ->INO=743008 3575,Xorg,56u
firefox 6261 chazelas   60u     IPv4             743011       0t0      TCP UNKNOWN:52760->a95-101-128-57.deploy.akamaitechnologies.com:http (ESTABLISHED)
firefox 6261 chazelas   73u     IPv4             742158       0t0      TCP UNKNOWN:54674->lhr35s01-in-f14.1e100.net:http (ESTABLISHED)
firefox 6261 chazelas   87u     IPv4             743521       0t0      TCP UNKNOWN:33564->stackoverflow.com:https (ESTABLISHED)
firefox 6261 chazelas   91u     IPv4             743522       0t0      TCP UNKNOWN:53940->93.184.220.29:http (ESTABLISHED)
firefox 6261 chazelas   92u     IPv4             742153       0t0      TCP UNKNOWN:36836->151.101.65.69:https (ESTABLISHED)
firefox 6261 chazelas   94u     IPv4             742154       0t0      TCP UNKNOWN:33716->192.0.73.2:https (ESTABLISHED)
firefox 6261 chazelas   96u     IPv4             742157       0t0      TCP UNKNOWN:51166->lhr26s04-in-f234.1e100.net:https (ESTABLISHED)
firefox 6261 chazelas  113u     IPv4             744875       0t0      TCP UNKNOWN:43262->lhr35s01-in-f1.1e100.net:https (ESTABLISHED)
Run Code Online (Sandbox Code Playgroud)


小智 4

ss

举个例子,我有一个 pid 来自proftpd

[root@ftp ~]# ps fax | grep proftpd
 7461 ?        Ss     1:46 proftpd: (accepting connections)
Run Code Online (Sandbox Code Playgroud)

ss现在,grep该进程 ID的输出。

[root@ftp ~]# ss -nap | grep 7461
LISTEN     0      5            *:21         *:*      users:(("proftpd",7461,0))
Run Code Online (Sandbox Code Playgroud)

在哪里:

  • -a:显示所有socket
  • -n:不要将众所周知的端口号解析为名称(*:22将成为*:ssh
  • -p:显示进程信息

小心。这种方法可能会产生一些误报,例如,如果您有 pid 22,那么它也可能是您的ssh服务器正在侦听的 tcp 端口。