どのアプリケーションがどのネットワークインタフェースを使用しているかを検出する

どのアプリケーションがどのネットワークインタフェースを使用しているかを検出する

どのアプリケーションがどのネットワークインターフェイスを使用しているかを確認できますか?

たとえば、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。カーネルバイパスを使用するアプリケーションに関連している可能性があります(単なる推測にすぎません)。

関連情報