Vous pouvez utiliser gethostname suivi de gethostbyname pour obtenir l'IP interne de votre interface locale.
Cette adresse IP renvoyée peut cependant être différente de votre adresse IP externe. Pour obtenir votre IP externe, vous devez communiquer avec un serveur externe qui vous dira quelle est votre IP externe. En effet, l'IP externe n'est pas la vôtre, mais celle de votre routeur.
//Example: b1 == 192, b2 == 168, b3 == 0, b4 == 100
struct IPv4
{
unsigned char b1, b2, b3, b4;
};
bool getMyIP(IPv4 & myIP)
{
char szBuffer[1024];
#ifdef WIN32
WSADATA wsaData;
WORD wVersionRequested = MAKEWORD(2, 0);
if(::WSAStartup(wVersionRequested, &wsaData) != 0)
return false;
#endif
if(gethostname(szBuffer, sizeof(szBuffer)) == SOCKET_ERROR)
{
#ifdef WIN32
WSACleanup();
#endif
return false;
}
struct hostent *host = gethostbyname(szBuffer);
if(host == NULL)
{
#ifdef WIN32
WSACleanup();
#endif
return false;
}
//Obtain the computer's IP
myIP.b1 = ((struct in_addr *)(host->h_addr))->S_un.S_un_b.s_b1;
myIP.b2 = ((struct in_addr *)(host->h_addr))->S_un.S_un_b.s_b2;
myIP.b3 = ((struct in_addr *)(host->h_addr))->S_un.S_un_b.s_b3;
myIP.b4 = ((struct in_addr *)(host->h_addr))->S_un.S_un_b.s_b4;
#ifdef WIN32
WSACleanup();
#endif
return true;
}
Vous pouvez aussi toujours utiliser simplement 127.0.0.1 qui représente toujours la machine locale.
Masque de sous-réseau dans Windows :
Vous pouvez obtenir le masque de sous-réseau (ainsi que la passerelle et d'autres informations) en interrogeant les sous-clés de cette entrée de registre :
HKEY_LOCAL_MACHINE \SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
Recherchez la valeur de registre SubnetMask.
Autres méthodes pour obtenir des informations sur l'interface dans Windows :
Vous pouvez également retrouver les informations que vous recherchez en utilisant : WSAIoctl avec cette option : SIO_GET_INTERFACE_LIST
0 votes
Re : 169.254.47.253, il semble que vous n'ayez pas de routeur et que ce soit votre adresse externe.