Adresse ip internet

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

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.