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 по ее доступности.