どのアプリケーションがどのネットワークインターフェイスを使用しているかを確認できますか?
たとえば、Wi-Fi接続とLANケーブルがある場合、「skype:eth0」または「google chrome:wlan0」への明確な答えを得る方法はありますか?
答え1
私の考えでは、wire-sharkまたはtcpdumpを使用してパケットをキャプチャし、アドレスを確認して、どのアプリケーションがどのIP(およびインタフェース)を使用して通信しているかを確認する必要があります。
アップデート1
コマンドでプロセスIDを取得したpgrep
後、次のコマンドを使用できます。
lsof -Pan -p PID -i
例:
pgrep firefox
23533
lsof -Pan -p 23533 -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
firefox 23533 iahmad 73u IPv4 1317376 0t0 TCP 137.138.52.207:59237->104.16.116.182:80 (ESTABLISHED)
firefox 23533 iahmad 74u IPv4 1317600 0t0 TCP 137.138.52.207:46223->66.220.158.19:443 (ESTABLISHED)
firefox 23533 iahmad 75u IPv4 1316597 0t0 TCP 137.138.52.207:32950->198.252.206.25:443 (ESTABLISHED)
firefox 23533 iahmad 79u IPv4 1317730 0t0 TCP 137.138.52.207:32989->198.252.206.25:443 (ESTABLISHED)
firefox 23533 iahmad 80u IPv4 1317759 0t0 TCP 137.138.52.207:45125->31.13.71.7:443 (ESTABLISHED)
ip a s
したがって、コマンドを実行すると、137.138.52.207が私のeth0になります。 Firefoxはeth0を使用します。
スカイプの場合:
pgrep skype
24611
次に、次のようにします。
lsof -Pan -p 24611 -i
Skypeのインターフェースも表示されます。
答え2
私たちの中には、作業時間中にtcpdumpをごくまれに使用しています。示されているように、受信したすべてのパケットに25%の追加処理時間を追加できるため、strace(1)
使用量の多いシステムで最も便利な時間にそれを使用することは実際に高い経験を持つインターフェースで(ネットワーク処理時間が25%増加すると、人々は不平を言うします)オプションではありません。交通)。したがって、tcpdump が終了した可能性があります。
tcpdumpが利用できないときに実行する手順:
まず、インターフェースを見てください。スループットが高い可能性が高い項目を確認してください。
human=-h # Make this empty if you want full output: human=""
{ echo . interface . \\ bytes pkts err drop ovrrun mcast \\ . \\ bytes pkts err drop carr collsn ; ip -o -s $human link show | sed -e 's/<.* RX:/RX:/' -e 's/bytes.*mcast//' -e 's/bytes.*collsns//' -e 's/\\ *altname.*//' -e 's/ *$//'; } | column -t
これは、最後のシステムの再起動以降に各インターフェイスを通過したネットワークパケットとバイト数を示します。出力は次のとおりです。
. interface . \ bytes pkts err drop ovrrun mcast \ . \ bytes pkts err drop carr collsn
1: lo: RX: \ 119G 366M 0 0 0 0 \ TX: \ 119G 366M 0 0 0 0
2: em1: RX: \ 1.30T 1.59G 0 30.4k 0 613M \ TX: \ 900G 846M 0 0 0 0
3: p1p1: RX: \ 23.8G 176M 0 15.3k 0 153M \ TX: \ 80.5M 698k 0 0 0 0
あなたのIPアドレスがよく表示されます。
/usr/sbin/ip -o -4 a | sed -e 's/^.*: //' -e '/host lo/d' -e 's/ brd .*//' -e 's/ inet //' | sort | column -t
これにより、次の出力が提供されます。
em1 10.172.10.44/23
p1p1 10.173.43.190/24
次に、使用率の高いインターフェイス(このシナリオではp1p1に興味があると仮定)で次のことを行います。
ss -tulpn | grep 10.173.43.190
これにより、そのインターフェイスの接続と受信プロセスを示す次の出力が提供されます。
udp UNCONN 0 0 10.173.43.190:28003 *:* users:(("Main",pid=235446,fd=51))
tcp LISTEN 0 5 10.173.43.190:21000 *:* users:(("httpd",pid=54079,fd=17))
プロセスIDがここに表示されます。
マルチキャスト受信機を見つけることもできます(たとえば、「dev inet」オプションのためにipv4ベース)。
ip -o maddr show dev inet | grep p1p1
次の出力を提供します。
8: p1p1\ inet 239.164.10.1
ss -tulpn | grep 239.164
これにより、上記のようにコマンド出力を確認できます。ただし、いくつかの注意事項があります。参考https://stackoverflow.com/questions/15892675/listing-multicast-sockets 具体的には、「マルチキャストソケットはアドレスにバインドされておらず、マルチキャストグループ(IP_ADD_MEMBERSHIP)にのみ参加します。ソケットは同じインターフェイスの異なるグループに参加したり、異なるインターフェイスの同じグループに参加したりできます。」
その出力に示されているpidを見ましたが、いくつss
かのマルチキャストグループがその出力から欠落していることも確認しました。マルチキャストが存在ip -o maddr show
し、存在しない理由が何であるかよくわかりませんss
。カーネルバイパスを使用するアプリケーションに関連している可能性があります(単なる推測にすぎません)。