Ip internet via une connexion réseau - récupérer une ip dans un string

Soyez le premier à donner votre avis sur cette source.

Vue 14 778 fois - Téléchargée 1 445 fois

Description

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 / Exemple :


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

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

sara7delphi777
Messages postés
2
Date d'inscription
samedi 12 septembre 2009
Statut
Membre
Dernière intervention
12 septembre 2009

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
l_isserel
Messages postés
1
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
19 juillet 2006

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
dxh_master
Messages postés
97
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
25 juin 2006

jai remarqué que jai pas la lib PSOCK ou pui-je la trouvée???
josswel
Messages postés
70
Date d'inscription
lundi 23 mai 2005
Statut
Membre
Dernière intervention
3 juin 2009

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 .
mathieu57100
Messages postés
103
Date d'inscription
jeudi 24 juin 2004
Statut
Membre
Dernière intervention
9 février 2006

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.