プロセスの接続を表示する方法はありますか?このような:
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の後にコンマが必要なので、スペースをコンマに変換する必要があります。を使用することもできます。指定されたプロセス名を持つ正確に単一のプロセスがあることがわかっている場合は、&をスキップできます。pidof
lsof
tr \ \,
sed
tr
答え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
(ルートとして)使用できます。