How to get external IP address using Delphi software?
Dear readers of SoftMaker.kz blog. Today I’ll give a Delphi example that can help you to get external IP address
in the Internet. One post from this series has already explained how to get computer IP address in a local network using Delphi. Here is a Delphi example that can help you to get external IP address even if you work in a local network and your computer is behind proxy server, gateway or router. This functional is realized using a little program GetExternalIP.
Internet Protocol Address allows computers (printers, modems) to interact with each other in a computer network. The whole Internet is based on TCP/IP connection. A TCP part describes how two computers can connect to each other to transfer data. An IP part is responsible for transfer and routing of messages between Internet stations. If your computer is a part of home or office network, you must have equipment for the Internet connection that links home (office) local local network (LAN) with WAN.
As a rule, internal (local) IP addresses are numbers like: “192.68.1.2”. External (global) IP addresses of a modem (for example
KEENETIC router, in russian), are installed when a modem is connected to an Internet provider. If you want to know your external IP address using Delphi code, you may want to use a website “http://www.softmaker.kz”.
First, you need to put a component IdFTP on a form from a component set Indy Clients. A code given below is required to get modem IP address that is used by your computer to connect to the Internet.
function GetHTML(const AURL: string): string;
var
sHead,sHost,sPage: string;
x,xCnt,xCntTotal: integer;
sock: TClientSocket;
ws: TWinSocketStream;
ss: TStringStream;
buff: array[0..4095] of char;
const
CrLf = #13#10;
begin
Result := '';
sHost := AURL;
x := Pos('//',sHost) ;
if x > 0 then
System.Delete(sHost,1,x+1) ;
x := Pos('/',sHost) ;
if x > 0 then
begin
sPage := Copy(sHost,x,Length(sHost)) ;
System.Delete(sHost,x,Length(sHost)) ;
end
else
begin
sPage := '/';
end;
sock := TClientSocket.Create(nil) ;
try
try
sock.ClientType := ctBlocking;
sock.Port := 80;
sock.Host := sHost;
sock.Open;
// Set up a 20 second delay
ws := TWinSocketStream.Create(sock.Socket,20000) ;
ss := TStringStream.Create('') ;
try
sHead := 'GET ' + sPage + ' HTTP/1.0 ' + CrLf +
'Host: ' + sHost + CrLf + CrLf;
StrPCopy(buff,sHead) ;
ws.Write(buff,Length(sHead) + 1) ;
ws.Position := 0;
FillChar(buff,SizeOf(buff),0) ;
repeat
xCnt := ws.Read(buff,SizeOf(buff)) ;
xCntTotal := xCntTotal + xCnt;
ss.Write(buff[0],xCnt) ;
until xCnt = 0;
Result := ss.DataString;
finally
ws.Free;
ss.Free;
end;
except
end;
finally
sock.Free;
end;
end;
That’s how you can use this function in order to get external IP address from site.softmaker.kz.
Put a button on the form and write in the event handler the following:
procedure TForm1.Button1Click(Sender: TObject);
var
ip: string;
begin
with TStringlist.Create do
try
Text := GetHTML('https://site.softmaker.kz/get_an_external_ip_address.php') ;
if Count > 0 then ip := Strings[Count - 1];
finally
Free;
end;
ShowMessage('Your external ip address: ' + ip);
end;
File content get_an_external_ip_address.php is as follows:
<?php $ip=$_SERVER['REMOTE_ADDR']; echo $ip; ?>


