[Func] Contrôle et extraction d'adresse IP

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

[Func] Contrôle et extraction d'adresse IP

#1

Message par jguinch »

Bonjour.
Voilà un petit moment que j'essaie de me mettre aux expressions régulières : c'est pas sans mal, mais y'a du progrès !
Donc un exercice que je m'étais donné était d'utiliser les "regex" pour contrôler la validité d'une adresse IP.
J'en ai profité pour faire une fonction qui permet d'extraire les adresses IP d'une chaîne de caractères (ça peut être utile, qui sait ?)

Voilà donc le code, avec un exemple pour chaque fonction.
En espérant que ça serve à quelqu'un...

Code : Tout sélectionner

#Include <Array.au3> ; Iniquement pour l'affichage du résultat, pas nécessaire pour les 2 fonctions

; Exemples --------------------------------------------------------------------------
Local $myIP = "192.168.1.10"
Local $myText = "Les adresses IP valides sont peuvent être : 192.168.1.1, 193.092.103.097, avec ou sans 0." & _
"Par contre les adresses telles que 192.168.001.1 ou 256.168.1.10 ne sont pas valides." & _
"Attention une adresse au format : 123.192.168.1.1 ne sera pas extraite."

               
If _IPv4_IsValide($myIP) Then MsgBox(0, "", $myIP & " est une adresse IP valide")


$res = _IPv4_Extract($myText)
 _ArrayDisplay($res, "Extraction")
; -----------------------------------------------------------------------------------

; iFlag = 0 : retourne 0 pour une chaine de type 192.168.001.001
;         1 : retourne 1 pour une chaine de type 192.168.001.001
Func _IPv4_IsValide($sIP, $iFlag = 0)
    Local $pattern = "(?:(?:(25[0-5] | 2[0-4]\d | 1\d{2} | [1-9]\d | \d)\.){3}(?1))"
    If $iFlag Then $pattern &= " | (?:(?:(25[0-5] | 2[0-4]\d | [0-1]\d{2} | 0\d{2})\.){3}(?2))"

    Return StringRegExp($sIP, "(?x)^" & $pattern & "$")

#CS     ; Patron avec sous-routine
    Local $pattern = _ 
    "(?x)" & _
    "(?(DEFINE)" & _
    "  (?<withoutzero>" & _
    "    25[0-5]  |  2[0-4]\d  |  1\d{2}  | [1-9]\d  |  \d  " & _
    "  )" & _
    ")" & _
    "(?(DEFINE)" & _
    "  (?<withzero>" & _
    "    25[0-5]  |  2[0-4]\d  |  [0-1]\d{2}  |  (00)\d  " & _
    "  )" & _
    ")" & _
    "^" & _
    "(((?&withoutzero)\.){3}(?&withoutzero)) | " & _
    "(((?&withzero)\.){3}(?&withzero)) " & _
    "$"
    Return StringRegExp($sIP, $pattern)
 #CE
EndFunc


Func _IPv4_Extract($sIP)
    $pattern = "(?x) (?<!\d|\d\.) ( (?:(?:  (?:(?:25[0-5]  |  2[0-4]\d  |  1\d{2}  | [1-9]\d  |  \d  )\.){3}   (?:25[0-5]  |  2[0-4]\d  |  1\d{2}  | [1-9]\d  |  \d  )  ) " & _
    " | " & _
    "(?:  (?:(?:25[0-5]  |  2[0-4]\d  |  [0-1]\d{2}  |  (00)\d  )\.){3}   (?:25[0-5]  |  2[0-4]\d  |  [0-1]\d{2}  |  (?:00)\d) )) )  (?!\d|\.\d)"

    Return StringRegExp($sIP, $pattern, 3)
EndFunc
 
Modifié en dernier par jguinch le mer. 04 sept. 2013 16:24, modifié 1 fois.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Func] Contrôle et extraction d'adresse IP

#2

Message par Tlem »

Bonsoir. Il me semble qu'il existe déjà sur le forum des motifs pour ce genre de travail. Le votre fonctionne pas mal mais pas tout le temps. ;)

Code : Tout sélectionner

Local $myText = "Une adresse IP du genre 192.168.1.100. fonctionne mais 192.168.1.100 et 192.168.1.100 met le bazar."
Et puis il existe d'autres façon d’écrire une adresse IP V4 mais surtout, aujourd'hui nous passons au fur et à mesure en IP V6. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [Func] Contrôle et extraction d'adresse IP

#3

Message par jchd »

Tu as un exemple bien différent en structure dans le dernier fichier posté dans ce fil. Vois vers la rubrique des conditionnelles, vers la fin.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [Func] Contrôle et extraction d'adresse IP

#4

Message par jguinch »

Merci Tlem d'avoir pris le temps de tester, je vais regarder ça :( . Je n'avais pas vraiment cherché de motif, en fait je voulais surtout le faire seul pour continuer un peu l'apprentissage des regex.
Sinon pour le format, vous dites qu'il existe d'autres façon d'écrire une adresse IPv4. Est-ce à ce format que vous faites allusion : 192.168.001.010 ?

@jchd : j'avais vu ce fil, mais pas encore regardé la doc. C'est celle que tu as rédigé ? Je m'y met.
A+


[Edit] J'ai regardé la partie "Conditional patterns", c'est effectivement pour propre (les subroutinse agissent un peu comme des variables)
J'ai édité mon premier post et modifié la fonction de test d'IP en utilisant les subroutines.
Par contre, je ne m'en sors pas avec l'extraction, j'ai du mal avec les parenthèses, ça me retourne des champs vides... Je postera un message dans l'aide générale si je ne m'en sors pas.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Func] Contrôle et extraction d'adresse IP

#5

Message par Tlem »

jguinch a écrit :Sinon pour le format, vous dites qu'il existe d'autres façon d'écrire une adresse IPv4. Est-ce à ce format que vous faites allusion : 192.168.001.010 ?
Je plaisantais. Effectivement, il existe d'autre notations, mais non utilisées dans ce contexte car spécifiques à une demande d'informations complémentaire ou non usitée.
► Afficher le texte
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre