begin process at 2008 07 06 16:52:42
1 205 660 membres
227 nouveaux aujourd'hui
14 119 membres club

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 !

TROUVER SA PROPRE ADRESSE IP


Information sur la source

Catégorie :Réseaux & Internet Niveau : Initié Date de création : 01/02/2004 Date de mise à jour : 01/02/2004 18:22:05 Vu : 7 586

Note :
10 / 10 - par 4 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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


Description

ce code semble un peu plus 'propre' que ceux que j'ai pu voir ici, mais je sais pas s'il marche dans tous les cas donc...

Source

  • #include <winsock2.h>
  • #pragma comment(lib, "ws2_32.lib")
  • #include <stdio.h>
  • #include <stdlib.h>
  • void main()
  • {
  • WSADATA wsaData;
  • char host[100];
  • HOSTENT* ip_resolue;
  • SOCKADDR_IN valip;
  • int compteur;
  • // Initialisation des sockets windows.
  • WSAStartup(MAKEWORD(2, 0), &wsaData);
  • // Recuperation du nom d'hote de votre ordi.
  • gethostname(host,sizeof(host));
  • ip_resolue = gethostbyname(host);
  • if (ip_resolue != NULL) // si c'est NULL sans doute n'est on pas connecté.
  • {
  • // recuperation du dernier entier 'compteur' tel que ip_resolue->h_addr_list[compteur] n'est pas null
  • for (compteur = 0; ip_resolue->h_addr_list[compteur+1] != NULL; compteur++) {}
  • memcpy(&valip.sin_addr.s_addr, ip_resolue->h_addr_list[compteur], ip_resolue->h_length);
  • printf("Votre ip vaut : %s \n",inet_ntoa(valip.sin_addr));
  • }
  • }
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#include <stdio.h>
#include <stdlib.h>

void main()
{
   WSADATA wsaData;
   char host[100];
   HOSTENT* ip_resolue;
   SOCKADDR_IN valip;
   int compteur;

   // Initialisation des sockets windows.
   WSAStartup(MAKEWORD(2, 0), &wsaData);

   // Recuperation du nom d'hote de votre ordi.
   gethostname(host,sizeof(host)); 

   ip_resolue = gethostbyname(host);

   if (ip_resolue != NULL) // si c'est NULL sans doute n'est on pas connecté.
   {
      // recuperation du dernier entier 'compteur' tel que ip_resolue->h_addr_list[compteur] n'est pas null
      for (compteur = 0; ip_resolue->h_addr_list[compteur+1] != NULL; compteur++) {}

      memcpy(&valip.sin_addr.s_addr, ip_resolue->h_addr_list[compteur], ip_resolue->h_length);

      printf("Votre ip vaut : %s \n",inet_ntoa(valip.sin_addr));
   }
}

Conclusion

