Récupérer son ip (borland cpp)

Contenu du snippet

Permet de récupérer son IP
Ce code fonctionne aussi avec VC++

Source / Exemple :


#include <iostream.h>
#include <stdlib.h>
#include <windows.h>
#include <winsock.h>

#pragma comment( lib, "wsock32.lib" )	

void AfficheIP(void)
{
  struct sockaddr_in sin;
  struct hostent * phe;
  char FAR buffer[64] ;

  // Initialisation du service WSA
  WORD wVersionRequested;
  WSADATA wsaData;
  int err;
  wVersionRequested = MAKEWORD(1, 1);
  err = WSAStartup(wVersionRequested, &wsaData);
  if (err != 0)
  {
    cerr << "Impossible de trouver winsock.dll";
  }

  // Récupération du nom de la machine
  gethostname(buffer, sizeof(buffer));

  // Récupération de la liste d'ips associées à la machine
  phe = gethostbyname(buffer);
  if(phe==NULL)
  {
    cerr << "Erreur : pointeur nul";
    WSACleanup();
    system("PAUSE");
    exit(1);
  }

  // Enumération des adresses
  int I = 0 ;
  while((phe->h_addr_list[I+1])!=NULL)
  {
    I++;
  }
  memcpy(&sin.sin_addr.s_addr, phe->h_addr_list[I], phe->h_length);

  cout << "Hote : " << buffer << endl ;
  cout << "Adresse : " << inet_ntoa(sin.sin_addr)<< endl ;

  WSACleanup();

}

void main()
{
  AfficheIP() ;
  system("PAUSE");
}

Conclusion :


MAJ: 11/12/2002
Ajout de : #pragma comment( lib, "wsock32.lib" )

Permet l'ajout automatique de la librairie wsock32.lib à l'édition des liens
Cela fonctionne sous VC++6.0. Pour les autres compilateurs, je souhaiterai que vous le mettiez dans les commentaires. Merci.

MAJ: 02/08/2003
Explications pour la ligne while((phe->h_addr_list[I+1])!=NULL) [question de Sardinoman]
Il est possible que votre pc ai plusieurs interfaces réseau (voire même plusieurs ip :( )
e.g. votre carte de réseau local, et votre modem, soient 2 interfaces, avec a priori 2 ips différentes. La boucle while permet de récupérer la dernière adresse ip de la liste.

MAJ: 15/04/2004
Ajout de quelques commentaires.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.