Indy получает всю информацию о локальном интерфейсе (кросс-платформенный)

Я конвертирую модуль, который содержит список сетевых интерфейсов, в кроссплатформенный. Текущая версия использует сырой winsock для получения адреса, маски и широковещательного адреса для каждого сетевого интерфейса в системе.

Я считаю, что самый простой способ сделать эту кроссплатформенную - это использовать Indy. Я обнаружил, что AddLocalAddressesToList хороший простой способ получить IP-адрес всех интерфейсов, но я не могу узнать, как получить другую необходимую мне информацию (маску и широковещательный адрес). Я думаю, что могу рассчитать широковещательный адрес, так что это просто маска, которую я не могу понять.

FYI. Это код, который я нашел, чтобы получить IP-адреса всех интерфейсов.

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

1 ответ

Решение

WinSock не поддерживает создание отчетов такого рода информации. Вместо этого вы должны использовать специфичные для ОС API. В Windows это означает использование Win32 API GetAdaptersInfo() а также GetAdaptersAddresses() функции. На других платформах вы можете использовать getifaddrs() функция где доступно.

В настоящее время Indy не поддерживает то, что вы просите. Кроме того, обратите внимание, что в это время AddLocalAddressesToList() поддерживает адреса IPv4 только на большинстве платформ, включая Windows.

Поддержка восстановления локальных IPv6-адресов, а также другой информации, такой как маски подсетей, в настоящее время находится в разработке, но пока нет ETA по ее доступности.

Другие вопросы по тегам