Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

RÉCUPÉRER SON IP (BORLAND CPP)


Information sur la source

Catégorie :Réseaux & Internet Classé sous : windows, ip, winsock Niveau : Débutant Date de création : 27/12/2001 Date de mise à jour : 18/12/2005 23:07:34 Vu : 15 670

Note :
6 / 10 - par 5 personnes
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (27)
Ajouter un commentaire et/ou une note

Description

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


 

Source

  • #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");
  • }
#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.
 

Historique

18 décembre 2005 23:07:34 :
-maj mots clefs

Commentaires et avis

signaler à un administrateur
Commentaire de Kaid le 28/12/2001 08:27:29

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.

signaler à un administrateur
Commentaire de laigle76 le 25/10/2002 18:57:24

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

signaler à un administrateur
Commentaire de jbrek le 28/10/2002 22:29:45

Ouais, y 9 erreurs chez moi !

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

sous VC++ 6. Bizarre ?

signaler à un administrateur
Commentaire de Beuss le 28/10/2002 23:22:30

t'aurais pas oublié le #include &lt;iostream.h&gt; par hasard ?
ca marche nickel (faut la librabry ws2_32.lib)

signaler à un administrateur
Commentaire de Mike le 02/11/2002 15:03:38

cool ce prog mais y manque bien ws2_32.lib !!! www.moteurprog.com

signaler à un administrateur
Commentaire de jbrek le 02/11/2002 19:56:19

J'ai trouvé plus simple, moins long, et exactement pareil je crois...

signaler à un administrateur
Commentaire de magik le 06/12/2002 23:09:56

Bonjour, je n'arrive pas a faire fonctionner ce code, voici les erreurs que j'ai, serait il possible que quelqu'un puisse me dire pourquoi,

checkDlg.obj : error LNK2001: unresolved external symbol __imp__gethostname@8
Debug/check.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

Merci d'avance.

Magik

signaler à un administrateur
Commentaire de magik le 06/12/2002 23:12:56

Rebonsoir, oups me suis trompé, c'est un autre code, voici les erreurs que j'ai,
main.obj : error LNK2001: unresolved external symbol _inet_ntoa@4
main.obj : error LNK2001: unresolved external symbol _gethostbyname@4
main.obj : error LNK2001: unresolved external symbol _gethostname@8
main.obj : error LNK2001: unresolved external symbol _WSAStartup@8

