begin process at 2010 02 10 06:17:37
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & Internet

 > IP INTERNET VIA UNE CONNEXION RÉSEAU - RÉCUPÉRER UNE IP DANS UN STRING

IP INTERNET VIA UNE CONNEXION RÉSEAU - RÉCUPÉRER UNE IP DANS UN STRING


 Information sur la source

Note :
Aucune note
Catégorie :Réseau & Internet Classé sous :ip, internet, réseau, connexion, récupérer Niveau :Débutant Date de création :12/01/2005 Date de mise à jour :12/01/2005 16:49:17 Vu / téléchargé :10 206 / 1 011

Auteur : japee

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
Petite programme simple permettant de connaître son IP Internet, même derrière une connexion réseau.

Il utilise le composant "NMHTTP" fourni avec les versions "Entreprise" et "Pro" de Delphi, dans l'onglet "Internet" pour Delphi 4 Pro, "FastNet" pour Delphi 6 Entreprise, à vérifier sur d'autres versions, s'il existe encore... ou déjà !

Voici le principe.
Il existe des serveurs renvoyant cette IP tant convoitée.
On se connecte à un des serveurs dédiés à ce service.
J'en ai sélectionné 4, placés par ordre de rapidité.
Il reste à exploiter la page retournée, afin d'en extraire l'IP, qui seule nous intéresse.

C'était un excellent prétexte pour essayer ma fonction

  GetIPAdress(var IP: String; Txt: String): Boolean;

qui retourne True et renvoie la première IP valide rencontrée dans un String, et False dans le cas contraire.

C'est en principe largement suffisant pour l'utilisation envisagée, sinon le code peut être modifié en conséquence.

L'avantage de cette méthode est de pouvoir interpréter à priori toute page contenant une IP, quelle que soit la langue utilisée ou la mise en page.

Je n'ai pas alourdi le programme pour rendre sa compréhension plus aisée, mais il gagne à être automatisé, un serveur valide pouvant pallier immédiatement à une connexion défaillante... On peut également envisager un fichier .ini ou autre pour stocker une collection d'adresses Url de serveurs, classés par ordre de fiabilité/pérennité/rapidité et chargés automatiquement par le programme.

Quelle est l'utilité de connaître son IP internet par programmation ?
Pourquoi pas dans l'optique d'un programme P2P, entre deux (ou plus) ordis personnels de confiance ?
Il suffirait que le programme envoie l'IP (cryptée de préférence) sur un serveur. Chaque ordi doté du même programme fait de même, récupère les autres IP sur ce même serveur, puis les décrypte, afin de s'interconnecter directement...

Source

  • unit Unit1;
  • interface
  • uses
  • Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  • StdCtrls, ExtCtrls, ComCtrls, Psock, NMHttp;
  • type
  • TForm1 = class(TForm)
  • sbInfo: TStatusBar;
  • NMHTTP1: TNMHTTP;
  • edIP: TEdit;
  • Label1: TLabel;
  • Button1: TButton;
  • cbURL: TComboBox;
  • Animate1: TAnimate;
  • procedure Button1Click(Sender: TObject);
  • procedure FormActivate(Sender: TObject);
  • procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  • private
  • { Déclarations privées }
  • procedure Connection;
  • public
  • { Déclarations publiques }
  • end;
  • var
  • Form1: TForm1;
  • implementation
  • {$R *.DFM}
  • function GetIPAdress(var IP: String; Txt: String): Boolean;
  • var { Récupère la première IP valide trouvée }
  • i: Integer;
  • Chiffre, Point, Groupe: Integer;
  • Tmp: String;
  • procedure InitialiseTout;
  • begin
  • Tmp := '';
  • Chiffre := 0;
  • Point := 0;
  • Groupe := 0;
  • end;
  • begin
  • Result := False;
  • if Txt = '' then Exit;
  • InitialiseTout;
  • for i := 1 to Length(Txt) do
  • begin
  • if Txt[i] in ['0'..'9'] then // chiffre rencontré
  • begin
  • Inc(Chiffre);
  • if Chiffre > 3 then
  • InitialiseTout
  • else
  • Tmp := Tmp + Txt[i];
  • end
  • else if Txt[i] = '.' then // point rencontré
  • begin
  • Inc(Point);
  • if (Point > 3) or (Tmp = '') or ((Tmp <> '') and (Tmp[Length(Tmp)] = '.')) then
  • InitialiseTout
  • else
  • begin
  • Tmp := Tmp + Txt[i];
  • Inc(Groupe);
  • Chiffre := 0;
  • end;
  • end
  • else
  • begin // autre caractère rencontré
  • if (Groupe = 3) and (Tmp[Length(Tmp)] in ['0'..'9']) then
  • Break // Résultat trouvé ! -> sortie
  • else
  • if Tmp <> '' then
  • begin
  • InitialiseTout;
  • end;
  • end;
  • end;
  • IP := Tmp;
  • Result := Tmp <> '';
  • end;
  • procedure TForm1.Connection;
  • var
  • Url1: String;
  • Body: String;
  • IP: String;
  • begin
  • edIP.Clear;
  • Url1 := cbURL.Text;
  • Animate1.Active := True;
  • sbInfo.SimpleText := 'Recherche en cours...';
  • try
  • if NMHTTP1.Connected then NMHTTP1.Disconnect;
  • NMHTTP1.Get(Url1);
  • except
  • NMHTTP1.Disconnect;
  • ShowMessage('problème de connexion avec ce serveur');
  • Exit;
  • end;
  • Body := NMHTTP1.Body;
  • if GetIPAdress(IP, Body) then
  • edIP.Text := IP;
  • Animate1.Active := False;
  • sbInfo.SimpleText := 'Terminé';
  • end;
  • procedure TForm1.Button1Click(Sender: TObject);
  • begin
  • Connection;
  • end;
  • procedure TForm1.FormActivate(Sender: TObject);
  • begin
  • cbURL.ItemIndex := 0;
  • end;
  • procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  • begin
  • if NMHTTP1.Connected then NMHTTP1.Disconnect;
  • end;
  • end.
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, ComCtrls, Psock, NMHttp;

