Page 1 sur 1

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

Posté : jeu. 31 mars 2011 11:19
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é 256 fois
A bientôt!

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

Posté : jeu. 07 avr. 2011 14:47
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. :)

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

Posté : jeu. 07 avr. 2011 16:46
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 :)