スクリプトを作成していますが、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