begin process at 2012 02 08 16:32:12
  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é :12 208 / 1 143

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 Source avec une capture PETITE APPLICATION DE TCHAT DANS UN RÉSEAU LOCALE par benimen
Source avec Zip Source avec une capture LOG DE PING POUR SURVEILLER LA QUALITÉ D'UNE CONNECTION par PhilLU
Source avec Zip GET IP AVEC INDY par Gerard
Source avec Zip GCS-FACEBOOK par pinkfloydhighopes
Source avec Zip Source avec une capture PINGNOW ADRESSE IP par mekhmoukhs

 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 Récupération Nom "Connexion au réseau local"et son IP [ par Hijesse ] Bonjour à tous, Je cherche à récupérer le nom de la connexion local qui peut-être "Connexion au réseau local" ou "Local Area Connection" si windows UK débloquer connexion internet [ par josswel ] bjr j aimerai savoir comment peut on enlever une protection de connection a internet si on n a pas les droit d admnistrateur ? c' est possible ? merci Comment tester une connexion internet Lan [ par vieuxpere ] Bonjour, Je souhaite trouver un code qui permette de tester sur un poste si la connexion à internet est valide ou pas. J'ai trouvé un code mais qui Comment connaître le débit de ma connexion internet [ par yokochimada ] Salut à tous!je voulais savoir s'il existait un source delphi qui permet de connaître le débit entrant de ma connexion internet, et aussi détecter le Resolution de nom sur réseau local [ par manu00 ] Bonjour, J'ai cherch&#233; un code source sur ce forum pour faire ceci mais je n'ai rien trouv&#233;... En fait, je dispose d'une liste d'ip r&#233 Récupérer l'URL en cours dans Internet Explorer [ par Caribensila ] Salut à tous! Quelqu'un connait-il d'autres moyens que l'utilisation de l'API FindWindowEx pour récupérer l'URL d'IE? Merci. ip internet [ par houssam500 ] bonjour ! ! jé créer un  aplication de chat sur le principe client / server  quand je met le IP local  l'application marche tres bien entre 2 personne recuperer ip internet [ par shadrak ] Bonjour, je cherche le moyen de recuperer une Ip Internet, sous delphi 4, j ai bien trouvé plusieurs examples mais tous utilisent du code non compatib


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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,061 sec (4)

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