IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Conversion d'une adresse IP en un long


Sujet :

VBScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 21
    Points : 12
    Points
    12
    Par défaut Conversion d'une adresse IP en un long
    Bonjour,
    je voudrais crér une fonction qui détermine si une chaine de charactères est bien une adresse IP et si oui, la converti en un Long, malheurreusement, j'ai des problèmes d'overflow pour une adresse du genre 193.191.242.1

    Voici le code développé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Function ValidIp(ByVal strIP As String, ByRef lgIP As Long) As Boolean
     
    Dim reg As New VBScript_RegExp_55.RegExp
    Dim regMatches As VBScript_RegExp_55.MatchCollection
    Dim regMatch As VBScript_RegExp_55.Match
     
     
    reg.Pattern = "^((25[0-5]|2[0-4]\d|1?\d?\d)\.){3}(25[0-5]|2[0-4]\d|1?\d?\d)$"
    If reg.Test(strIP) Then
        ValidIp = True
        reg.Global = True
        reg.Pattern = "((25[0-5]|2[0-4]\d|1?\d?\d))"
        Set regMatches = reg.Execute(strIP)
        i = 3
        lgIP = 0
        For Each regMatch In regMatches
     
            lgIP = lgIP + CLng((CLng(regMatch.Value) * CLng(CLng(256) ^ i)))
            i = i - 1
     
        Next
    Else
        ValidIp = False
    End If
     
     
     
    Set reg = Nothing
     
    End Function
    QQn aurait-il une solution ?
    Rem : il s'agit d une macro VBA pour Excel.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Hello,
    Je procéderais d'une autre manière
    Split te permet d'isoler tes 4 nombres et d'obtenir un tableau de tes nombres
    - une vérif Ubound(letableau) = 4 te confirmerait la dimension de ton tableau,
    - une vérif sur le caractère numérique des éléments du tableau
    et enfin
    - une vérif sur la valeur (<=255)
    te permettraient de "suspecter" une adresse IP

    Quant à la conversion en long de ton adresse IP, ne veux-tu pas dire en Hexa ?

    A+

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Merci pour ta reponse

    Ok pour la verifiaction, c,est en effet une autre manière de procéder.
    pour la conversion, je souhaite obtenir mon adresse IP en décimal, c'est pourquoi je pensais a un long

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    par exemple : 193.191.242.1 donne 3250582017
    193*256*256*256+191*256*256+242*256+1

  5. #5
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Cela se résume à un problème de bijection.

    Une adresse IP est codé sur 4 Octets.
    Un long est codé sur 4 Octets.

    Jusque là tout est OK, sauf qu'un long est signé (s'étend sur l'ensemble des positifs et négatifs). Donc la conversion d'une adresse IP en Long peut et doit donner des entiers négatifs. Si tu n'exploites pas l'ensemble des valeurs des Long, tu auras des dépassements de capacité.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Oui, je suis bien d accord avec toi et avait identifié le problème..
    malheuresuement, je n y ai pas trouvé de solution...

  7. #7
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Il faut séparer l'adresse IP en deux paquets :

    Le paquet positif. Proposition adresse IP >= 128.0.0.0
    Le paquet négatif. Proposition adresse IP < 128.0.0.0

    Convention d'écriture IP1.IP2.IP3.IP4

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Si IP1<128 Alors
        IPLong = -(IP1*128 *256 *256 + IP2*256 * 256 + IP3 *256 + IP4)
    Sinon
        IPLong = IP1*128 *256 *256 + IP2*256 * 256 + IP3 *256 + IP4
    End If
    Ca devrait fonctionner. A toi de traduire en VB. J'ai la flemme

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Un grand merci pour ces deux solutions, elles semblent toutes les deux fonctionner.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conversion de l'adresse d'une fonction
    Par neerylka dans le forum C++
    Réponses: 2
    Dernier message: 13/09/2007, 09h05
  2. Conversion String -> byte[] d'une adresse IP
    Par adn013 dans le forum Langage
    Réponses: 3
    Dernier message: 20/08/2007, 16h02
  3. Conversion d'une chaine de caractères en unsigned long
    Par radouane_as dans le forum Débuter
    Réponses: 2
    Dernier message: 15/08/2007, 19h21
  4. commande dos pour résoudre une adresse ip
    Par stephy dans le forum Développement
    Réponses: 2
    Dernier message: 17/12/2002, 14h04
  5. Comment récupérer une adresse MAC ?
    Par psau dans le forum Développement
    Réponses: 7
    Dernier message: 19/07/2002, 17h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo