プロセスの接続を表示する方法はありますか?このような:
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インターフェイスを監視する必要があります。