type
  TForm1 = class(TForm)
    sbInfo: TStatusBar;
    NMHTTP1: TNMHTTP;
    edIP: TEdit;
    Label1: TLabel;
    Button1: TButton;
    cbURL: TComboBox;
    Animate1: TAnimate;
    procedure Button1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Déclarations privées }
    procedure Connection;
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function GetIPAdress(var IP: String; Txt: String): Boolean;
var   { Récupère la première IP valide trouvée }
  i: Integer;
  Chiffre, Point, Groupe: Integer;
  Tmp: String;

      procedure InitialiseTout;
      begin
        Tmp     := '';
        Chiffre := 0;
        Point   := 0;
        Groupe  := 0;
      end;
      
begin
  Result := False;
  if Txt = '' then Exit;
  InitialiseTout;
  for i := 1 to Length(Txt) do
  begin
    if Txt[i] in ['0'..'9'] then  // chiffre rencontré
    begin
      Inc(Chiffre);
      if Chiffre > 3 then
        InitialiseTout
      else
        Tmp := Tmp + Txt[i];
    end
    else if Txt[i] = '.' then     // point rencontré
    begin
      Inc(Point);
      if (Point > 3) or (Tmp = '') or ((Tmp <> '') and (Tmp[Length(Tmp)] = '.')) then
        InitialiseTout
      else
      begin
        Tmp := Tmp + Txt[i];
        Inc(Groupe);
        Chiffre := 0;
      end;
    end
    else
    begin                         // autre caractère rencontré
      if (Groupe = 3) and (Tmp[Length(Tmp)] in ['0'..'9']) then
        Break     // Résultat trouvé !  -> sortie
      else
      if Tmp <> '' then
      begin
        InitialiseTout;
      end;
    end;
  end;
  IP := Tmp;
  Result := Tmp <> '';
end;

procedure TForm1.Connection;
var
  Url1: String;
  Body: String;
  IP: String;
begin
  edIP.Clear;
  Url1 := cbURL.Text;
  Animate1.Active := True;
  sbInfo.SimpleText := 'Recherche en cours...';
  try
    if NMHTTP1.Connected then NMHTTP1.Disconnect;
    NMHTTP1.Get(Url1);
  except
    NMHTTP1.Disconnect;
    ShowMessage('problème de connexion avec ce serveur');
    Exit;
  end;
  Body := NMHTTP1.Body;
  if GetIPAdress(IP, Body) then
    edIP.Text := IP;
  Animate1.Active := False;
  sbInfo.SimpleText := 'Terminé';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Connection;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  cbURL.ItemIndex := 0;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if NMHTTP1.Connected then NMHTTP1.Disconnect;
end;

end.

 Conclusion

Fait sous Delphi 4 Pro.
Il faut impérativement disposer du composant NMHTTP pour pouvoir compiler.
Sinon, compilable dès D3, sauf erreur.

