[fpc-pascal] lNet getting the local IP

silvioprog silvioprog at gmail.com
Thu Oct 7 14:31:06 CEST 2010


Wow, worked perfectely in Ubuntu-10.04, Mandriva-2010 and openSUSE-11.2.

Thanks for the exelent solutions. :)

2010/10/7 Brian Winfrey <bwcode4u at gmail.com>

>
> I found an example for linux on stack overflow that was in c
>
> http://stackoverflow.com/questions/212528/linux-c-get-the-ip-address-of-local-computer
>
> - here is a rough translation:
>
> program GetPrimaryIpAddress;
> {$mode objfpc}
>
> uses
>  baseunix,
>  unixtype,
>  sockets,
>  SysUtils;
>
> procedure Get(var buf: array of char; const len: longint);
> const
>  CN_GDNS_ADDR = '8.8.8.8';
>  CN_GDNS_PORT = 53;
> var
>  s: string;
>  sock: longint;
>  err: longint;
>  HostAddr: TSockAddr;
>  l: Integer;
>  UnixAddr: TInetSockAddr;
>
> begin
>  err := 0;
>  Assert(len >= 16);
>
>  sock := fpsocket(AF_INET, SOCK_DGRAM, 0);
>  assert(sock <> -1);
>
>  UnixAddr.family := AF_INET;
>  UnixAddr.port := htons(CN_GDNS_PORT);
>  UnixAddr.addr := StrToHostAddr(CN_GDNS_ADDR).s_addr;
>
>  if (fpConnect(sock, at UnixAddr,SizeOf(UnixAddr)) = 0) then
>  begin
>    try
>      l := SizeOf(HostAddr);
>      if (fpgetsockname(sock, @HostAddr, @l) = 0) then
>      begin
>        s := NetAddrToStr(HostAddr.sin_addr);
>        StrPCopy(PChar(Buf), s);
>      end
>      else
>      begin
>        err:=socketError;
>      end;
>    finally
>      if (fpclose(sock) <> 0) then
>      begin
>        err := socketError;
>      end;
>    end;
>  end
>  else
>  begin
>    err:=socketError;
>  end;
>
>  if (err <> 0) then
>  begin
>    // report error
>  end;
> end;
>
> var
>  ipbuf: array[0..255] of char;
>
> begin
>  system.FillChar(ipbuf, sizeOf(ipBuf), #0);
>  Get(ipbuf, system.SizeOf(ipbuf));
>  WriteLn(StrPas(ipbuf));
> end.
>
> BrianW


-- 
Silvio Clécio,
*programmer* *ObjectPascal*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20101007/b1e2c0b8/attachment.html>


More information about the fpc-pascal mailing list