| 
   
    | ...get the IP-Address behind a router/proxy? (2) |   
    | Autor: 
      Dave Potter |  | [ Print tip 
] |  |  |  
 
 
{This code requires a server running a script that generates a web
 page that has your IP address in it.
 This example uses http://www.whatismyip.com/
 The script then searches for the first time
 that 'Your ip is ' shows up and then looks for a
 correctly formatted IP address from that point.
 
 This works using Delphi 6 Enterprise but should work with previous
 versions with little or no modification, I think.
 }
 
 unit Main;
 
 interface
 
 uses
 Windows, Messages, SysUtils, Variants, Classes,
 Graphics, Controls, Forms, Dialogs, Psock,
 NMHttp, StdCtrls, ExtCtrls, Menus, About,
 Winsock, ComCtrls;
 
 type
 TForm1 = class(TForm)
 Button1: TButton;
 NMHTTP1: TNMHTTP;
 Memo1: TMemo;
 Edit1: TEdit;
 MainMenu1: TMainMenu;
 File1: TMenuItem;
 Exit1: TMenuItem;
 Bevel1: TBevel;
 Bevel2: TBevel;
 procedure Button1Click(Sender: TObject);
 procedure Exit1Click(Sender: TObject);
 private
 { Private declarations }
 public
 { Public declarations }
 end;
 
 var
 Form1: TForm1;
 
 implementation
 
 uses ClipBrd;
 
 {$R *.dfm}
 
 procedure TForm1.Button1Click(Sender: TObject);
 var
 InetIP: string;
 WebAddress, SearchString: string;
 Buff, P, FT: PChar;
 BuffLen: Word;
 StartPos, StringLength, TempInt: Integer;
 begin
 WebAddress   := 'http://www.whatismyip.com/';
 SearchString := 'Your ip is ';
 Memo1.Clear;
 try
 NMHTTP1.Get(WebAddress);
 except
 on E: Exception do
 begin
 MessageDlg('Could not get IP Address! ' +
 'Please ensure you are connected to ' +
 'the Internet.', mtError, [mbOK], 0);
 end;
 end;
 Memo1.Text     := NMHTTP1.Body;
 Memo1.SelStart := 0;
 GetMem(FT, Length(SearchString) + 1);
 StrPCopy(FT, SearchString);
 BuffLen := Memo1.GetTextLen + 1;
 GetMem(Buff, BuffLen);
 Memo1.GetTextBuf(Buff, BuffLen);
 P := Buff + Memo1.SelStart + Memo1.SelLength;
 P := StrPos(P, FT);
 if P = nil then MessageBeep(0)
 else
 begin
 Memo1.SelStart  := P - Buff;
 Memo1.SelLength := Length(SearchString);
 end;
 StringLength := Memo1.SelLength;
 StartPos     := Memo1.SelStart + StringLength;
 tempint      := StartPos;
 InetIP       := '';
 while ((Buff[TempInt] in ['0'..'9']) or
 (Buff[TempInt] = '.')) do
 begin
 InetIP  := InetIP + Buff[TempInt];
 tempint := tempint + 1;
 end;
 FreeMem(FT, Length(SearchString) + 1);
 FreeMem(Buff, BuffLen);
 Edit1.Text := InetIP;
 end;
 
 procedure TForm1.Exit1Click(Sender: TObject);
 begin
 Close;
 end;
 
 end.
 
 
   |