GetAdaptersAddresses() ti porterà gli indirizzi in formato IP_ADAPTER_UNICAST_ADDRESS, che è definito come:Ottieni un IP_ADDRESS_STRING da GetAdaptersAddresses()?
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;
L'unico campo che sembra suggerire la stringa indirizzo IP leggibile è l'indirizzo, che è una struttura SOCKET_ADDRESS definita come:
typedef struct _SOCKET_ADDRESS {
LPSOCKADDR lpSockaddr;
INT iSockaddrLength;
} SOCKET_ADDRESS, *PSOCKET_ADDRESS;
quale, a sua volta, utilizza un'altra struttura, SOCKADDR, definita come:
Purtroppo, è troppo complessi da pubblicare qui, in quanto varia a seconda IPv4 vs IPv6 e W indows edizione ... ecco un link per la definizione:
http://msdn.microsoft.com/en-us/library/ms740496%28v=VS.85%29.aspx
Se non hai ancora avuto le vertigini come ho fatto io e seguito attraverso questo labirinto di definizioni, probabilmente notato che si tratta di un incubo per recupera il buon vecchio stile di stringa punteggiata di un indirizzo IP, in quanto era molto più semplice usando .
La mia domanda è: C'è una vera funzione IP Helper che può convertire IP_ADAPTER_UNICAST_ADDRESS a un IPv4 punteggiata stringa (o una stringa IPv6)?
@Steve, grazie, ma questo non è proprio quello che stavo cercando. GetAdaptersAddresses() fornisce molte più informazioni, sia per IPv4 che per IPv6, e mi piacerebbe attenervisi seguendo le raccomandazioni di Microsoft.Tutto quello che mi manca è una funzione di convenienza "traduttore" che prenderebbe IP_ADAPTER_UNICAST_ADDRESS come parametro e produrrà una stringa. Invece di reinventare la ruota e scriverla da sola, forse sai di una funzione così esistente? Nell'API stesso o altrove, forse qualche esempio? –
@Android Eve - vedi edit, puoi usare 'WSAAddressToString' per questo. –
Ancora una volta, si dimostra una conoscenza impressionante dello spazio IP Helper di PSDK. Grazie alla tua risposta, sono stato in grado di individuare alcune funzioni più correlate, in particolare RtlIpv4AddressToString() e RtlIpv6AddressToString() che, sfortunatamente, esistono nel WDK, non nel PSDK. Segnerò brevemente la tua risposta come accettata. A meno che una nuova risposta suggerisca una funzione che fa lo stesso per * entrambi * IPv6 e IPv4. –