Controle d'adresse IP sur VB

ASK_hommer Messages postés 7 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 24 juin 2004 - 17 juin 2004 à 09:26
ASK_hommer Messages postés 7 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 24 juin 2004 - 24 juin 2004 à 16:49
J'ai un chtit problème pour faire un controle sur une liste d'adresses IP que je reçois à partir d'un fichier texte, ce qui explique que mon controle se fasse à partir d'une chaine.
Bon j'ai pu voir la simplicité des codes en javascript pour créer un maque de saisie et comparer l'IP à ce masque, et je voulais savoir si y avait pas moyen de faire la meme chose en VB: créer un masque de saisie, mais pas à partir d'une MaskEditBox.
Mon code est super mega compliqué, mais il marche. Si un jour un gars veut l'utiliser, il rique de pas comprendre même si je met des commentaires de partout. Moi meme, j'ai du mal à me relire des fois !

Si quelqu'un veut quand meme voir mon source faut demander. Je ne l'affiche pas volontairement pour éviter de vous faire mal à ma tête, mais si vous tenez vraiment à le voir, je ne fournis pas les cachets d'aspirine avec !

hommer

12 réponses

cs_metos Messages postés 168 Date d'inscription vendredi 18 janvier 2002 Statut Membre Dernière intervention 19 octobre 2009
18 juin 2004 à 13:21
si j'ai bien compris t'as une jolie liste d'IP dans un fichier text et tu l'as sous forme d'une chaîne, et tu désire sortire les ip qui correspondent à un masque. genre IP : 192.168.0.6 et le masque : 192.168.x.x et dans ce cas l'IP se trouve dans le masque. j'ai compris juste ou je suis a coter? si c'est ca, ca me semble pas très compliquer.

redis moi et si jamais donne un exemple :)
0
ASK_hommer Messages postés 7 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 24 juin 2004
19 juin 2004 à 12:02
En fait je veux juste faire un controle de validité d'une adresse IP. mais mon code est très lourd:
Vérifier qu'il y a les 3 point ( simple ),et vérifier que les valeurs contenues dans les décimales pointées sont valides( simple ). mais pour isoler les valeurs entre les points c'est méga comliqué comme j'ai fais. Je voulais savoir si il existait pas un système pour faire comme en javascript: avec un masque, mais sans passer par une MaskEditBox évidemment.
Par contre, ne fais aucun controle sur le masque.

Merci
0
kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005
22 juin 2004 à 00:20
je te donne mon usine a gaz .....

A PAS PEUR !!!

function IsValidIp(ad as string) as boolean
dim p1 as lo,g
dim p2 as long
dim p3 as long
dim p4 as long

dim ad1 as string
dim ad2 as string
dim ad3 as string
dim ad4 as string

IsValidIP=true

p1=instr(1,ad,".")
p2=instr(p1+1,ad,".")
p3=instr(p2+1,ad,".")

if p1=0 or p2=0 or p3=0 or p1=p2 or p2=p3 or p1=p3 then
IsValidIp=false
else
ad1=left(ad,p1-1)
ad2 = mid(ad,p1+1,p2-p1-1)
ad3 = mid(ad,p2+1,p3-p2-1)
ad4 = mid(ad,p3+1,len(ad)-p3)

if isnumeric(ad1) = false then
isvalidip=false
elseif isnumeric(ad2) = false then
isvalidip=false
elseif isnumeric(ad3) = false then
isvalidip = false
elseif isnumeric(ad4) = false then
isvalidip=false
else
p1=val(ad1)
p2=val(ad2)
p3=val(ad3)
p4=val(ad4)

