Página 1 de 1

Como obter ip da maquina?

Enviado: 05 Jun 2008 17:26
por TerraSoftware
Caros colegas, como posso obter o ip da maquina onde o sistema esta rodando?

Re: Como obter ip da maquina?

Enviado: 05 Jun 2008 22:20
por sygecom
Olá Rene,
Para pegar o IP da maquina pode usar a função abaixo:
IP_LOCAL()

Código: Selecionar todos

PROCEDURE IP_LOCAL()
LOCAL aHosts
LOCAL cName
Local cEstacao:=netname(.f.)
InetInit()
aHosts := InetGetHosts( cEstacao )
IF aHosts == NIL
   aHosts := InetGetAlias( cEstacao )
ENDIF
IF Empty(aHosts)
   aHosts := InetGetAlias( cEstacao )
ENDIF
InetCleanup()
RETURN  ahosts[1 ]
Para pegar o IP externo o do Modem, pode usar a função abaixo:

Código: Selecionar todos

FUNCTION IP_EXTERNO()
   url := 'http://www.meuip.com.br/'
   html:= ReadPage_ler( url )
   vRET:= PegaIP_ex(html)
RETURN vRET

FUNCTION PegaIP_ex(cHtml)
   LOCAL Pos, PosF
   Pos := At('IP?', Upper(cHtml) )
   IF Pos < 1
      RETURN 0
   ENDIF
   Pos   += Len('IP?')
   cHtml := subst( cHtml, Pos )
   PosF  := At('</TITLE>',Upper(cHtml)) - 1
   cHtml := Subst(cHtml,1,PosF)
RETURN cHtml

FUNCTION ReadPage_ler( cUrl )
   LOCAL oUrl, oCli, cRes := ''
   BEGIN SEQUENCE
      oUrl = TUrl():New( cUrl )
      IF EMPTY( oUrl )
         BREAK
      ENDIF
      oCli = TIpClientHttp():New( oUrl )
      //oCli = TIPClient():New( oUrl )  // para uso em xharbour 9970
      IF EMPTY( oCli )
         BREAK
      ENDIF
      oCli:nConnTimeout = 20000
      IF !oCli:Open( oUrl )
         BREAK
      ENDIF
      cRes := oCli:Read()
      oCli:Close()
   END SEQUENCE
RETURN cRes
Obs: Ambas tem que linkar a TIP.LIB

Re: Como obter ip da maquina?

Enviado: 05 Jun 2008 22:41
por marcos.gurupi
Belo exemplo. No exemplo IP_EXTERNO aconteceu o seguinte erro:

Código: Selecionar todos

Error BASE/3012  Argument error: INETCONNECT
Called from ->INETCONNECT(0)
Called from client.prg->TIPCLIENT:INETCONNECT(556)
Called from client.prg->TIPCLIENT:OPEN(213)
Called from NetServiceTray.prg->READPAGE_LER(1425)
Called from NetServiceTray.prg->IP_EXTERNO(1397)
Called from NetServiceTray.prg->PEGARIP(1372)
Called from NetServiceTray.prg->(b)MAIN(124)
Called from hwindow.prg->ONCOMMAND(444)
Called from hwindow.prg->(b)HMAINWINDOW(164)
Called from hwindow.prg->HMAINWINDOW:ONEVENT(243)
Called from ->HWG_ACTIVATEMAINWINDOW(0)
Called from hwindow.prg->HMAINWINDOW:ACTIVATE(232)
Called from NetServiceTray.prg->MAIN(135)

HwGUI 2.16 xHarbour build 1.0.0 Intl. (SimpLex)
Date:05/06/2008
Time:22:48:10

Re: Como obter ip da maquina?

Enviado: 05 Jun 2008 22:49
por sygecom
Marcos,
Tem que linkar a TIP.LIB.

Voce esta linkando ?

Re: Como obter ip da maquina?

Enviado: 05 Jun 2008 23:46
por marcos.gurupi
Sim. Inclusive neste mesmo projeto eu uso o FTP.

Marcos Roberto

Re: Como obter ip da maquina?

Enviado: 06 Jun 2008 00:13
por sygecom
Marcos, desculpa foi erro meu esse exemplo peguei de um sistema meu que esta compilado com 9970, e para usar com xharbour 1.0.0 tem que mudar a seguinte linha:
oCli = TIpClient():New( oUrl )
para:
oCli = TIpClientHttp():New( oUrl )

Já editei o post acima, é só copiar novamente.

Re: Como obter ip da maquina?

Enviado: 06 Jun 2008 09:31
por MARCELOG
Tem também essa função em C.
Peguei no projeto do Stanis.

MarceloG

Código: Selecionar todos

HB_FUNC (GETHOSTBYNAME)

/* 
Obtem ip do computador local
*/ 

{

 struct hostent * pHost;

 BYTE addr[ 20 ];

 strcpy( ( char * ) addr, "0.0.0.0" );

 pHost = gethostbyname( ( char * ) hb_parc( 1 ) ) ;

 if( pHost )
   {
      wsprintf( ( char * ) addr, "%i.%i.%i.%i",
               ( BYTE ) pHost->h_addr[ 0 ], ( BYTE ) pHost->h_addr[ 1 ],
               ( BYTE ) pHost->h_addr[ 2 ], ( BYTE ) pHost->h_addr[ 3 ] );
   }

 hb_retc( ( char * ) addr );
}