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