特定のIPアドレスでどのインターフェイストラフィックが通過するかを検出する

特定のIPアドレスでどのインターフェイストラフィックが通過するかを検出する

どのインターフェイスを介してIPトラフィックを検出する必要があるスクリプトを作成しています。これは、アーキテクチャではIPアドレスが4つのNICのうちの1つのみを使用しますが、4つのいずれかを使用できるためです。

私がした手動の方法はtcpdumpを実行することでした。パケットが見える場合はそれがインターフェイスであり、そうでなければtcpdumpをキャンセルし、別のインターフェイスで別のtcpdumpを実行します。

私はFreeBSDを実行しています。

答え1

呼ぶroute get

route get 192.0.2.42 | awk '$1 ~ /interface/ {print $2}'

答え2

netstat -tauプログラムが使用するローカルアドレスとポートを表示します。各インターフェイスにはバインディングなどを除いて独自のアドレスがあります。これが必要な情報ですか?

それならスクリプトで活用してgrep出力すると楽です。cut

例: netstat -taunpe | grep firefox | awk '{print $4}' | cut -d ':' -f 1 「firefox」設定された接続に使用されるローカルアドレスを取得します。

答え3

* BSDについてはよくわかりませんが、Linuxではroute -nフラグ(デフォルトのパスで示されている行を検索することもできます)とデバイス名を知らせます。

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.100.63.254   0.0.0.0         UG    0      0        0 eth0
10.100.0.0      0.0.0.0         255.255.192.0   U     0      0        0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth0

または:

$ ip route
default via 10.100.63.254 dev eth0 
10.100.0.0/18 dev eth0  proto kernel  scope link  src 10.100.12.38 
127.0.0.0/8 dev lo  scope link 
169.254.0.0/16 dev eth0  scope link

関連情報