Récupérer son ip (borland cpp)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 18 819 fois - Téléchargée 38 fois

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

Ajouter un commentaire

Commentaires

cs_Kaid
Messages postés
950
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006
-
Tu peux rendre un peu plus propre le programme en utilisant:

char FAR * inet_ntoa (struct in_addr in);

qui permet de transformer l'adresse IPv4 contenue dans la structure in_addr en une chaine de caractères.
laigle76
Messages postés
24
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
25 janvier 2011
-
salut,
je sais po si ca vientde moi de mon logiciel ( MS vc++ 6.0) ou de qqch d'autre mais le code ci dessus ne marche po....
Si vous pouviez m'eclairer ca serai sympa
jbrek
Messages postés
25
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
22 mars 2004
-
Ouais, y 9 erreurs chez moi !

error C2065: 'cerr' : undeclared identifier
error C2297: '<<' : illegal, right operand has type 'char [34]'
error C2297: '<<' : illegal, right operand has type 'char [22]'
error C2143: syntax error : missing ';' before 'type'
'I' : undeclared identifier
error C2065: 'cout' : undeclared identifier
'<<' : illegal, right operand has type 'char [8]'
error C2065: 'endl' : undeclared identifier
'<<' : illegal, right operand has type 'char [11]'
Error executing cl.exe.

sous VC++ 6. Bizarre ?
cs_Beuss
Messages postés
100
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 juin 2003
-
t'aurais pas oublié le #include par hasard ?
ca marche nickel (faut la librabry ws2_32.lib)
cs_Mike
Messages postés
70
Date d'inscription
lundi 17 décembre 2001
Statut
Membre
Dernière intervention
24 juillet 2004
1 -
cool ce prog mais y manque bien ws2_32.lib !!! www.moteurprog.com

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.