Obtener IP LOCAL

07/10/2005 - 20:04 por Hubert Casimiro Taco | Informe spam
Hola Grupo.
Para obtener el IP uso las funciones de "wsock32"

hay otra forma de hacerlo.

Saludos.
Hubert Casimiro Taco.



Estoy deseoso de compartir experiencias con otros compañeros similares.
Saludos reñores
Hubert Casimiro Taco.
Lima Peru 252 2528, 9967 5466, 436 9786


PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
 

Leer las respuestas

#1 Alejandro Guchea
29/12/2005 - 12:46 | Informe spam
Coloca esto en un procedimiento del form. Lo he sacado de NETSEND.


* Windows Sockets
#DEFINE WS_VERSION_REQD 257
#DEFINE WS_VERSION_MAJOR 1
#DEFINE WS_VERSION_MINOR 1
#DEFINE MIN_SOCKETS_REQD 1
#DEFINE SOCKET_ERROR -1
#DEFINE WSADESCRIPTION_LEN 256
#DEFINE WSASYS_STATUS_LEN 128

* Windows NetBIOS
#DEFINE NCBENUM 55
#DEFINE NCBASTAT 51
#DEFINE NCBNAMSZ 16
#DEFINE HEAP_ZERO_MEMORY 8
#DEFINE HEAP_GENERATE_EXCEPTIONS 4
#DEFINE NCBRESET 50

LOCAL lnCnt, lpWSAData, lpWSHostEnt, lpHostName, lcRetVal, lpHostIp_Addr,
lpHostEnt_Addr, lnHostEnt_Lenght, lnHostEnt_AddrList
*-
* Devuelve las direcciones IP
* Sintaxis: IPAddress()
* Valor devuelto: lcRetVal
* lcRetVal viene expresado como una cadena con el formato:
192.100.100.100, 192.100.100.101, ...


* Instrucciones DECLARE DLL para manipular Windows Sockets
DECLARE INTEGER WSAGetLastError IN WSock32.dll
DECLARE INTEGER WSAStartup IN WSock32.dll INTEGER wVersionRequested ,
STRING @lpWSAData
DECLARE INTEGER WSACleanup IN WSock32.dll
DECLARE INTEGER gethostname IN WSock32.dll STRING @lpHostName, INTEGER
iHostNameLenght
DECLARE INTEGER gethostbyname IN WSock32.dll STRING lpHostName
DECLARE RtlMoveMemory IN Win32API STRING @lpDest, INTEGER nSource,
INTEGER nBytes
* Valores
lcRetVal = ''
lpHostName = SPACE(256)
lnHostEnt_Addr = 0
lnHostEnt_Lenght = 0
lnHostEnt_AddrList = 0
lnHostIp_Addr = 0
lpTempIp_Addr = CHR(0)
lpHostIp_Addr = REPLICATE(CHR(0), 4)
lpWSHostEnt = REPLICATE(CHR(0), 4 +4 +2 +2 +4)
lpWSAData = REPLICATE(CHR(0), 2 +2 +WSADESCRIPTION_LEN +1
+WSASYS_STATUS_LEN +1 +2 +2 +4)
* Iniciar Windows Sockets
IF WSAStartup(WS_VERSION_REQD, @lpWSAData) = 0
* Valores
lnVersion = this.strtoint(SUBSTR(lpWSAData, 1, 2))
lnMaxSockets = this.strtoint(SUBSTR(lpWSAData, 391, 2))
* Determinar si Windows Sockets responde
IF gethostname(@lpHostName, 256) <> SOCKET_ERROR
* Valores
lpHostName = ALLTRIM(lpHostName)
lnHostEnt_Addr = gethostbyname(lpHostName)
* Determinar si Windows Sockets no dio error
IF lnHostEnt_Addr <> 0
* Mover bloques de memoria
RtlMoveMemory(@lpWSHostEnt, lnHostEnt_Addr, 16)
* Valores
lnHostEnt_AddrList = this.strtolong(SUBSTR(lpWSHostEnt,
13, 4))
lnHostEnt_Lenght = this.strtoint(SUBSTR(lpWSHostEnt, 11,
2))
* Obtener todas las direcciones IP de la máquina
DO WHILE .T.
* Mover bloques de memoria
RtlMoveMemory(@lpHostIp_Addr, lnHostEnt_AddrList, 4)
* Valores
lnHostIp_Addr = this.strtolong(lpHostIp_Addr)
* No hay o no quedan más direcciones validas
IF lnHostIp_Addr = 0
EXIT
ELSE
* Separar multiples IP`s con comas
lcRetVal = lcRetVal + IIF(EMPTY(lcRetVal), '', ',')
ENDIF
lpTempIp_Addr = REPLICATE(CHR(0), lnHostEnt_Lenght)
* Mover bloques de memoria
RtlMoveMemory(@lpTempIp_Addr, lnHostIp_Addr,
lnHostEnt_Lenght)
* Componer cadena IP con puntos
FOR lnCnt = 1 TO lnHostEnt_Lenght
lcRetVal = lcRetVal +
TRANSFORM(ASC(SUBSTR(lpTempIp_Addr, lnCnt, 1))) + IIF(lnCnt lnHostEnt_Lenght, '', '.')
ENDFOR
* Continuar con la siguiente direccion
lnHostEnt_AddrList = lnHostEnt_AddrList + 4
ENDDO
ENDIF
ENDIF
ENDIF
* Parar Windows Sockets
IF WSACleanup() <> 0
lcRetVal = ''
ENDIF
* Retorno

RETURN lcRetVal



PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway

Preguntas similares