Capturar datos de la estacion en Terminal Server

126 views
Skip to first unread message

Boris Alday

unread,
Jan 15, 2020, 7:52:35 AM1/15/20
to Comunidad de Visual Foxpro en Español

Muy buenos dias

Tenemos un sistema que es accesado remotamente via TS. Basicamente, el cliente se conecta via VPN e entra en el servidor TS 2012

Lo que necessitamos es que el sistema (hecho en VFP 9) sepa qual seria el IP e la version del Windows que esta accesando el servidor.

He hecho algunos testes com WinSock (CREATEOBJECT("MSWinSock.WinSock"), pero siempre retorna el IP del servidor. Y atraves de la funcion SYS(1) siempre retorna WIndows 6.2

Existe alguma forma de saber qual IP e version de SO "del cliente"

Grato


--

Boris Alday | fotografo
ESCRITA DA LUZ | Zip Code 13080-470 | Campinas - SP (Brazil)
Mobile: +55 19 99438-4177
Email: boris...@gmail.com.br | Website: http://www.escritadaluz.com.br/

Mary

unread,
Jan 15, 2020, 4:28:55 PM1/15/20
to Comunidad de Visual Foxpro en Español
podrias pasar los datos como parametros haciendo la validaciones 

clear
 ?getuserlocalinfo()
 function getuserlocalinfo
  local sessionid, clientname, clientipaddress
  if getclientinfo(@sessionid, @clientname, @clientipaddress ) =.t.
  isessionid=sessionid
  cclientname=clientname
  endif
  return 'Client name '+cclientname+' in session '+alltrim(str(isessionid))+' got ipAdrdress: '+clientipaddress
 endfunc
 *--------------------------------------------------------------------------
 function getclientinfo(sessionid, clientname, clientipaddress )
  #define wts_current_server_handle (0)
  #define wts_current_session   (-1)
  #define wtssessionid    (4)
  #define wtsclientname    (10)
  #define wtsclientaddress   (14)
  #ifndef af_inet
  #define af_inet  2
 #endif
 
 
 declare integer WTSQuerySessionInformation in Wtsapi32.dll ;
  integer hServer, ;
  integer SessionId, ;
  integer WTSInfoClass, ;
  long @ ppBuffer, ;
  integer @pBytesReturned
 
 
 declare WTSFreeMemory in Wtsapi32.dll long address
 
 
 local clientaddress, nbytes, sts, i
 clientaddress = repl( chr(0), 4 + 20)
 nbytes = 0
 ppbuffer = 0
 
 
 && ClientIpAddress
 sts = wtsquerysessioninformation( ;
  wts_current_server_handle, ;
  wts_current_session, ;
  wtsclientaddress, ;
  @ppbuffer, ;
  @nbytes ;
  )
 
 
 clientipaddress = ''
 
 
 
 do case
  case !empty(sts)
  declare RtlMoveMemory in win32api string @dest, long Src, long BytesToCopy
  =rtlmovememory( @clientaddress, ppbuffer, nbytes)
  =wtsfreememory( ppbuffer )
 
 
  do case
  case left(clientaddress,1) == chr(af_inet)
  for i = 7 to 7+ 3
  clientipaddress = clientipaddress  + iif(empty(clientipaddress), '', ;
  '.') + transform(asc(substr(clientaddress, i, 1)))
  endfor
  endcase
 endcase
 
 
 && SessionId
 sts = wtsquerysessioninformation( ;
  wts_current_server_handle, ;
  wts_current_session, ;
  wtssessionid, ;
  @ppbuffer, ;
  @nbytes ;
  )
 sessionid = 0
 
 
 do case
  case !empty(sts)
  declare RtlMoveMemory in win32api long @dest, long Src, long BytesToCopy
  =rtlmovememory( @sessionid , ppbuffer, 4)
  =wtsfreememory( ppbuffer )
 endcase
 
 
 && ClientName
 sts = wtsquerysessioninformation( ;
  wts_current_server_handle, ;
  wts_current_session, ;
  wtsclientname, ;
  @ppbuffer, ;
  @nbytes ;
  )
 clientname = repl(chr(0), 255)
 
 
 do case
  case !empty(sts)
  declare RtlMoveMemory in win32api string @dest, long Src, long BytesToCopy
  =rtlmovememory( @clientname, ppbuffer, len(clientname))
  =wtsfreememory( ppbuffer )
  clientname = left(clientname, at(chr(0), clientname)-1)
 
 
  otherwise
  clientname = ''
 endcase
 
 endfunc
Reply all
Reply to author
Forward
0 new messages