特定のPIDへの現在のネットワーク接続をすべて一覧表示する方法は?

特定のPIDへの現在のネットワーク接続をすべて一覧表示する方法は?

PIDがある場合は、そのプロセスで開かれたすべての接続をどのように見つけることができますか?私は前に試しました

netstat | grep $PID 

しかし、これはうまくいかないようです。そのPIDを取得して開いているすべてのネットワーク接続を印刷するには、コマンドが必要ですが、方法がわかりません。私は他の形式でstraceに関する内容を見たことがありますが、私には理解できません。

答え1

そしてlsof

lsof -ai -p "$pid"

それ以外の場合は、rootプロセスに対してのみ取得できます。

技術的には、これは以下にのみ適用されます。インターネットソケット(接続するかどうか)。

みんな構築したいならつながる(または関連)インターネット(Unixドメインソケットなど)の有無にかかわらず、次のことを試すことができます(少なくともLinuxではlsof 4.89を使用)。

lsof  -Ep "$pid" | grep -e '(ESTABLISHED)$' -e '->INO=.* '

たとえば、私がこの回答を書くために使用したプロセスの場合は、次のようになります。

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)

答え2

そしてss

たとえば、次のpidがありますproftpd

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

ss次に、そのプロセスIDの出力をgrepします。

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

どこ:

  • -a:すべてのソケットを表示
  • -n:よく知られているポート番号を名前で確認し*:22ないでください*:ssh
  • -p:工程情報表示

注意深い。このアプローチはいくつかの誤った肯定を生成する可能性があります。たとえば、pid 22がある場合は、サーバーがリッスンしているsshTCPポートである可能性があります。

答え3

おそらく、次のように必要な情報が表示されます。

netstat -46pan

ただし、コマンドがrootとして実行されると、すべてのプロセス番号のみが表示されます。
したがって、ルートとして:

netstat -46pan | grep "$pid"

答え4

nethogs私は、プロセス固有のネットワーク活動をリアルタイムで表示するCLIアプリケーションであるCLIのファンです。技術的には、この回答はOPの重要な質問とは少し異なりますが、必要な情報といくつかの情報を提供します。この問題に興味がある多くの人に役立ちます。

sudo apt install nethogs
sudo nethogs

アプリケーションは次のようになり、毎秒ディスプレイを更新します。

NetHogs version 0.8.5-2build2

    PID USER     PROGRAM                                  DEV        SENT      RECEIVED       
   4422 davidp.. /usr/lib/firefox/firefox                 wlp0s2      1.304       8.101 KB/sec
   6972 davidp.. ..sr/lib/slack/slack --type=utility --u  wlp0s2      0.000       0.000 KB/sec
      ? root     unknown TCP                                          0.000       0.000 KB/sec

  TOTAL                                                               1.304       8.101 KB/sec

関連情報