[PHP]Test Adresse IP valide
Résolu/Fermé
chot
Messages postés
21
Date d'inscription
vendredi 14 avril 2006
Statut
Membre
Dernière intervention
12 juin 2006
-
26 avril 2006 à 17:50
konlorice - 26 juin 2013 à 19:29
konlorice - 26 juin 2013 à 19:29
A voir également:
- [PHP]Test Adresse IP valide
- Ethernet n'a pas de configuration ip valide - Guide
- Test performance pc - Guide
- Darkino nouvelle adresse - Guide
- Rechercher ou entrer l'adresse - Guide
- Comment connaître son adresse ip - Guide
7 réponses
Bon bah voilà.... Chose promis, chose dû :
Testé en vitesse. 2 ipv4 et 2 ipv6 fonctionnels & 2 ipv4 et 2 ipv6 non valides.
Donc voilà multiple vérification pour chaque ip. Il est possible d'extraire
chaque partie indépendamment l'une de l'autre suivant le niveau que vous souhaitez... (Plus nous avançons dans le code et plus la vérification est fiable).
if(isset($_POST['cible'])) { $_POST['cible'] = htmlentities($_POST['cible']); /* test des ip v4 ou v6 */ $str = strlen($_POST['cible']); if($str <= "15" && $str >= "4") { /* ipv4 preuve 1 */ $nbrOcc = substr_count($_POST['cible'], '.'); if($nbrOcc = "3") { /* ipv4 preuve 2 */ $testIp = explode('.',$_POST['cible']); $i=0; foreach($testIp as $num) { if($num < 0 && $num > 255) { $i++; } if($i == 0 ) { /* preuve 3, adresse ipv4 valide :) */ }else{ /* adresse ipv4 invalide :( */ echo 'ipv4 invalide'; } } if(preg_match( "/^((?:25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9]).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])$/m",$_POST['cible']) > 0) { /* preuve 4... après ça, si vous voulez plus je ne vois pas x) */ echo 'ipv4 valide'; } else { echo 'ipv4 invalide'; } } else { /* ce n'est pas une adresse ip valide */ echo 'ipv4 invalide !!!'; } } else { echo 'ipv4 invalide<br/>'; } if ($str <= "39" && $str >= "15") { /* ipv6 preuve 1 */ $nbrOcc = substr_count($_POST['cible'], ':'); if($nbrOcc >= "7") { /*ipv6 preuve 2 */ if(preg_match("/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/",$_POST['cible'])) { /* preuve 3, adresse ipv6 valide :) */ echo 'ipv6 valide a'; }else{ /* adresse ipv6 invalide :( */ echo 'ipv6 invalide a '; } } else { echo '$nbrOcc n est pas supperieur ou = à 7'; } } else { /* ce n'est pas une adresse ip valide */ echo 'ipv6 invalide!'; } }
Testé en vitesse. 2 ipv4 et 2 ipv6 fonctionnels & 2 ipv4 et 2 ipv6 non valides.
Donc voilà multiple vérification pour chaque ip. Il est possible d'extraire
chaque partie indépendamment l'une de l'autre suivant le niveau que vous souhaitez... (Plus nous avançons dans le code et plus la vérification est fiable).
Bonjour,
// Ca reprend l'adresse ip du client
$ip=$_SERVER["REMOTE_ADDR"];
// Sinon si le client saisie son ip avec des separateurs comme des points :
$ip=explode(".",$_REQUEST['ip']);
$controle=0;
foreach ($ip as $element) {
if ($element<0 && $element>255) $controle++;
}
if ($controle==0) echo "ip : ".$_REQUEST['ip']." valide";
else echo "ip saisie invalide";
// Ca reprend l'adresse ip du client
$ip=$_SERVER["REMOTE_ADDR"];
// Sinon si le client saisie son ip avec des separateurs comme des points :
$ip=explode(".",$_REQUEST['ip']);
$controle=0;
foreach ($ip as $element) {
if ($element<0 && $element>255) $controle++;
}
if ($controle==0) echo "ip : ".$_REQUEST['ip']." valide";
else echo "ip saisie invalide";
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
27 avril 2006 à 08:14
27 avril 2006 à 08:14
Salut,
D'abord tu mets chaque élément de l'ip dans un tableau (séparé par un point), puis tu vérifies que chaque élément est un nombre valide:
D'abord tu mets chaque élément de l'ip dans un tableau (séparé par un point), puis tu vérifies que chaque élément est un nombre valide:
$ip=explode($ip, '.'); if(sizeof($ip)==4 ){ foreach ($ip as $element) { if ( $element <256 && $element > 0) { //.............. } } }
Hello,
As-tu pensé à une adresse comme par exemple 198.162.0.25 !
Il y a des conditions à rajouter...
A+
As-tu pensé à une adresse comme par exemple 198.162.0.25 !
Il y a des conditions à rajouter...
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
spidag, tu t'es trompé dans tes signes.
je conseil de mettre aussi if controle == 4 car si 3 groupe sur 4 sont valide, sera déclaré valide. valable uniquement pour ipv4.
<?php
$ip_explode = explode(".","193.252.19.3");
$nb_valide = 0;
foreach ($ip_explode as $element) {
if ($element>0 && $element<255){
$nb_valide++;
}
}
if ($nb_valide==4){
echo "<br/>ip saisie valide<br/>";
} else {
echo "<br/>ip saisie invalide<br/>";
}
?>
cordialement
je conseil de mettre aussi if controle == 4 car si 3 groupe sur 4 sont valide, sera déclaré valide. valable uniquement pour ipv4.
<?php
$ip_explode = explode(".","193.252.19.3");
$nb_valide = 0;
foreach ($ip_explode as $element) {
if ($element>0 && $element<255){
$nb_valide++;
}
}
if ($nb_valide==4){
echo "<br/>ip saisie valide<br/>";
} else {
echo "<br/>ip saisie invalide<br/>";
}
?>
cordialement
Avec l'arrivé de l'ipv6 c'est à revoir.
Si j'ai le temps de développer la chose avec les deux options je vous enverrais ça.
Si j'ai le temps de développer la chose avec les deux options je vous enverrais ça.