web-dev-qa-db-ja.com

プロセスのネットワーク接続を表示する

プロセスの接続を表示する方法はありますか?そんな感じ:

show PID

ここで、showはこれを行うコマンドであり、PIDはプロセスのPIDです。必要な出力は、プロセスのすべての接続(リアルタイム)で構成されています。たとえば、プロセスが173.194.112.151に接続しようとすると、出力は173.194.112.151

Firefoxのより具体的な例:

show `pidof firefox`

そして、Firefoxでは、最初にgoogle.com、次にnix.stackexchange.com、最後に192.30.252.129に移動します。ブラウザーを閉じると、出力は次のようになります。

google.com
stackexchange.com
192.30.252.129

(他の多くの関連する接続があるため、ブラウザーではこの出力は現実的ではありませんが、これは単なる例です。)

29
ᴜsᴇʀ

straceを探しています!私は askubuntuのこの回答 を見つけましたが、それはUnixで有効です:

新しいプロセスを開始して監視するには:

strace -f -e trace=network -s 10000 PROCESS ARGUMENTS

既知のPIDで既存のプロセスを監視するには:

strace -p $PID -f -e trace=network -s 10000

それ以外の場合は、Linuxに固有ですが、 隔離されたネットワーク名前空間でプロセスを実行し、wiresharkを使用してトラフィックを監視する を実行できます。これはおそらくstraceログを読むよりも便利でしょう:

  • テストネットワーク名前空間を作成します。

    ip netns add test
    
  • 仮想ネットワークインターフェイスのペア(veth-aおよびveth-b)を作成します。

    ip link add veth-a type veth peer name veth-b
    
  • veth-aインターフェースのアクティブな名前空間を変更します。

    ip link set veth-a netns test
    
  • 仮想インターフェイスのIPアドレスを構成します。

    ip netns exec test ifconfig veth-a up 192.168.163.1 netmask 255.255.255.0
    ifconfig veth-b up 192.168.163.254 netmask 255.255.255.0
    
  • テスト名前空間でルーティングを構成します。

    ip netns exec test route add default gw 192.168.163.254 dev veth-a
    
  • ip_forwardをアクティブにし、NATルールを確立して、作成したネームスペースから着信するトラフィックを転送します(ネットワークインターフェースとSNAT IPアドレスを調整する必要があります):

    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 192.168.163.0/24 -o YOURNETWORKINTERFACE -j SNAT --to-source YOURIPADDRESS
    

    (必要に応じてMASQUERADEルールを使用することもできます)

  • 最後に、分析したいプロセスを新しい名前空間で実行し、wiresharkも実行できます。

    ip netns exec test thebinarytotest
    ip netns exec test wireshark
    

    Veth-aインターフェイスを監視する必要があります。

31
Olivier

試す

lsof -i -a -p `pidof firefox`
16
alxrem

ここに別のアプローチがあります:

ss -nap | grep $(pidof firefox)

出力例:

tcp    ESTAB      0      0          192.168.0.222:49050    216.58.218.164:443    users:(("firefox",3280,69))
tcp    ESTAB      0      0          192.168.0.222:48630    198.252.206.25:443    users:(("firefox",3280,106))
tcp    ESTAB      0      0          192.168.0.222:44220     216.58.217.38:443    users:(("firefox",3280,140))
tcp    ESTAB      0      0          192.168.0.222:52690    54.240.170.181:80     users:(("firefox",3280,107))
tcp    ESTAB      0      0          192.168.0.222:48744    198.252.206.25:443    users:(("firefox",3280,87))
tcp    ESTAB      0      0          192.168.0.222:48811    198.252.206.25:443    users:(("firefox",3280,73))
9

netstat -pでも試すことができます。 manページから:

netstat-ネットワーク接続、ルーティングテーブル、インターフェース統計、マスカレード接続、およびマルチキャストメンバーシップを出力します

ネットワーク接続のみを表示するには、netstat -tupを使用します。プロセスPIDを表示するには、rootである必要がある場合があります。

システムにnetstatがない場合は、ほぼ正確な構文のssがある可能性があります。次に、ss -tupを(ルートとして)使用できます。

5
abel