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

Delphi Discussion :

Fonction pour adresse IP


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Fonction pour adresse IP
    Bonjour,

    Est-ce que qulqu'un aurait une fonction pour savoir si une adresse IP est incluse dans un réseau.

    Ex: Savoir si 10.0.1.65 est inclue dans 10.0.1.32 mask 255.255.255.248

    Merci.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Voici ce que j'utilise:
    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
     
    //==============================================================================
    //=== Test si une adresse IP est dans le même reseau
    //=== USES: Winsock
    Function IPSameNetwork(IpLocal: String; IpMask: String; IpToTest: String): boolean;
    Var
      ul_IpLocal: u_long;
      ul_IpToTest: u_long;
      ul_NetMask: u_long;
    Begin
      result := False;
      //== convertie l'adresse IP en integer ==
      ul_IpLocal := ntohl(inet_addr(PChar(IpLocal)));
      ul_IpToTest := ntohl(inet_addr(PChar(IpToTest)));
      ul_NetMask := ntohl(inet_addr(PChar(IpMask)));
      If (ul_IPLocal And ul_NetMask) = (ul_IpToTest And ul_NetMask) Then result := TRUE;
    End;
    L'idée est de masquer les 2 adresses IP avec le masque réseau...
    (d'où le nom "subnet mask")
    alors si on obtien le même résultat... on est dans le même réseau!

    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
     
    //=== Exemple d'appèle ==
    Procedure TfrmMain.Button2Click(Sender: TObject);
    Begin
      If IPSameNetwork('10.0.1.33', '255.255.255.248', '10.0.1.65') Then
      Begin
        // les adresses IP sont dans le même Réseau
        Button2.Caption := 'Same Network!'
      End
      Else
      Begin
        // Les adresses IP NE sont PAS dans le même réseau!
        Button2.Caption := 'Different Network!'
      End;
    End;
    J'ignore si il existe quelque de mieux?
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    Citation Slam666:
    Savoir si 10.0.1.65 est inclue dans 10.0.1.32 mask 255.255.255.248
    Le masque de sous-réseaux n'est il pas plutôt 255.255.255.0 ?

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    un masque 255.255.255.248 est valide...

    il représente un sous réseau avec 6 adresse IP valide.

    On voit particulièrement souvent ce genre de mask
    pour des adresse IP fix sur internet attribué à une petite entreprise...
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    Oui Eric mais dans ce cas ton test (IPSameNetwork('10.0.1.33', '255.255.255.248', '10.0.1.65') va planter, non?
    Particulierement cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (ul_IPLocal And ul_NetMask)=(ul_IpToTest And ul_NetMask) Then result := TRUE;

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Citation Envoyé par Fabrice ROUXEL 1
    Oui Eric mais dans ce cas ton test (IPSameNetwork('10.0.1.33', '255.255.255.248', '10.0.1.65') va planter, non?
    Effectivement...avec ce masque, 10.0.1.65 n'est pas dans le même réseaux
    que 10.0.1.33

    seule les adresses suivantes appartiennent au même reseau que 10.0.1.33
    10.0.1.34
    10.0.1.35
    10.0.1.36
    10.0.1.37
    10.0.1.38

    Citation Envoyé par slam666
    Savoir si 10.0.1.65 est inclue dans 10.0.1.32 mask 255.255.255.248
    Alors la réponse est non, et la fonction retourne False. Alors tout va bien?
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    on peut ajouter 10.0.1.39
    J'ai plutôt l'impression qu'il attendait TRUE, c'est pourquoi j'insiste sur la définition du masque.

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Citation Envoyé par Fabrice ROUXEL 1
    on peut ajouter 10.0.1.39
    humm... pour le broadcast seulement...mais effectivement tu as raison.

    La fonction retourne aussi TRUE pour 10.0.1.32... qui n'est
    pourtant pas une adresse valide avec le masque....

    Faut s'avoir ce qu'on fait finalement...

    je devrais peut-être modifier la fonction?
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

Discussions similaires

  1. fonction pour valider une adresse ip
    Par charlie_p07 dans le forum Requêtes
    Réponses: 4
    Dernier message: 31/10/2008, 14h52
  2. Réponses: 5
    Dernier message: 29/04/2008, 14h30
  3. Réponses: 6
    Dernier message: 21/04/2008, 18h49
  4. Détourner une fonction pour copier un fichier en mémoire
    Par Rodrigue dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/11/2003, 08h29
  5. Fonction pour récuperer mon adresse IP
    Par néo333 dans le forum Web & réseau
    Réponses: 11
    Dernier message: 01/11/2003, 17h35

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