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
10
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
10
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
10
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