質問

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# プログラムとインターフェイス列挙子の間でメモリ領域を共有できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top