Verifier la validité d'une Adresse IP

Zerocool552 Messages postés 4 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 9 septembre 2005 - 12 mars 2004 à 09:04
hilairenicolas Messages postés 398 Date d'inscription jeudi 30 octobre 2003 Statut Membre Dernière intervention 15 juin 2007 - 12 mars 2004 à 11:35
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
A voir également:

7 réponses

hilairenicolas Messages postés 398 Date d'inscription jeudi 30 octobre 2003 Statut Membre Dernière intervention 15 juin 2007 2
12 mars 2004 à 11:35
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
1
hilairenicolas Messages postés 398 Date d'inscription jeudi 30 octobre 2003 Statut Membre Dernière intervention 15 juin 2007 2
12 mars 2004 à 09:44
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;
}

0
hilairenicolas Messages postés 398 Date d'inscription jeudi 30 octobre 2003 Statut Membre Dernière intervention 15 juin 2007 2
12 mars 2004 à 09:52
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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 mars 2004 à 10:31
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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hilairenicolas Messages postés 398 Date d'inscription jeudi 30 octobre 2003 Statut Membre Dernière intervention 15 juin 2007 2
12 mars 2004 à 11:02
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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 mars 2004 à 11:14
ah oui je pensais que c'était l'autre c++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 mars 2004 à 11:18
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
0
Rejoignez-nous