Si tu veux récupérer l'ip locale associée à un hote, voici un code qui récupère l'adresse locale du pc sur lequel tu éxécute le prog :
(sous Windows...)
#include <iostream.h>
#include <stdlib.h>
#include <windows.h>
#include <winsock.h>
void AfficheLocalIP(void)
{
struct sockaddr_in sin ;
struct hostent * phe ;
char FAR buffer[64] ;
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1, 1);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
cerr << "Impossible de trouver winsock.dll" ;
}
gethostname(buffer, sizeof(buffer)) ;
phe = gethostbyname(buffer) ;
if(phe==NULL)
{
cerr << "Erreur : pointeur nul";
system("PAUSE");
exit(1) ;
}
memcpy(&sin.sin_addr.s_addr, phe->h_addr, phe->h_length);
cout << "Hote : " << buffer << endl ;
cout << "Adresse locale : " << inet_ntoa(sin.sin_addr)<< endl ;
WSACleanup() ;
}
void main()
{
AfficheLocalIP() ;
system("PAUSE");
}
Pour récupérer l'ip locale d'un autre hote, la portion de code qui devrait t'intéresser c'est :
memcpy(&sin.sin_addr.s_addr, phe->h_addr, phe->h_length);
cout << "Hote : " << buffer << endl ;
cout << "Adresse locale : " << inet_ntoa(sin.sin_addr)<< endl ;
J'espère avoir répondu à ta question.
Pour accéder à l'ip que le pc publie sur internet cf ma source
http://www.cppfrance.com/article.asp?Val=327-------------------------------
Réponse au message :
-------------------------------
Ma config : un PC avec deux cartes réseaux. Chaque carte a son adresse IP.
Avec la fonction gethostbyname je recupere un pointeur HOSTENT qui pointe sur mes deux adresses. Jusque là, tout va bien.
Mais ce que je veux , c'est récupérer l'adresse correspondant à l'une des cartes réseaux. Y a t il un moyen d'identifier ces adresses par rapport à leur interface ?
Si c'est pas clair, dites le moi. Merci
Pascal