Une source similaire mais avec une approche différente par Caribensila ici :
http://www.delphifr.com/code.aspx?id=27202

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

12 janvier 2005 16:49:17 :
Précision concernant la version de Delphi utilisée.

 Sources du même auteur

Source avec Zip Source avec une capture DEPLACER LES ITEMS D'UNE LISTBOX VERS UNE AUTRE PAR DRAG AND...
Source avec Zip Source avec une capture DÉMINEUR UTILISANT UNE TDRAWGRID ET AVEC LEQUEL ON PEUT TRIC...
Source avec Zip Source avec une capture SIGNIFICATION DES CODES D'ERREUR DE L'API WIN32 - UTILISATIO...
Source avec Zip Source avec une capture CONVERSION LITTÉRALE D'UN NOMBRE ENTIER OU FLOTTANT
Source avec Zip Source avec une capture TPULSEBUTTON - RÉPÉTITION PROGRESSIVE D'UN EVENT PENDANT ONK...

 Sources de la même categorie

Source avec Zip BASE64/BASE64URL ENCODE/DECODE par f0xi
Source avec Zip AFFICHAGE DES INFODFS par fbalien
Source avec Zip Source avec une capture INTRA MESSENGER - DELPHI par keket
Source avec Zip CODAGE DÉCODAGE PDU 7BITS par AccessToYou
Source avec Zip Source avec une capture SIMPLEWEBBROWSER par cantador

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture IP-MASTER, OU VOTRE IP FACILE ! par Bacterius
Source avec Zip COMMENT CONNAITRE SON IP PUBLIC par the_rain16
Source avec Zip Source avec une capture TESTE LA CONNEXION INTERNET ET DIT QUOI FAIRE par ekinoxjp
Source avec Zip DÉTECTION DE L'IP INTERNET ET LOCAL par Alphus
Source avec Zip IP INTERNET AVEC UN MODEM/ROUTEUR (INDY & SNMP) par ACHPI32

Commentaires et avis

Commentaire de JulioDelphi le 12/01/2005 17:47:13 administrateur CS

hello,
ça ressemble tres tres fort a cari sauf le webbrowser en moins...
evite ce lien qui fait télécharger 2.5mo :) c long pour les 56k :p http://mire.ipadsl.net/speedtest/speedtest4.php
ce soir ou demain je te montre comment je fais avec un TDownloadURL ou bien tu le fais ? :) c une action standard du compo de base TActionList (creer "new stardard action" > "internet") tu verras c super facile aussi.
C'est bien ce genre de source pour choper son o^a travers un routeur, c la seule "bonne "soluce que j'ai trouvé aussi. je mets entre " car si aucun des serveurs ne réponds ...
;) a+

Commentaire de Caribensila le 12/01/2005 18:00:52

Bravo!
J'aime bcp la polyvalence de ta fonction GetIPAdress !C'est un "plus" indéniable par rapport à mon code.
On n'arrête pas le progrès!  lol
Pour info, pour le P2P j'avais fait:
http://www.delphifr.com/code.aspx?id=27677

>Julio!   -Si aucun des serveurs ne répond c'est que c'est pas ton jour et tu devrais te recoucher illico, ce jour-là!    lol

Commentaire de JulioDelphi le 12/01/2005 18:03:55 administrateur CS

Cari : ouè c vrai je vois l'extreme :p

ps : a la place de mon "o^a" il faut lire "ip au" ... oui oui c'est une faute de frappe :p

Commentaire de Delphiprog le 12/01/2005 20:49:07 administrateur CS

JulioDelphi : Japee a indiqué que le code avait été écrit et testé avec Delphi  4 pro. Or le composant TDownloadURL n'existe que depuis Delphi 6. Je ne suis donc pas sur que Japee soit en mesure d'apprécier les efforts que tu vas consentir.

Japee : ce code a le mérite de décomposer le texte reçu et rechercher l'adresse IP.
Personnellement, j'aurais utilisé les expressions régulières, si simples à mettre en oeuvre.
De plus, cela aurait facilité la "migration" lors de l'apparition des adresses IP à la norma IP V6.

Commentaire de JulioDelphi le 12/01/2005 20:51:59 administrateur CS

DelphiProg : ha ouè dsl, moi qui ai commencé à Delphi7 :p je ne pense jamais à ça. Tu nous fais une petite démo de l'expression regulière à utiliser pour l'ip ? :)

Commentaire de japee le 12/01/2005 22:19:59 administrateur CS

JulioDelphi : désolé pour le dernier lien, c'était pour avoir le temps de vérifier le bon fonctionnement du TAnimate ;)
Effectivement, comme exprimé par Delphiprog, je ne dispose pas du composant TDownloadURL. Il va falloir que tu t'y colles.

Caribensila : merci de ton appréciation pour la fonction GetIPAdress. Je lui ai fait passer quelques tests bien tordus, elle a l'air de faire correctement son boulot.

Delphiprog : j'avoue être peu familier du concept d'expression régulière. Je te remercie d'avoir attiré mon attention sur ce sujet qui m'avait échappé jusqu'à présent et que je vais étudier avec intérêt.

Commentaire de japee le 14/01/2005 15:02:38 administrateur CS

Sérieusement, il vaut mieux remplacer la 4ème url :

http://mire.ipadsl.net/speedtest/speedtest4.php

par :

http://mire.ipadsl.net/

... ça va beaucoup plus vite !

De même, en attendant une mise à jour du code, j'aurais dû mettre les instructions :

Animate1.Active := False;
sbInfo.SimpleText := 'Terminé';

dans un bloc finally...end, pour éviter que le TAnimate ne continue de fonctionner et que le message "Terminé" ne continue d'apparaître, alors que le NMHTTP est déconnecté (en cas d'exception).

Commentaire de japee le 14/01/2005 15:10:26 administrateur CS

Je voulais dire: pour éviter que le message "Recherche en cours..." ne continue d'apparaître, vous aviez compris ;)

Commentaire de mathieu57100 le 16/03/2005 13:57:11

très sympa la source, je m'en suis inspiré pour un projet...merci.

Commentaire de josswel le 14/06/2005 12:37:44

tres cool
japee tu sais comment cacher son adresse IP pour que les curieux ne peuvent le voir . Un redirection des adresse IP  si tu veux . Mais ton code est on merci elle va m'inspirer .

Commentaire de dxh_master le 15/06/2006 01:06:52

jai remarqué que jai pas la lib PSOCK ou pui-je la trouvée???

Commentaire de l_isserel le 19/07/2006 12:41:04

On telecharge, ca marche sans retouche
Cela fait toujours plaisir

j'ai trouver comment déclencher un exe sur un mail recu
je souhaite renvoyer cette ip par mail

Bravo

Commentaire de sara7delphi777 le 12/09/2009 17:11:37

j'ai une petite question
quel est le composant qui remplace
"NMHTTP" Delphi4,
et "FastNet" Delphi6
dans la version Delphi7
car je travail avec lui (delphi7)
merci d'avance pour votre aide

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Les Sockets, Internet et le réseau [ par Harvester_ ] Hm voila j'ai recontr&#233; se probl&#232;me &#233;norm&#233;ment de fois, pas sp&#233;cialement en programmant :Comment lancer un serveur depuis un p Récupérer des infos sur les connexions réseau [ par leobaillard ] Bonsoir ! Je voudrais savoir s'il est possible et si oui comment on fait pour r&#233;cup&#233;rer les infos des connexions r&#233;seau de Windows comm type de connexion internet [ par cybersky ] Salut &#224; tous les d&#233;veloppeurs, Voil&#224; ma question est simple mais peut &#234;tre pas le code : Function TestConnect: Boolean; Var &nb connexion internet (dure dure ) [ par neo090 ] Projet cyber-caféJe déserai bloquer les connection internet des postes client nt qui se connect via un routeur adl qq'un connait-il un moyenmerci services et eventlog: service pour surveiller une connexion à internet [ par hendrix ] Bonjour à tous,J'ai fait un service (pour NT et XP) qui fait un ping régulier (via le composant ICMP d'indy). Je gère les exceptions lorsqu'un ping se detecter la vitesse de connexion Internet [ par koaiz ] J'ai un composant qui detecte la vitesse de la connexion internet mais ne marche pas sous Nt , XP il ne fonctionne que sous 9x y a t-il un moyen de co comment connaitre le debit d'une connexion internet? [ par kastel ] boujour,je suis assez debutant en delphi et j'essai en ce moment de devellopper un petit soft. mon but est de faire un programme permettant de connait Connaitre ip internet [ par keyser-08 ] boujour à tout le monde Voila j'ai un problème, j'arrive pas à connaitre mon ip internet, grâce à l'idipwatch j'arrive bien à connaitre mon ip local m Connexion Internet [ par koaiz ] HugY a t-il Un moyen fiable de detecter la connexion modem ou adsl sous NT et 9X J'ai tester les fonctions proposer mais il ne sont pas fiable elles


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,357 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales