Récupérer une adresse IP. ( à partir de 2 cartes réseaux. )

pcayrol Messages postés 18 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 13 mars 2013 - 19 mars 2002 à 20:57
ADPro22 Messages postés 126 Date d'inscription mercredi 18 juillet 2001 Statut Membre Dernière intervention 27 octobre 2004 - 23 mars 2002 à 20:33
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

1 réponse

ADPro22 Messages postés 126 Date d'inscription mercredi 18 juillet 2001 Statut Membre Dernière intervention 27 octobre 2004
23 mars 2002 à 20:33
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
#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
0
Rejoignez-nous