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

Web & réseau Delphi Discussion :

Adresses IP : suis-je connecté sur le LAN de ma BDD ?


Sujet :

Web & réseau Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 569
    Billets dans le blog
    65
    Par défaut Adresses IP : suis-je connecté sur le LAN de ma BDD ?
    Mon objectif (D7) : être sûr que le poste est connecté sur le même réseau que le poste hébergeant la Base de Données ! L'adresse de ce dernier étant (bien entendu) connue .

    Voilà comment je m'en sors , cependant il me reste 2 questions ainsi qu'une remarque
    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
    31
    32
    33
    34
    35
    36
     
    unit IPUnit;
     
    interface
    uses  IdStack;
     
    function isDBinLAN(DBIP : String): Boolean;
    function GetIp : String;
     
    implementation
     
    function isDBinLAN(DBIP : String): boolean;
    var LDBIp,LmyIP,Mask : LongInt;
        myIP : String;
    begin
     with TIdStack.CreateStack do
      begin
       myIP:=LocalAddress;
       TranslateStringToTInAddr(ResolveHost('255.255.255.0'),mask);
       TranslateStringToTInAddr(ResolveHost(DBIP),LDBip);
       TranslateStringToTInAddr(myIP,LmyIP);
       Result:=((LDBIP AND mask)=(LmyIP AND Mask)) OR (ResolveHost(DBIP)=ResolveHost('localhost'));
       Free;
      end;
    end;
     
    function GetIP : String;
    begin
      with TIdStack.CreateStack do
      begin
        Result := LocalAddress;
        Free;
      end;
    end;
     
    end.
    Questions :
    -la variable Mask , masque de sous-réseau j'ai bien sur utilisé le plus 'classique' mais est-ce une bonne idée ? je ne suis pas une pointure en IP est-ce que cela fonctionnerai si j'ai 2 sous-réseau ? il doit y avoir un moyen plus élégant que d'utiliser une constante '255.255.255.0' via formule mathématique que j'entrevoie , mais je sèche un peu .

    -C'est bien beau pour IPv4 mais que se passe t'il si IPv6 ?

    Remarque :
    Pour faire cette unité , j'ai pas mal cogité , lu les FAQs etc... ce qui m'amène à la FAQ Comment connaître son adresse IP ? le code pour les Delphi<D6 n'est pas faux mais renvoi uniquement la dernière adresse réseau (donc pas forcément celle recherchée)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      i := 0; 
      while pptr^[i]<>nil do 
      begin 
        result := StrPas(inet_ntoa(pptr^[i]^)); 
        Inc(i); 
      end;
    l'adresse IP d'un poste étant généralement la première
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        result := StrPas(inet_ntoa(pptr^[0]^));
    aurait peut être été plus juste ? ou me trompe_je (tel l'éléphant) ?

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    pourquoi 255.255.255.0 ? est-ce le masque du serveur ?

    un adresse IPv4 c'est une valeur sur 32bits, le masque aussi, c'est donc juste une opération binaire "AND" qui distingue le réseau du poste.

    je ne me souviens jamais de l'ordre des octets, mais le masque c'est soit $FFFFFF00, soit $00FFFFFF

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    meme_reseau := (ip1 and mask) = (ip2 and mask);
    après tout dépend de ce que tu appelles "même réseau"...tu peux très bien avoir un intranet avec plusieurs sous-réseaux.

    sinon tu peux vérifier que le serveur n'a pas une adresse IP publique

    pour IPv6 j'en sais rien
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. Comment savoir si je suis vraiment connecté sur internet ou pas
    Par imparator_42 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 04/03/2009, 11h46
  2. Réponses: 3
    Dernier message: 09/08/2007, 13h23
  3. [Réseau] Connaitre les machines connectées sur un swicth
    Par Cyspak dans le forum Développement
    Réponses: 10
    Dernier message: 26/02/2007, 12h40
  4. recuperer adresse MAC d'un pc sur un reseau local
    Par LineLe dans le forum Développement
    Réponses: 3
    Dernier message: 25/03/2005, 16h37
  5. [Débutant] Tester une connection sur bdd
    Par lando dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 03/09/2003, 14h37

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