からファイル記述子を取得し、socket(2)
それを実行したとします。connect(2)
後で (実行中のプログラム内から) 基になるトランスポートに使用されている可能性のあるネットワーク デバイスを特定する方法はありますか? stat(2)
fd で を呼び出すと、デバイス番号 0 が返されます。ioctl(2)
またはgetsockopt(2)
オプションのいずれも適用できないようです。
2 に答える
1
これを行うための絶対確実な方法はありません - 確かに posix 準拠の方法ではありません。
ただし、実際には、99% の確率で簡単にインターフェイスを特定できます。を実行した後connect
、 を使用getsockname
して IP アドレスを取得し、ボックスにある使用可能なインターフェイスのリストを調べて、一致する IP アドレスを持つインターフェイスを探します。
于 2016-08-23T15:33:46.343 に答える
0
呼び出しからaccept
、リモート クライアントの IP アドレスを取得できるはずです ( Beejでここに表示されます)。非対称ルートがないと仮定すると、ローカル ルーティング テーブルでそのアドレスへのルートを検索できます。ルーティング テーブルは、リモート クライアントにパケットを送信するために使用されるイーサネット デバイスを示しているはずです。
編集:
次のコマンド ライン ツールを使用して、ローカル ルーティング テーブルにリモート クライアントのアドレスを問い合わせることができます。
ip route get <remote-client-ip-addr>
于 2016-08-23T15:31:02.810 に答える