Функция GetIpNetTable2 (netioapi.h)
Функция GetIpNetTable2 извлекает таблицу соседей IP-адресов на локальном компьютере.
Синтаксис
IPHLPAPI_DLL_LINKAGE _NETIOAPI_SUCCESS_ NETIOAPI_API GetIpNetTable2(
[in] ADDRESS_FAMILY Family,
[out] PMIB_IPNET_TABLE2 *Table
);
Параметры
[in] Family
Семейство адресов, извлекаемого.
Возможные значения семейства адресов перечислены в файле заголовка Winsock2.h. Обратите внимание, что значения для семейства адресов AF_ и констант семейства протоколов PF_ идентичны (например, AF_INET и PF_INET), поэтому можно использовать любую константу.
В пакете SDK windows, выпущенном для Windows Vista и более поздних версий, организация файлов заголовков изменилась и возможные значения этого элемента определяются в файле заголовка Ws2def.h. Обратите внимание, что файл заголовка ws2def.h
В настоящее время поддерживаются значения AF_INET, AF_INET6и AF_UNSPEC.
[out] Table
Указатель на указатель на структуру MIB_IPNET_TABLE2, содержащую таблицу соседних записей IP-адресов на локальном компьютере.
Возвращаемое значение
Если функция выполнена успешно, возвращаемое значение NO_ERROR или ERROR_NOT_FOUND.
Если функция завершается ошибкой или не возвращает данные, возвращаемое значение является одним из следующих кодов ошибок.
Возвращаемый код | Описание |
---|---|
|
Недопустимый параметр был передан функции. Эта ошибка возвращается, если указатель |
|
Недостаточно ресурсов памяти доступны для завершения операции. |
|
Не найдены записи ip-адресов соседа, указанные в параметре Это возвращаемое значение указывает на то, что вызов функции GetIpNetTable2 getIpNetTable 2 выполнен успешно, но не было возвращаемых данных. Это может произойти, если AF_INET указан в параметре семейства |
|
Запрос не поддерживается.
Эта ошибка возвращается, если на локальном компьютере отсутствует стек IPv4, а AF_INET указан в параметре Family. Эта ошибка также возвращается, если на локальном компьютере отсутствует стек IPv6, а AF_INET6 указан в параметре Family. Эта ошибка также возвращается в версиях Windows, где эта функция не поддерживается. |
|
Используйте FormatMessage, чтобы получить строку сообщения для возвращаемой ошибки. |
Замечания
Функция GetIpNetTable2 определена в Windows Vista и более поздних версиях.
Тем
функция GetIpNetTable2 перечисляет соседние IP-адреса в локальной системе и возвращает эти сведения в структуре MIB_IPNET_TABLE2.
Соседние ЗАПИСИ IP-адресов возвращаются в структуре MIB_IPNET_TABLE2 в буфере, на который указывает параметр Table. Структура MIB_IPNET_TABLE2 содержит число входных ip-адресов соседа и массив структур MIB_IPNET_ROW2 для каждой записи IP-адреса соседа. Если эти возвращаемые структуры больше не требуются, освободите память путем вызова FreeMibTable.
Параметр семейства
Обратите внимание, что возвращаемая
Примеры
В следующем примере извлекается таблица соседей IP-адресов, а затем выводится значения для записей строк соседей IP-адресов в таблице.
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#include <winsock2.h>
#include <ws2ipdef.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")
int main()
{
// Declare and initialize variables
int i;
unsigned int j;
unsigned long status = 0;
PMIB_IPNET_TABLE2 pipTable = NULL;
// MIB_IPNET_ROW2 ipRow;
status = GetIpNetTable2(AF_INET, &pipTable);
if (status != NO_ERROR) {
printf("GetIpNetTable for IPv4 table returned error: %ld\n", status);
exit(1);
}
// Print some variables from the table
printf("Number of IPv4 table entries: %d\n\n", pipTable->NumEntries);
for (i = 0; (unsigned) i < pipTable->NumEntries; i++) {
// printf("Table entry: %d\n", i);
printf("IPv4 Address[%d]:\t %s\n", (int) i,
inet_ntoa(pipTable->Table[i].Address.Ipv4.sin_addr));
printf("Interface index[%d]:\t\t %lu\n", (int) i,
pipTable->Table[i].InterfaceIndex);
printf("Interface LUID NetLuidIndex[%d]:\t %lu\n",
(int) i, pipTable->Table[i].InterfaceLuid.Info.NetLuidIndex);
printf("Interface LUID IfType[%d]: ", (int) i);
switch (pipTable->Table[i].InterfaceLuid.Info.IfType) {
case IF_TYPE_OTHER:
printf("Other\n");
break;
case IF_TYPE_ETHERNET_CSMACD:
printf("Ethernet\n");
break;
case IF_TYPE_ISO88025_TOKENRING:
printf("Token ring\n");
break;
case IF_TYPE_PPP:
printf("PPP\n");
break;
case IF_TYPE_SOFTWARE_LOOPBACK:
printf("Software loopback\n");
break;
case IF_TYPE_ATM:
printf("ATM\n");
break;
case IF_TYPE_IEEE80211:
printf("802.11 wireless\n");
break;
case IF_TYPE_TUNNEL:
printf("Tunnel encapsulation\n");
break;
case IF_TYPE_IEEE1394:
printf("IEEE 1394 (Firewire)\n");
break;
default:
printf("Unknown: %d\n",
pipTable->Table[i].InterfaceLuid.Info.IfType);
break;
}
printf("Physical Address[%d]:\t ", (int) i);
if (pipTable->Table[i].PhysicalAddressLength == 0)
printf("\n");
// for (j = 0; (unsigned) j < pipTable->Table[i].PhysicalAddressLength; j++)
// printf ("%c"
for (j = 0; j < pipTable->Table[i].PhysicalAddressLength; j++) {
if (j == (pipTable->Table[i].PhysicalAddressLength - 1))
printf("%.2X\n", (int) pipTable->Table[i].PhysicalAddress[j]);
else
printf("%.2X-", (int) pipTable->Table[i].PhysicalAddress[j]);
}
printf("Physical Address Length[%d]:\t %lu\n", (int) i,
pipTable->Table[i].PhysicalAddressLength);
printf("Neighbor State[%d]:\t ", (int) i);
switch (pipTable->Table[i].State) {
case NlnsUnreachable:
printf("NlnsUnreachable\n");
break;
case NlnsIncomplete:
printf("NlnsIncomplete\n");
break;
case NlnsProbe:
printf("NlnsProbe\n");
break;
case NlnsDelay:
printf("NlnsDelay\n");
break;
case NlnsStale:
printf("NlnsStale\n");
break;
case NlnsReachable:
printf("NlnsReachable\n");
break;
case NlnsPermanent:
printf("NlnsPermanent\n");
break;
default:
printf("Unknown: %d\n", pipTable->Table[i].State);
break;
}
printf("Flags[%d]:\t\t %u\n", (int) i,
(unsigned char) pipTable->Table[i].Flags);
printf("ReachabilityTime[%d]:\t %lu\n\n", (int) i,
pipTable->Table[i].ReachabilityTime);
}
FreeMibTable(pipTable);
pipTable = NULL;
exit(0);
}
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows Vista [только классические приложения] |
минимальный поддерживаемый сервер | Windows Server 2008 [только классические приложения] |
целевая платформа | Виндоус |
заголовка | netioapi.h (include Iphlpapi.h) |
библиотеки |
Iphlpapi.lib |
DLL | Iphlpapi.dll |