2

からファイル記述子を取得し、socket(2)それを実行したとします。connect(2)後で (実行中のプログラム内から) 基になるトランスポートに使用されている可能性のあるネットワーク デバイスを特定する方法はありますか? stat(2)fd で を呼び出すと、デバイス番号 0 が返されます。ioctl(2)またはgetsockopt(2)オプションのいずれも適用できないようです。

4

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 に答える