0

ネットワークインターフェイスリストを保持するユニットをクロスプラットフォームに変換しています。現在のバージョンでは、raw winsockを使用して、システム内の各ネットワークインターフェイスのアドレス、マスク、およびブロードキャストアドレスを取得します。

このクロスプラットフォームを作成する最も簡単な方法は、Indyを使用することだと思います。これは、すべてのインターフェイスのIPアドレスを取得するための便利な簡単な方法であることがわかりましたAddLocalAddressesToListが、必要なその他の情報(マスクとブロードキャストアドレス)を取得する方法がわかりません。ブロードキャストアドレスを計算できると思うので、それは本当に私が理解できないマスクです。

ご参考までに。これは、すべてのインターフェイスのIPアドレスを取得するために私が見つけたコードです。

TIdStack.IncUsage;
try
  GStack.AddLocalAddressesToList(Memo1.Lines);
finally
  TIdStack.DecUsage;
end;
4

1 に答える 1

2

WinSockは、そのような情報の報告をサポートしていません。代わりに、OS固有のAPIを使用する必要があります。Windowsでは、これはWin32APIGetAdaptersInfo()GetAdaptersAddresses()関数を使用することを意味します。他のプラットフォームでは、利用可能な場合はこのgetifaddrs()機能を使用できます。

インディは現在、あなたが求めているものをサポートしていません。また、現時点では、AddLocalAddressesToList()Windowsを含むほとんどのプラットフォームでIPv4アドレスのみをサポートしていることに注意してください。

ローカルIPv6アドレスの取得のサポート、およびサブネットマスクなどの他の情報は現在作業中ですが、その可用性に関するETAはまだありません。

于 2013-03-08T03:32:37.733 に答える