si chez des gens ca ne marche pas, dites quel est votre OS, d'ou vous etes connectés et votre idée sur le fait que chez vous ca ne donne pas ce qu'il faut.
Merci ;)
  • signaler à un administrateur
    Commentaire de aardman le 01/02/2004 19:01:30

    Salut,
    Avec ca tu trouve l'ip locale, mais pas l'ip internet.

  • signaler à un administrateur
    Commentaire de cosmobob le 01/02/2004 19:07:23

    ben moi avec ca jtrouve mon adresse internet. mon adresse locale elle est dans ip_resolue-&gt;h_addr_list[0], et mon adresse internet dans ip_resolue-&gt;h_addr_list[1] (pour moi). dc voila jpense ke l'adresse internet c'est bien le dernier ip_resolue-&gt;h_addr_list[i] non null, ce que calcule le code. l'as tu essayé avant de dire ca?

  • signaler à un administrateur
    Commentaire de alain34270 le 01/02/2004 20:17:30

    ce code est certes très propre, mais comment détermines-tu quelle est l'adresse ip de la connexion internet ?

    alain

  • signaler à un administrateur
    Commentaire de aardman le 01/02/2004 22:01:31

    Salut,
    Bien sur que j'ai testé, ton code m'affiche mon ip locale, rien de plus.

  • signaler à un administrateur
    Commentaire de zinotron le 05/03/2004 15:26:26

    bah moi, je cherche un ex de ca (paske c tres facilmement modifiable) et je trouve enfin, alors merci.
    ++
    ps: merci beaucoup

  • signaler à un administrateur
    Commentaire de detlev le 07/08/2004 15:48:05

    salut,
    comment fait-on pour linker ws2_32.lib dans dev-CPP ?
    merci d'avance.

  • signaler à un administrateur
    Commentaire de filipuce le 25/08/2004 22:05:47

    pour linker dans dev cpp il faut aller chercher "project options" dans un menu (je ne sais plus lequel.

    apres dans la fenetre qui apparait tu as deux line edit en bas tu prends la derniere et tu met le nom de ta librairie precedee de "-l"

    ex :  -lws2_32 pour ta lib

    pour cela il faut creer un projet sinon le menu est grisé
    autrement tu doit pouvoir passer en compilant en ligne (g jamais essayé car avant de passer sous linux je ne savais rien faire d'autre que F9 ;) )

    voila tcho

  • signaler à un administrateur
    Commentaire de LordBob le 10/02/2005 00:13:45

    moi je viens de tester (je sais longtemps après) et ca me donne bien mon adresse internet !!!

  • signaler à un administrateur
    Commentaire de soldier8514 le 08/05/2005 15:32:40

    ça marche tres bien ici ( modem rtc ) _ ça me donne l'adresse ip connecté et l'adresse de loopback quand je suis déconnecté  

    LordBob , quel est ton type de connexion stp ( j'mré savoir si ça marche sous adsl )

  • signaler à un administrateur
    Commentaire de soldier8514 le 08/05/2005 15:35:42

    j'ai failli oublier : 3500 / 10 ;) ++

  • signaler à un administrateur
    Commentaire de LordBob le 08/05/2005 23:05:15

    moi je suis sous adsl

  • signaler à un administrateur
    Commentaire de soldier8514 le 08/05/2005 23:58:53

    parfait merci à toi pour linfo ;)

  • signaler à un administrateur
    Commentaire de cosmobob le 22/06/2005 10:55:02

    en fait si t'es connecté derriere un routeur ou via un proxy, du point de vue de ton PC, tu ne peux pas connaitre l'adresse IP depuis laquelle tu es vu depuis internet, a moins justement d'aller sur internet, et de demander a quelqu'un de te donner ton adresse IP (c'est une illustration, un programme qui fait ca devrait par ex: se connecter sur un site qui affiche l'ip des visiteurs)

    cette source marche tres bien dans tous les autres cas.

  • signaler à un administrateur
    Commentaire de W@$h! le 25/08/2005 17:03:42

    nickel! C'est clair comme code, et ca marche (j'ai bien mon ip internet)

  • signaler à un administrateur
    Commentaire de Clem le 07/10/2005 21:28:42

    le fait que ça marche chez certains, et pas chez d'autres (pas testé ce code la, mais il donnera l'ip locale c'est sur, à part 127.0.0.1 j'en ai pas d'autre que l'api me donnerais ;), c'est bien comme comsobob l'explique, en fait il faudrait juste modifier un peu le code, et au lieu d'une simple boucle for qui prenne la dernière ip donnée par les api, il faudrait inclure un test de l'ip, pour savoir si elle est réseau ou pas ( cf: http://www.commentcamarche.net/internet/ip.php3#reservees )
    le seul problème c'est que ce code n'est valade que pour chercher l'ip réseau, l'ip internet ne marchera jamais dans le cas de connexions routeurs, il faudrait donc en plus inclure un test de présence routeur, puis de lui demander l'ip internet le tout par protocole upnp...qui a le courage ? xD

  • signaler à un administrateur
    Commentaire de cosmobob le 21/10/2005 11:13:47

    salut,
    le pb c'est que ya pas de norme pour tester la presence d'un routeur... en plus tu peux etre derriere un proxy et l'ip de celui ci ne sera pas ton ip internet.

  • signaler à un administrateur
    Commentaire de wizard512 le 27/12/2006 00:34:43

    Bonne source,
    Code clair, symple et efficace pas de superflue.
    Tous l'essentiel a été dis, et explication clair.

    J'ai eu besoin d'un bout de code qui pourrait m'indiquer l'adresse ip,
    suite a une quelque petites modification, j'ai formulé une fonction
    qui me retourne le résultat de la consultation du serveur DNS,
    donc l'adresse ip....

    Ma note sur cette source : 10 / 10

    Encore Bravo, pour ce code maléable, symple et efficace.
    Et surtout accéssible a tous... ( Débutant, intermédiaire, confirmé )

  • signaler à un administrateur
    Commentaire de termi111 le 15/11/2007 14:40:44

    salut

    j'ai essayer de le faire marcher et j'arrive pas je suis sous Dev-C++

      [Linker error] undefined reference to `WSAStartup@8'
      [Linker error] undefined reference to `gethostname@8'
      [Linker error] undefined reference to `gethostbyname@4'
      [Linker error] undefined reference to `inet_ntoa@4'
    C:\main.c ld returned 1 exit status
    C:\Makefile.win [Build Error]  [Projet1.dll] Error 1

    J'ai deja fait quelque programme simple, mais la il y a plein de truc que je comprnd pas donc impossible de débuger.

    je veux juste que ca marche, pour pouvoir récupérer mon adresse.

  • signaler à un administrateur
    Commentaire de termi111 le 15/11/2007 22:45:54

    probleme resolu

    outil => option du compilateur => compilateur => ajouter des commentaire lors de l'appel des liens (à cocher) => ecrire -lws2_32

Ajouter un commentaire

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€
creation de marque et ...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS