Wow, worked perfectely in Ubuntu-10.04, Mandriva-2010 and openSUSE-11.2. Thanks for the exelent solutions. :)
2010/10/7 Brian Winfrey <bwcod...@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,@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*
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal