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がある場合は、サーバーがリッスンしているssh
TCPポートである可能性があります。
答え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