この UDP パケットを受信したのはどのアダプタですか?
-
20-09-2019 - |
質問
C#でBOOTPサーバーを作成しようとしています。
クライアントから BOOTP パケットを受信して解析しているので、サーバーの IP アドレスを応答する必要があります。
問題は:
- コンピュータには複数のネットワーク アダプタを搭載できる
- クライアントはまだ IP アドレスを持っていません
UDPパケットがどのアダプターで受信されたかを調べる方法はありますか?
解決
これを行うにはいくつかの方法が考えられます。各物理インターフェイス上の各 IP に個別のソケットをバインドすると、パケットがどのインターフェイスに到着したかを常に知ることができます。Windows でサポートされているかどうかはわかりませんが、IP_RECVIF フラグを recvmsg ソケット関数と組み合わせて試すこともできます。Steven の Unix Network Programming のセクション 22.2 と 22.6 に例があります。ioctl で SIOCGIFCONF フラグを使用すると、マシン上のインターフェイスのリストを取得できます。UNP セクション 17.6 にサンプルプログラムがあります。C# ではこれらの関数にアクセスできないが、Windows ではサポートされている場合は、インターフェイス/IP 情報を収集および更新する単純な C プログラムを作成し、mmap を使用して C# プログラムとインターフェイス列挙子の間でメモリ領域を共有できます。
所属していません StackOverflow