if p1<0 or p1>255 then
isvalidip=false
elseif p2<0 or p2>255 then
isvalidip=false
elseif p3<0 or p3>255 then
isvalidip=false
elseif p4<0 or p4>255 then
isvalidip=false
endif
endif
endif
end function
0
ASK_hommer Messages postés 7 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 24 juin 2004
22 juin 2004 à 08:29
je ne connaissais pas la fonction "mid" et je vois qu'elle m'aurais été vraiment utile, en tout cas ton code est carément plus simple que le mien( je l'ai compris en une seule lecture ^_^ ), d'ailleur je pense que je peux me permettre de remplacer mon code par le tien ?

je te poste le mien ( tu verra à quel point mon cerveau est en bordel pour créer une usine à gaz comme celle là, je peux presque envoyer des fusées sur mars, je me demande si elle pouront etre habitées ! ). ^_^

Private Function IpValid(IpAdress As String) As Boolean
'---- Vérif si présence de 3 "." et
' si les 4 octets ont des valeurs correcte

Dim Octet As String
Dim OctetGauche As String
Dim Curseur As Integer
Dim Compteur As Integer
Dim cpt As Integer
Dim CptPoint As Integer

IpValid = True

Curseur = 1
CptPoint = 0
Compteur = 0

If Not IsNumeric(Left(IpAdress, 1)) Then
IpValid = False
End If

'On compte le nombre de points Do While CptPoint <3 And IpValid True And Compteur < 4
Curseur = InStr(Curseur, IpAdress, ".") + 1
If Curseur <> 1 And Curseur > 2 Then
CptPoint = CptPoint + 1
'On prend toutes les valeurs jusqu'à celle qui nous interessents
OctetGauche = Left(IpAdress, Curseur - 2)
Else
'Sur les derniers octets de l'adresse, il n'y a pas de point, donc lors du test
'il faut prévoir ce cas, et on prend tout l'adresse.
OctetGauche = IpAdress
End If
cpt = 0
'On tronque les valeurs contenues des décimales pointées qui ne nous interessent pas
Do While cpt < CptPoint
OctetGauche = Right(OctetGauche, Len(OctetGauche) - InStr(1, OctetGauche, "."))
cpt = cpt + 1
Loop
If Not IsNumeric(OctetGauche) Then
IpValid = False
Else
If OctetGauche > 255 Or OctetGauche < 0 Then
IpValid = False
End If
End If
Compteur = Compteur + 1
Loop
If CptPoint < 3 Then
IpValid = False
End If

End Function

hommer ( ouf c'est fini ... lol )
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ASK_hommer Messages postés 7 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 24 juin 2004
22 juin 2004 à 08:30
erf c'est pire que je croyais, ça prend pas les tabulations !

désolé pour le mal de tête.

hommer
0
cs_metos Messages postés 168 Date d'inscription vendredi 18 janvier 2002 Statut Membre Dernière intervention 19 octobre 2009
22 juin 2004 à 19:33
'sort la place de la virgule et stocker la valeur dans pos
Dim pos as integer
pos = InStr(IP, "Chaine_caractère_recherchée")

cette fonction de resort la position de la première chaine de caractères. A la place de IP du mets la variable qui contien l'IP et ensuite Chaine_caractère_recherchée tu remplace dans ton cas par un point (.). comme ca tu sais a quel endroit se trouve le premier point. ensuite avec Mid tu peux sortir dans une variable l'IP en enlevant la première partie et tu recommence comme ca 4 fois. Et pour faire bien tu mets une boucle avec un compteur.

simple, rapide et efficace :)
0
ASK_hommer Messages postés 7 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 24 juin 2004
23 juin 2004 à 08:28
lol, c clair en tout cas c bien plus efficace que ma version avec des boucles pour enlever les valeur de gauche qui nous interesse pas !

merci

hommer
0
cs_metos Messages postés 168 Date d'inscription vendredi 18 janvier 2002 Statut Membre Dernière intervention 19 octobre 2009
23 juin 2004 à 09:17
de rien
0
kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005
23 juin 2004 à 23:08
pour info, au debut de la fonction, tu peux rajouter

p4=instr( 1 , ad , "," )

et

if p1=0 or p2=0 or ... or p4<>0 .....

car une IP du genre 125,2 . 100 . 100 . 100 serai reconnue valide : p1 = "125,2" ce qui est accepte comme nombre decimal par IsNumeric !! ( la virgule est le caracter de separation decimale et est consideree comme un caractere numerique par isnumeric)
0
ASK_hommer Messages postés 7 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 24 juin 2004
24 juin 2004 à 08:42
merci bien pour cette précision, mais j'avais ajouté une condition pour l'adresse soit fausse :
if p1 <> int(p1) then
Ipvalide = false
endif
...
...

En tout cas merci les gars, je ping à mort en ce moment ! ^_^

hommer
0
kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005
24 juin 2004 à 13:55
ouaip mais en faisant comme ca, tu dois tester p1, p2, p3, et p4.

Or avec la detection de la virgule, tu fais les 4 tests en 1 seule fois
0
ASK_hommer Messages postés 7 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 24 juin 2004
24 juin 2004 à 16:49
c'est pas faux, voir meme c'est vrai ! Je change ça tout de suite !

merci bien
0