どのインターフェイスを介して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