Можно ли получить все доступные IP-адреса хоста, не используя для этого его имя?
Гугление привело к мысли, что под ОС Windows это придется делать с помощью функций GetAdaptersInfo\GetAdaptersAddresses, а под никсами - getifaddrs(), которую, в свою очередь, нельзя считать портабельной. Не существует какого-то более хитрого способа узнать поддерживается ли стеком TCP/IP хоста протокол IPv4 и IPv6 (да, изначально я хотел получить эти адреса для того, чтобы определить поддержку вышеуказанных протоколов)?
UPD0: Для ОС Windows (вдруг кому-то пригодится):
#define WORKING_BUFFER_SIZE 15000
#define MAX_TRIES 3
#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
bool existLocalInterfaceSupportedSelectedNetFamily(int netFamily)
{
bool bLookupResult = false;
PIP_ADAPTER_ADDRESSES pAdapterAddrs = NULL;
DWORD dwIterationResult = 0x00;
ULONG ulIterationsCnt = 0x00;
ULONG ulBufLength = WORKING_BUFFER_SIZE;
do
{
pAdapterAddrs = (PIP_ADAPTER_ADDRESSES)MALLOC(WORKING_BUFFER_SIZE);
dwIterationResult = GetAdaptersAddresses(netFamily
, GAA_FLAG_INCLUDE_PREFIX
, NULL
, pAdapterAddrs
, &ulBufLength);
if (dwIterationResult == ERROR_BUFFER_OVERFLOW)
{
FREE(pAdapterAddrs);
pAdapterAddrs = NULL;
}
else
break;
++ulIterationsCnt;
}
while (dwIterationResult == ERROR_BUFFER_OVERFLOW && ulIterationsCnt < MAX_TRIES);
if (dwIterationResult == NO_ERROR)
{
PIP_ADAPTER_ADDRESSES pCurAdapterAddrs = NULL;
for (pCurAdapterAddrs = pAdapterAddrs; pCurAdapterAddrs; pCurAdapterAddrs = pCurAdapterAddrs->Next)
if ( pCurAdapterAddrs->IfType != IF_TYPE_SOFTWARE_LOOPBACK )
bLookupResult |= (pCurAdapterAddrs->Flags
& ((netFamily == AF_INET) ? IP_ADAPTER_IPV4_ENABLED : IP_ADAPTER_IPV6_ENABLED) != 0x00);
}
if (pAdapterAddrs)
FREE(pAdapterAddrs);
return bLookupResult;
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости