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

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

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

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インターフェイスを監視する必要があります。

答え2

努力する

lsof -i -a -p $(pidof firefox | sed 's/ /,/g')

~からpidof のマニュアルページ:

説明
Pidofは、指定されたプログラムのプロセスID(pid)を見つけます。
このIDを標準出力に印刷します。

~からlsof のマニュアルページ:

  • -iこのオプションは、インターネットアドレスがiで指定されたアドレスと一致するファイルのリストを選択します。アドレスが指定されていない場合、このオプションはすべてのインターネットおよびx.25(HP-UX)ネットワークファイルのリストを選択します。
  • -aそして
  • -pこのオプションは、オプションであるプロセスのファイルのリストを除外または選択します。プロセスIDエンティティ(PID)番号は、カンマで区切られたセットs(たとえば、123または)にあります123,^456。 (コレクションにはスペースを含めないでください。)

理由:プロセス名と一致する複数のプロセスがある場合は、PIDのリストが必要です。sed各PIDの後にコンマが必要なので、スペースをコンマに変換する必要があります。を使用することもできます。指定されたプロセス名を持つ正確に単一のプロセスがあることがわかっている場合は、&をスキップできます。pidoflsoftr \ \,
sedtr

答え3

別のアプローチは次のとおりです。

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))

答え4

netstat -pマニュアルページで以下を試すこともできます。

netstat - ネットワーク接続、ルーティングテーブル、インターフェイス統計、仮面舞踏会接続、およびマルチキャストメンバーシップを印刷します。

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

netstatシステムにこの機能がない場合は、おそらくそうしますss。構文はほぼ同じです。その後、ss -tup(ルートとして)使用できます。

関連情報