GetAdaptersAddresses () получит ваши адреса в формате IP_ADAPTER_UNICAST_ADDRESS, который определен как:
typedef struct _IP_ADAPTER_UNICAST_ADDRESS {
union {
struct {
ULONG Length;
DWORD Flags;
} ;
} ;
struct _IP_ADAPTER_UNICAST_ADDRESS *Next;
SOCKET_ADDRESS Address;
IP_PREFIX_ORIGIN PrefixOrigin;
IP_SUFFIX_ORIGIN SuffixOrigin;
IP_DAD_STATE DadState;
ULONG ValidLifetime;
ULONG PreferredLifetime;
ULONG LeaseLifetime;
UINT8 OnLinkPrefixLength;
} IP_ADAPTER_UNICAST_ADDRESS, *PIP_ADAPTER_UNICAST_ADDRESS;
Единственное поле, которое, по-видимому, предлагает читабельную человеком строку IP-адреса, - это Address, который представляет собой структуру SOCKET_ADDRESS, определенную как:
typedef struct _SOCKET_ADDRESS {
LPSOCKADDR lpSockaddr;
INT iSockaddrLength;
} SOCKET_ADDRESS, *PSOCKET_ADDRESS;
Который, в свою очередь, использует другую структуру, SOCKADDR, определенную как:
Извините, здесь сложно размещать сообщения, поскольку они различаются в зависимости от IPv4 по сравнению с IPv6 и редакцией Windows ... поэтому здесь есть ссылка на определение:
http://msdn.microsoft.com/en-us/library/ms740496%28v=VS.85%29.aspx
Если вы еще не почувствовали головокружение, как я, и прошли через этот лабиринт определений, вы, вероятно, заметили, что это кошмар, чтобы извлечь старый добрый стиль пунктирной строки IP-адреса, так как раньше было гораздо проще использовать GetAdaptersInfo () .
У меня такой вопрос: существует ли действительно функция IP Helper, которая может конвертировать IP_ADAPTER_UNICAST_ADDRESS в строку с точками IPv4 (или строку IPv6)?