[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