merci encore et désolé :(

Magik

signaler à un administrateur
Commentaire de ADPro22 le 06/12/2002 23:28:59

Dans les options du projet visual C++, dans l'onglet link, il faut rajouter la librairie : winsock32.lib

signaler à un administrateur
Commentaire de magik le 07/12/2002 12:36:48

Rebonjour, merci beaucoup ça marche nickel.
Bonne journée

Magik

signaler à un administrateur
Commentaire de Sardinoman le 22/12/2002 21:11:14

Je suis pas sur de ce ke je dis mais au lieu de tout compliquer avec h_addr_list tu peux directement mettre h_addr (c le dernier element)

signaler à un administrateur
Commentaire de Vincman87 le 19/01/2003 11:28:56

Bonjour,
J'utilise C++ Builder 6 et il me dit
[Lieur Erreur fatale] Fatal: Unable to open file 'WSOCK32.LIB'
Merci de m'éclairer la dessus !
A+

signaler à un administrateur
Commentaire de cirend le 10/07/2003 01:31:48

Linking...
serveur.obj : error LNK2001: unresolved external symbol _WSACleanup@0
serveur.obj : error LNK2001: unresolved external symbol _closesocket@4
serveur.obj : error LNK2001: unresolved external symbol _recv@16
serveur.obj : error LNK2001: unresolved external symbol _accept@12
serveur.obj : error LNK2001: unresolved external symbol _listen@8
serveur.obj : error LNK2001: unresolved external symbol _bind@12
serveur.obj : error LNK2001: unresolved external symbol _htons@4
serveur.obj : error LNK2001: unresolved external symbol _socket@12
serveur.obj : error LNK2001: unresolved external symbol _WSAStartup@8
Debug/serveur.exe : fatal error LNK1120: 9 unresolved externals
Error executing link.exe.

serveur.exe - 10 error(s), 0 warning(s)

signaler à un administrateur
Commentaire de ADPro22 le 10/07/2003 18:45:58

ben c'est une erreur de link. il te manque wsock32.lib ou assimilée. donc il faut que tu trouves la bibiothèque qui va avec winsock.h (peut-etre qqch du genre winsock.lib winsock_32.lib ...) regarde dans le dossier des librairies.
et puis tu mets le nom dans #pragma comment...

(au passage, je l'ai compilé avec borland 5.5 - freecommandlinetool )

signaler à un administrateur
Commentaire de Vincman87 le 10/07/2003 18:47:41

Merci :) ADPro22

signaler à un administrateur
Commentaire de ADPro22 le 10/07/2003 18:55:58

Ah, je n'avais pas vu. idem pour cirend. Il te manque wsock32.lib.
(j'imagine que c'est compilé avec Visual C++ là)
Je ne comprends pas que le #pragma ne fonctionne pas. c'est que tu ne dois pas avoir la librairie, ou qu'elle s'appelle autrement.

signaler à un administrateur
Commentaire de D1m3x le 17/08/2003 17:11:26

Slt,
c t pas trop compliker c vré mai uh merci kan mm, on a pas tjs le tem de reprogrammer des pti trucs pareil , alor je me sui servi de ton code pour lintegrer ds mon client IRC (slm g du changer des trucs...) et bien sur, en ho de mon code g mis:
/********************************************
Merci a ADPro22, pour avoir recompenser ma paresse *
*********************************************

mdr!!, je te jure ke je lai mis! :)

aller a+ ;)

bonne prog a tous ;)

signaler à un administrateur
Commentaire de Siriusgalaxie26 le 07/10/2003 12:17:56

Super cette methode. Seulement, elle n'affiche que l'IP local (127.0.0.1). Comment detecter l'adresse IP Internet ?

signaler à un administrateur
Commentaire de ADPro22 le 08/10/2003 21:45:19

la liste phe-&gt;h_addr_list contient l'ensemble des adresses ip de ta carte réseau. En les affichant une par une, tu pourras voir toutes les ips associées à ta carte.

signaler à un administrateur
Commentaire de Vstef69 le 15/04/2004 12:14:41

Bonjour,
j' ai reussi à faire fonctionner votre code, mais pourriez vous mettre quelques commentaire pour me permettre de comprendre.

Merci
Cordialement

signaler à un administrateur
Commentaire de _ky_ le 01/10/2004 14:20:59

int main()
{
     system("ipconfig");
     system("pause");
     return (0);
}

;)

signaler à un administrateur
Commentaire de yoyo269 le 25/02/2005 20:44:07

Pour Siriusgalaxie26 ou toute autre personne intéressée pour récupérer leur IP internet si vous avez un prox ou un routeur ou des trucs dans le genre.
J'ai posté un code pour ça.
La technique n'est certainement pas idéale mais elle a le mérite de donner l'IP internet à tous les coups.
Voilà l'adresse :

http://www.cppfrance.com/code.aspx?id=29467

YOYO, @+.

signaler à un administrateur
Commentaire de cleter le 17/03/2005 17:10:16

heu le code, je sait pa trop ce qu'il vaut, mais:

jbrek, tu a di "J'ai trouvé plus simple, moins long, et exactement pareil je crois..."

On est content de le savoir....et?? c'est trop dur de nous dire ou tu la trouvé??? enfin de nous faire partager ta découverte!! parceque la tu n'apporte rien de constructif!! tu ne di pas ce qui ne va pas, ne di pas ou ta trouvé mieu...
(bon, avec ce sport j'ai un peu fai pareil, mais bon..)

sinon, j'ai repris une parti de ce code la, et pr moi ca marche, mais bon, je c pa si l'ensemble fonctionne...
je cherchai juste un exemple pr pouvoir récupéré les différentes ips d'une machine.

signaler à un administrateur
Commentaire de tuguinou le 06/04/2005 16:00:00

je fais mex monfichiert.c dans matlab

mon erreur :

avec le compilateur Lcc C version 2.4 :

Specified export _mexFunction is not defined
Missing exports. Aborting

avec le compilateur Microsoft Visual C/C++ version 6.0 :

LINK : error LNK2001: unresolved external symbol mexFunction
_lib129.x : fatal error LNK1120: 1 unresolved externals
LINK : fatal error LNK1141: failure during build of exports file


Pouvez vous m'aider?
merci!

signaler à un administrateur
Commentaire de ADPro22 le 08/04/2005 16:48:14

Ben c'est une erreur lors de l'édition des liens (link) (cette question revient souvent...)

il te manque wsock32.lib ou assimilée lors du link.
donc il faut que tu trouves la bibiothèque qui va avec winsock.h (peut-etre qqch du genre winsock.lib winsock_32.lib ws2_32.lib ...) => regarde dans le dossier des librairies.
et puis tu mets le nom dans #pragma comment...

signaler à un administrateur
Commentaire de ADPro22 le 08/04/2005 16:50:42

euh, au temps pour moi... mais c'est quoi ce mexFunction ? il doit te manquer la librairie adéquate lors de l'édition des liens... (mais je ne la connais pas)

signaler à un administrateur
Commentaire de tuguinou le 09/04/2005 22:49:31

en fait il manquait l'en tete:
#include mex.h
et la routine passerelle

merci de votre aide!

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

rechercher une string dans un fichier sous windows [ par doudblast ] voilà : l'idée est de récuperer une ip dans un fichier txtpar contre cette ip ne sera pas toujours la même et ne sera pas toujours précisemment au mêm TCP/IP [ par maitrez ] Bonjour à tous,je suis en train de créer une appli client et une appli serveur. L'appli client est un jeu qui représente pour l'instant une petite voi Probleme envoi successif winsock [ par Ricco666 ] Bonjour tout le monde, merci de prendre le temps de lire mon message. Voila je suis en train de réaliser un chat en C et je rencontre un probleme lors Gérér les TIME OUT avec l'API Winsock [ par foxdie_ck ] bouyour,je souhaiterai savoir comment utiliser un systeme de timing out afin de quitter les procédure bloquantes de winsock telles que recv() ou conne voir les paquets IP [ par alain34270 ] Bonjour à tous,Comme j'ai un petit réseau de 3 postes, pour moi et mes enfants, j'ai partagé ma connexion adsl pour qu'ils puissent consulter le net. lister les fichiers (nom, taille...) d'un repertoire en sous windows C++ [ par th3r1ddl3r ] bonjour,voila mon probleme, j'arrive a lister les fichiers d'un repertoire (avec findfirstfile et findnextfile) et dire si ce sont des repertoires ou Récupérer une page web [ par micfrip ] Bonjour à tous,Etant assez novice en matière c/c++, je souhaite vous soumettre mon petit projet.Je possède un serveur Linux sur lequel j'héberge mon s Conseil sur windows.h [ par DC ] Bonjour, je débute actuellement en C et j'aurais aimé savoir ou trouver des info sur windows.h, des tutoriels ou exemples etc ...Merci beaucoup!DC démarage de windows [ par Fuckly94 ] bjr!je cherche un moyen de lancer un programme au démarage de windows.je ne sais pas comment l'on fait.je voudrais le faire par le moyen de la program SOS winsock! S.O.S! [ par GUERRIER_ABSOLU ] Salut amis du salut en C++. Je suis étudiant; j'essaie de réaliser un truc client-serveur(qui sera noté) avec les sockets sous Windows. J'ai lu le hel


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,468 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.