GetAdapterAddresses()
fornisce maschere di sottorete solo su Vista e successive.
Quando scorrendo gli indirizzi unicast puntata dal FirstUnicastAddress
campo del record IP_ADAPTER_ADDRESSES
, il record IP_ADAPTER_UNICAST_ADDRESS
include un campo OnLinkPrefixLength
. Questo campo non è disponibile su sistemi pre-Vista. Questo campo è la lunghezza della subnet mask, in bit. Per gli indirizzi unicast IPv4, è possibile utilizzare ConvertLengthToIpv4Mask()
per convertire il valore OnLinkPrefixLength
in una subnet mask, che è possibile utilizzare per mascherare l'indirizzo IPv4 unicast in base alle esigenze.
Su sistemi pre-Vista, utilizzare GetIpAddrTable()
per ottenere un elenco delle interfacce IPv4 disponibili. Il record MIB_IPADDRROW
contiene un campo dwAddr
per l'indirizzo IPv4, un campo dwMask
per la maschera di sottorete e un campo dwBCastAddr
per l'indirizzo di trasmissione. Puoi scorrere ciclicamente quella tabella alla ricerca di ogni indirizzo IPv4 unicast riportato da GetAdapterAddresses()
, e quindi avrai le relative maschere di sottorete e gli indirizzi IP broadcast.
fonte
2014-07-11 20:13:19
C'è un modo per convertire l'ULONG restituito da 'ConvertLengthToIpv4Mask()' a una rappresentazione di stringa (come "255.255.255.0")? – jossgray
Ok, posso usare una struttura in_addr e inet_ntoa. Grazie. – jossgray
Grazie per l'ottima risposta! Voglio solo aggiungere che la documentazione MSDN per IP_ADAPTER_UNICAST_ADDRESS è errata per Windows Embedded Compact 7. https://msdn.microsoft.com/en-us/library/ee494101(v=winembedded.70).aspx Non funziona elenca OnLinkPrefixLength, ma guardando i file .h, è lì. Ho confermato che è lì. (Lo stesso per le versioni più recenti). Non esiste in CE 6 o inferiore (adeguatamente documentato). – Bryan