Adresse ip internet

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 024 fois - Téléchargée 23 fois

Contenu du snippet

Fonction indiquant l'adresse IP de connexion à internet.

J'ai écrit cette fonction car je n'arrive pas à trouver un autre moyen simple de la déterminer.

J'utilise ipconfig que je redirige dans un fichier texte, et je recherche l'adresse IP associée au masque de sous-réseau 255.255.255.255.
Je considère alors que j'ai trouvé l'adresse IP de connexion à internet.

Je ne sais pas si cette méthode est correcte. Si elle ne l'est pas, je voudrais bien qu'on me le dise. Si elle est correcte, et si elle peut dépanner...

Source / Exemple :


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int GetIpInternet(char *buffer)
/*buffer réserve un nombre d'octets suffisant pour contenir la chaine représentant une adresse IP */
{
char	nomFichier[_MAX_PATH];
char	bufTravail[_MAX_PATH];
char	*contenu=NULL;
FILE	*fich;
long	taille;
long	lu;
long	idxContenu;
char	bfLigne[128];
long	idxLigne;
char	adresseIP[16];
char	*ptr;

strcpy(nomFichier,"h:\\FichGetIpConfig.txt");
sprintf(bufTravail,"ipconfig > %s",nomFichier);
remove(nomFichier);
system(bufTravail);

if ((fich = fopen(nomFichier,"r"))==NULL)
{
return 1;
}
fseek(fich,0,SEEK_END);
taille = ftell(fich);
fseek(fich,0,SEEK_SET);
if((contenu = new char[taille])==NULL)
{
fclose(fich);
remove(nomFichier);
return 2;
}
lu = fread(contenu,1,taille,fich);
fclose(fich);
remove(nomFichier);

//Parcours du contenu
idxContenu=0;
strcpy(adresseIP,"");
strcpy(buffer,"");
while (idxContenu<lu && strlen(buffer)==0)
{
//Extraction d'une ligne
//..Saut des caractères de saut de ligne
while (idxContenu<lu &&
(contenu[idxContenu]=='\n' || contenu[idxContenu]=='\r'))
{
idxContenu++;
}
if (idxContenu<lu)
{
//..extraction d'une ligne
idxLigne=0;
while (idxContenu<lu &&
(contenu[idxContenu]!='\n' && contenu[idxContenu]!='\r'))
{
bfLigne[idxLigne++]=contenu[idxContenu++];
}
bfLigne[idxLigne]='\0';

if (strlen(adresseIP)==0)
{
//..Test pour savoir si c'est une ligne d'adresse IP
if (strstr(bfLigne,"Adresse IP")!=NULL)
{
ptr = strstr(bfLigne," : ");
if (ptr!=NULL)
{
strcpy(adresseIP,ptr+3);
}
}
}
else
{
//..Test pour savoir si c'est une ligne de masquage réseau
if (strstr(bfLigne,"Masque de sous-réseau")!=NULL)
{
ptr = strstr(bfLigne," : ");
if (ptr!=NULL)
{
if (strcmp(ptr+3,"255.255.255.255")==0)
{
strcpy(buffer,adresseIP);
}
}
}
strcpy(adresseIP,"");
}
}
}
delete contenu;
return 0;
}

int main(int argc, char* argv[])
{
char	ip[16];
if(GetIpInternet(ip)!=0)
{
printf("Erreur\n");
}
else
{
if (strlen(ip)==0)
{
printf("l'ordinateur n'est pas connecte a internet\n");
}
else
{
printf("l'adresse ip de la connexion a internet est : %s\n",ip);
}
}

return 0;
}

Conclusion :


Cette fonction marche sous XP et sous Me en francais (je pense que pour les versions étrangères, il faut traduire les chaines). je n'ai pas pu voir la sortie que produit ipconfig sur les autres systèmes (98,2000...).
Si c'est différent, et si on peut me le signaler, merci d'avance !

A voir également

Ajouter un commentaire

Commentaires

cs_alain34270
Messages postés
85
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
18 septembre 2005
-
Je vois que la rubrique est "système" - je pensais avoir cliqué sur "réseaux/internet" - désolé !
gasy72
Messages postés
23
Date d'inscription
jeudi 2 mars 2006
Statut
Membre
Dernière intervention
11 août 2006
-
j'obtient beaucoup d'erreur du genre
8 C:\Dev-Cpp\Untitled4.cpp `_MAX_PATH' undeclared (first use this function)

(Each undeclared identifier is reported only once for each function it appears in.)

20 C:\Dev-Cpp\Untitled4.cpp `nomFichier' undeclared (first use this function)
21 C:\Dev-Cpp\Untitled4.cpp `bufTravail' undeclared (first use this function)

avec Dev c++ ou est le blem??

j'ai vraiment besoin de ce code merci bien de m'aider svp

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.