Получить IP_ADDRESS_STRING от GetAdaptersAddresses ()?

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) ?

7
задан Steve Townsend 21 October 2010 в 16:28
поделиться