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

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

プロセスの接続を表示する方法はありますか?このような:

show PID

ここではshow、これを実行するコマンド、PIDはプロセスのIDです。私が望む出力は、プロセスのすべての接続(リアルタイム)で構成されています。たとえば、プロセスが接続しようとした場合173.194.112.151出力はです173.194.112.151

Firefoxのより具体的な例:

show `pidof firefox`

Firefoxの場合、まずGoogleサイト、その後unix.stackexchange.com最後に到着192.30.252.129。ブラウザを閉じると、出力は次のようになります。

google.com
stackexchange.com
192.30.252.129

(もちろん、この出力は他の関連接続が多いため、ブラウザには非現実的ですが、これは単なる例です。)

ベストアンサー1

あなたが探しているもの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インターフェイスを監視する必要があります。

おすすめ記事