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, которая может преобразовывать IP_ADAPTER_UNICAST_ADDRESS в строку с точками IPv4 (или строку IPv6) ?