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 :

[FMX] Comment savoir si je suis connecté a internet et l'adresse IP


Sujet :

Web & réseau Delphi

  1. #1
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut [FMX] Comment savoir si je suis connecté a internet et l'adresse IP
    Bonjour,
    Problématique : j'ai affaires à des pc nomades (windows/mac) et je voudrais savoir s'ils sont connectés à l'usine (sur le réseau local donc) ou à l'extérieur
    (donc programme FMX XE8)

    Comment puis-je le savoir?
    j'ai pensé à :
    - un simple ping sur le serveur ne me parait pas suffisant, même s'il y a peu de chance de pinger la même adresse à l'extérieur
    - un test sur l'adresse fixe fournie par le FAI me paraitrait plus fiable mais comment écrire ça j'en ai aucune idée
    (INDY, ICS ... je ne vois même pas quel composant utiliser dans ces deux suites)

    Des pistes à me fournir ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    voici ce que j'ai tenté
    pour l'accès internet , simple , le bon vieux test sur google.fr qui a parfaitement fonctionné le samedi et ne fonctionne plus depuis dimanche

    ---------------------------
    Notification des exceptions du débogueur
    ---------------------------
    Le projet ProjectIP.exe a déclenché la classe d'exception EIdNotASocket avec le message 'Erreur de socket n° 10038
    Opération socket sur cible non-socket.'.
    correspondant a un problème de timeout je pense, voilà la fonction
    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
      function CheckInternet: boolean;
      begin
        result:=false;
        try
        IdTCPClient1.ReadTimeout:=2000;
        IdTCPClient1.ConnectTimeout:=2000;
        IdTCPClient1.Port:=80;
        IdTCPClient1.Host:='google.fr';
        IdTCPClient1.Connect;
        IdTCPClient1.Disconnect;
        result:=true;
        except
        result:=false;
        end;
      end;
    pour l'adresse FAI je me suis dit (le samedi) qu'il me suffisait alors de récupérer une page web genre whatsmyip et là encore, ce devait être un dimanche noir !
    j'ai bien réception des données (taille mais avec un memorystream impossible de les afficher dans un mémo .
    NOTA : Avec un TFileStream j'ai les infos
    C'est une première ce genre d'affichage pour moi (utilisation d'un MemoryStream -> Memo), donc il y a certainement un bout de code manquant ou autre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     function getip : boolean;
      var FS : TMemoryStream;
      begin
        try
         FS:=TMemoryStream.Create();
         IdHTTP1.Get('http://www.monwhois.fr/',FS);
         result:=fs.size>0; 
         if result then Memo1.Lines.loadfromStream(FS); //erreur affichage blanc !!!
         finally
          FS.Free;
        end;
      end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Bonjour Serge, il faut pê d'abord réinitialiser la position du curseur du flux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if Result then
    begin
      FS.Position:=0;
      Memo1.Lines.LoadFromStream(FS);
    end;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Re,

    une fonction qui me renvoi le truc correct (je n'ai lu le post de tourlourou qu'en écrivant ce post ! )
    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
     
    function getip : String;
       var FS : TMemoryStream;
           SR : TStreamReader;
           Content : String;
           EndPosition,BeginPosition : integer;
      begin
        try
         FS:=TMemoryStream.Create();
         IdHTTP1.Get('http://www.monwhois.fr/',FS);
         FS.Position:=0;
         SR:=TStreamReader.Create(FS);
         result:='******';
         while not (SR.EndOfStream) do
          begin
            Content := SR.ReadLine;
            if Content.Contains('<b>Votre adresse IP est :') then
             begin
               beginposition:=pos(':',Content)+1;
               EndPosition:=posex('</b>',content);
               result:=Trim(Copy(Content,beginposition,EndPosition-beginposition));
               break;
              end;
          end;
         finally
           FS.Free;
           SR.Free;
        end;
      end;
    j'attends vos critiques/optimisations (je n'ai pas encore vérifié s'il y a fuites mémoires) et reste le problème pas de connexion internet (timeout idhttp ?)
    s'il y a mieux (certainement) je suis toutes ouïes
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    Bonjour,

    Pour le test de la connexion internet, pourquoi ne pas utiliser la fonction InternetGetConnectedState ?

  6. #6
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    Je viens de me rendre compte que le message initial parlait de PC et Mac, donc ma proposition ne peux pas aller car c'est seulement du Windows.

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    voilà mon dernier jus de la fonction, je n'aimais pas trop de fait de rechercher un truc comme '<b>Votre adresse IP est :' j'ai donc utilisé les expressions régulières
    et aussi pouvoir changer d'URL (attention ne fonctionne pas avec les sites sécurisés https , à vérifier)
    j'aurais aimé pouvoir faire une recherche directement dans le stream sans passer par le StreamReader mais Match ne permet pas une recherche dans un Stream (à ma connaissance)

    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
    37
    38
    39
    40
     
    uses ... IdHTTP, System.RegularExpressions
     
    // url est une adresse de site indiquant l'adresse par exemple 'http://www.monwhois.fr/'
    function whatismyInternetipV4(url: string): string;
       var H : TIdHTTP;
           FS : TMemoryStream;
           SR : TStreamReader;
           Content : String;
           regexpr : TRegEx;
           match   : TMatch;
    begin
     FS:=TMemoryStream.Create();
     H:=TIdHTTP.Create(nil);
     SR:=TStreamReader.Create(FS);
     RegExpr:=TRegEx.Create('\b(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}\b');
     try
        try
          H.Get(url,FS);
        except
     
        end;
        if FS.Size=0 then result:='Pas Internet';
        FS.Position:=0;
        while not (SR.EndOfStream) do
            begin
              Content := SR.ReadLine;
              Match:=regexpr.Match(content);
              if Match.Success then
               begin
                result:=match.value;
                break;
               end;
            end;
     finally
       if assigned(FS) then FS.Free;
       if assigned(SR) then SR.Free;
       if assigned(H) then H.Free;
     end;
    end;
    en version "courte" cela donne
    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
    function whatismyInternetipV4(url: string): string;
    var H : TIdHTTP;
        Content : String;
        RegExpr : TRegEx;
        Match   : TMatch;
    begin
     H:=TIdHTTP.Create(nil);
     RegExpr:=TRegEx.Create('\b(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}\b',[roMultiline]);
     try
        try
          Content:=H.Get(url);
        except
           result:='Pas Internet';
        end;
        Match:=RegExpr.Match(content);
        if Match.Success then  result:=Match.value;
     finally
       H.Free;
     end;
    end;
    le problème de cette dernière est que la capacité de la variable content pourrait être mise à l'épreuve (peu probable ?)

    Citation Envoyé par Thierry Laborde
    le message initial parlait de PC et Mac,
    hé oui c'est le cas, bien que je n'ai pas encore testé sous Mac , ceci étant j'ai trouvé, lors de mes recherches, une pépite pour les mobiles version XE5 mais c'est peut être plus facile avec XE8 ? Quoique cela ne m'aurait toujours pas fourni l'adresse
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 418
    Points
    1 418
    Par défaut
    Le truc avec les sites comme whatsmyip c'est que on se sait jamais quand ils ferment, les sites viennent et partent de plus en plus vite je trouve.
    Moi je me sers de mes propres serveurs, avec un fichier php genre :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    echo $_SERVER['REMOTE_ADDR'];
    ?>
    et puis comme ça pas besoin de regexp qui ne fonctionnera plus le jour ou ils changeront le design du site.
    Il existe 3 sortes de gens: ceux qui savent compter et ceux qui ne savent pas.

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par ouiouioui
    Moi je me sers de mes propres serveurs,
    D'accord mais , tout le monde n'a pas la chance d'avoir ses serveurs (ou la main dessus) j'ai donc fait au plus général.

    puis comme ça pas besoin de regexp qui ne fonctionnera plus le jour ou ils changeront le design du site.
    justement non à partir du moment ou il y a IP elle sera trouvée sinon le résultat sera nul ou autre si on modifie le test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if Match.Success then result:=Match.value
                            else result:='! Adresse non trouvée' ;
    Donc , s'il n'y a pas d'autres critiques je mets comme résolu
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

Discussions similaires

  1. comment savoir si je suis connecté au réseau local
    Par zanoubya dans le forum Débuter
    Réponses: 4
    Dernier message: 18/10/2010, 16h03
  2. Comment savoir si je suis connecte ?!?!
    Par Juanes dans le forum Qt
    Réponses: 2
    Dernier message: 21/07/2009, 00h50
  3. 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
  4. Comment savoir si je suis bien connecté à la base ?
    Par gg9595 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 21/03/2007, 15h16
  5. comment savoir si je suis admin d'un poste?
    Par Samanta dans le forum Windows XP
    Réponses: 4
    Dernier message: 26/04/2005, 14h14

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