Verifier la validité d'une Adresse IP

Signaler
Messages postés
4
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
9 septembre 2005
-
Messages postés
398
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
15 juin 2007
-
bonjour

j'ai cette methode dans mon programme et j'aimerais verifier la validité des adresse IP saisies argAdresseIP1 et argAdresseIP2 avant de les ranger dans AdresseIP1 et AdresseIP2 (la verification de chaque octet de l'adresse pour savoir si il ne depasse pas 255 ou si il est inferieur a 0).

AdresseIP1 et AdresseIP2 sont des string.

bool GestionTrame::ConfigurerCapture(int argNbTrames,string argAdresseIP1,string argAdresseIP2)
{
NbTrames = argNbTrames;
//verif IP
AdresseIP1 = argAdresseIP1;
AdresseIP2 = argAdresseIP2;
return true;
}

merci d'avance pour vos reponses
@+
Zerocool552

7 réponses

Messages postés
398
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
15 juin 2007
2
Absolument ;
et tant qu'on y est, faudrait vérifier si c'est bien un format IPV4

bool validIp(char * ip)
{
char temp[10];
char *c=ip;
char *d;
int i=0;
while (*c!=0)
{
d=temp;
while (*c!='.' && *c)
{
if (*c<'0' || *c>'9')
return false;
*d=*c;
c++;
d++;
}
if (*c)
c++;
*d=0;
if (atoi(temp)>255 || atoi(temp)<0)
return false;
i++;
}
return (i==4);
}


char ip1[30] = "192.168.0.2";
char ip2[30] = "192.168.300.2";
char ip3[30] = "192.1a0.0.0";
char ip4[30] = "192.168.0.0.0";

validIp(ip1); // renvoie true
validIp(ip2); // renvoie false
validIp(ip3); // renvoie false
validIp(ip4); // renvoie false
Messages postés
398
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
15 juin 2007
2
Je ferais un truc vite fait comme ca, mais y a ptete une api qui le fait deja (je connais pas), on alors, vérifier par un ping si tu es connecté ...
a toi de voir

bool validIp(char * ip)
{
char temp[10];
char *c=ip;
char *d;
while (*c!=0)
{
d=temp;
while (*c!='.' && *c!=0)
{
*d=*c;
c++;
d++;
}
c++;
*d=0;
if (atoi(temp)>255 || atoi(temp)<0)
return false;
}
return true;
}

Messages postés
398
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
15 juin 2007
2
euh ...
je viens d'y réfléchir 2 secs, il faudrait rajouter une condition avant d'incrementer le pointeur c

faire genre :

if (*c!=0)
c++;


comme ca, ca évite de se retrouver par mégarde en dehors de la chaine
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
bah non puisuqe si tu est dans le while c'est bien que tu as déja *c != 0
Par allieurs while (*c!='.' && *c!=0) s'écrirait plutot while (*c!='.' && *c)
Messages postés
398
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
15 juin 2007
2
ouais, mais je parlais du c++; qui est juste avant le *d=0;
imaginons que tu sortes du premier while sur la condition que *c==0, alors, juste apres, tu fais un c++, donc pas bien ... :)

l'algo est peut-etre à revoir
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
ah oui je pensais que c'était l'autre c++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
il faudriat aussi vérifier que les caractères sont des chiffres car il me semble que atoi("a") renvoie 0 et donc sera considéré comme un IP valide