OVH Cloud OVH Cloud

Test de chaine

2 réponses
Avatar
Alni
Bonjour,

Je dois d'abord préciser que je n'y connais absolument rien en VBS,
habituellement je code en C++.

Voilà, j'ai récupéré un script VBS qui permet d'intégrer les blacklists
de Squid dans dans un serveur ISA.

Celui-ci fonctionne pas trop mal à un détail près.

Les listes fournies sont constituées de noms de sites, de noms de
domaines, d'adresses IP.

Le problème c'est qu'il faudrait ajouter "*" devant les noms de domaines
pour que l'ISA prenne en compte les www.domain, ftp.domain tsétéra. Mais
pas devant les adresses IP.

Voici une partie du script en question :
----------------
configname = config.readline
s = left(configname, 1)
if (s<>"#") and (s<>"") then
l = l + 1
#Ligne que j'ai ajoutée qui bien sur ne fonctionne pas
# dès qu'il y a une adresse IP
configname = "*" & configname
Set Destination = DestinationSet.Add(configname)
end if
-----------------

En fait, ça ne fonctionne pas quand la ligne contient une adresse IP
Comment puis-je tester si la variable configname contient une adresse IP
avant d'ajouter mon "*".

Il me faudrait une fonction genre IsIPAddress(configname) qui renvoie 0
ou 1 de façon à ce que je fasse :
if IsIPAddress(configname) = 0 then
configname = "*" & configname
end if

Merci

2 réponses

Avatar
Jean
Bonjour,

Je dois d'abord préciser que je n'y connais absolument rien en VBS,
habituellement je code en C++.


Vous seriez plus à l'aise en JScript AMHA.

Comment puis-je tester si la variable configname contient une adresse IP
avant d'ajouter mon "*".


A l'aide d'une expression régulière :

"Introduction to Regular Expressions"
http://msdn.microsoft.com/library/en-us/script56/html/reconIntroductionToRegularExpressions.asp

"Regular Expression (RegExp) Object"
http://msdn.microsoft.com/library/en-us/script56/html/vsobjRegExp.asp (exemple inclu)

Ces documents sont disponibles en français dans la doc fr téléchargeable (cf http://automation.eu.tf/ws56reffr.exe pour le lien)

En voici une que l'on trouve sur le Web (et qui valide l'IP) par exemple ... :

"(([01]?dd?|2[0-4]d|25[0-5]).){3}([01]?dd?|2[0-4]d|25[0-5])"

Pour tester, en reprenant l'exemple fourni dans la doc, ça donnerait p ex. :

'---8<---
Function RegExpTest(patrn, strng)
Dim regEx, Match, Matches ' Create variable.
Set regEx = New RegExp ' Create a regular expression.
regEx.Pattern = patrn ' Set pattern.
regEx.IgnoreCase = True ' Set case insensitivity.
regEx.Global = True ' Set global applicability.
Set Matches = regEx.Execute(strng) ' Execute search.
For Each Match in Matches ' Iterate Matches collection.
RetStr = RetStr & "Match found at position "
RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
RetStr = RetStr & Match.Value & "'." & vbCRLF
Next
RegExpTest = RetStr
End Function
MsgBox(RegExpTest("(([01]?dd?|2[0-4]d|25[0-5]).){3}([01]?dd?|2[0-4]d|25[0-5])", "207.46.248.16"))
'---8<---


Amicalement,

Jean - JMST
Belgium

"Alni" a écrit dans le message de news:
Bonjour,

Je dois d'abord préciser que je n'y connais absolument rien en VBS,
habituellement je code en C++.

Voilà, j'ai récupéré un script VBS qui permet d'intégrer les blacklists
de Squid dans dans un serveur ISA.

Celui-ci fonctionne pas trop mal à un détail près.

Les listes fournies sont constituées de noms de sites, de noms de
domaines, d'adresses IP.

Le problème c'est qu'il faudrait ajouter "*" devant les noms de domaines
pour que l'ISA prenne en compte les www.domain, ftp.domain tsétéra. Mais
pas devant les adresses IP.

Voici une partie du script en question :
----------------
configname = config.readline
s = left(configname, 1)
if (s<>"#") and (s<>"") then
l = l + 1
#Ligne que j'ai ajoutée qui bien sur ne fonctionne pas
# dès qu'il y a une adresse IP
configname = "*" & configname
Set Destination = DestinationSet.Add(configname)
end if
-----------------

En fait, ça ne fonctionne pas quand la ligne contient une adresse IP
Comment puis-je tester si la variable configname contient une adresse IP
avant d'ajouter mon "*".

Il me faudrait une fonction genre IsIPAddress(configname) qui renvoie 0
ou 1 de façon à ce que je fasse :
if IsIPAddress(configname) = 0 then
configname = "*" & configname
end if

Merci



Avatar
Alni
Bonjour,


Comment puis-je tester si la variable configname contient une
adresse IP avant d'ajouter mon "*".


A l'aide d'une expression régulière :

"Introduction to Regular Expressions"

http://msdn.microsoft.com/library/en-us/script56/html/reconIntroductionToRegularExpressions.asp


En voici une que l'on trouve sur le Web (et qui valide l'IP) par
exemple ... :

"(([01]?dd?|2[0-4]d|25[0-5]).){3}([01]?dd?|2[0-4]d|25[0-5])"

Pour tester, en reprenant l'exemple fourni dans la doc, ça donnerait
p ex. :

'---8<---
Function RegExpTest(patrn, strng)
Dim regEx, Match, Matches ' Create variable.
Set regEx = New RegExp ' Create a regular expression.
regEx.Pattern = patrn ' Set pattern.
regEx.IgnoreCase = True ' Set case insensitivity.
regEx.Global = True ' Set global applicability.
Set Matches = regEx.Execute(strng) ' Execute search.
For Each Match in Matches ' Iterate Matches collection.
RetStr = RetStr & "Match found at position "
RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
RetStr = RetStr & Match.Value & "'." & vbCRLF
Next
RegExpTest = RetStr
End Function

MsgBox(RegExpTest("(([01]?dd?|2[0-4]d|25[0-5]).){3}([01]?dd?|2[0-4

]d|25[0-5])",
"207.46.248.16")) '---8<---


Merci, je pense qu'en m'inspirant de ça je devrais m'en sortir :)