[Ex] Générer une regexp pour un intervalle d'adresses IP

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

[Ex] Générer une regexp pour un intervalle d'adresses IP

#1

Message par ZDS »

Bonjour !

Qui n'a jamais utilisé d'expressions régulières pour vérifier la bonne cohérence d'une chaine de caractères?

C'est super pratique de voir que si une adresse ip ne respecte pas le format "^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$", ça ne sera pas une vraie ip (4 paquets de 3 chiffres maximum séparés par des "."), mais ce modèle de regexp ne suffit pas.
On peut toujours affiner la chaine en disant que l'adresse IP doit respecter le format "^(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])$", on restreint donc les paquets de chiffres à 255 maximum, c'est beaucoup mieux.

Mais comment vérifier qu'une adresse IP fait partie du bon réseau "aaa.bbb.ccc.ddd/xx" ? générer la regexp qui vérifiera ça est plutôt compliqué...

Je vous propose donc un script dont le but est de créer cette regexp, qui permettra de vérifier qu'une adresse IP matche bien le réseau voulu.

Exemple 1 :
- J'ai un réseau en 192.168.194.0/24, les adresses sont donc du type 192.168.194.XXX
=> Regexp obtenue : "^192\.168\.194\.(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])$"

Exemple 2 :
- J'ai un réseau en 192.168.194.0/22 (équivalent à 192.168.192.0/22), les adresses sont donc du type 192.168.{192,193,194,195}.XXX
=> Regexp obtenue : "^192\.168\.19[2-5]\.(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])$"

Exemple 3 :
- J'ai un réseau en 192.168.128.0/18, les adresses sont donc du type 192.168.{128-191}.XXX
=> Regexp obtenue : "^192\.168\.(12[8-9]|1[3-8][0-9]|19[0-1])\.(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])$"

Je vous fournis donc le script suivant à titre d'exemple, il peut très certainement être amélioré, mais il fonctionne plutôt bien.
IPRangeRegexp.au3
Script (par ZDS)
(6.33 Kio) Téléchargé 240 fois
A bientôt!
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [Ex] Générer une regexp pour un intervalle d'adresses IP

#2

Message par sksbir »

L'approche est intéressante, et permettrait certainement d'améliorer le code des fonctions proposées ici:
http://www.autoitscript.com/forum/topic ... entry51444

archrival y propose en effet une fonction _Subnet et surtout _SameSub .

En tout cas, on sent que tu es à fond dans les expressions régulières. :)
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [Ex] Générer une regexp pour un intervalle d'adresses IP

#3

Message par ZDS »

CHALLENGE ...Image... ACCEPTED !
Je vais tenter de faire ça dans le weekend, ca pourrait servir comme petit outil pour n'importe quel langage :)
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Répondre