Página 1 de 2

Validación de licencias (Función PHP)

Publicado: 13 Nov 2009, 17:49
por arkcrew
Verán, tengo esta función en PHP que me gustaría convertir a autoit.

Código: Seleccionar todo


function checkData($user, $pass) {

  global $cfgTimeOut;

  global $nodv;

  global $nodt;



  $hosteset = "u24.eset.com";

  $socketnod = fsockopen($hosteset, 80, $errno2, $errstr2, $cfgTimeOut);

  $headerpath = "/download/engine3/em000_32_l0.nup";                  //Si no se especificó un tipo de versión, este será el preterminado



  if ($user == "" || $pass == "") return FALSE;                       //Si no nos mandaron un usuario o una contraseña, los datos son inválidos



  if ($nodt == "ess")                                                 //Para Eset Smart Security

  {

     $headerpath = "/download/engine3ess/em010_32_n1.nup";

  }

  elseif ($nodt == "essbe")                                             //Para Eset Smart Security Business

  {

     $headerpath = "/download/engine3ess/em010_32_n1.nup";

  }

  elseif (ereg('^2\..*',$nodv))                                       //Para cualquiera de las versiones 2.x

  {

     //$headerpath = "/download/engine/charon1.nup";

  }

  base64_encode("");                                                  //Inicializamos



  $header = "GET $headerpath HTTP/1.1\r\n" .

            "Host: $hosteset\r\n" .

            "Connection: Close\r\n" .

            "Authorization: Basic " . base64_encode($user . ":" . $pass) . "\r\n\r\n"

  ;



  if ($socketnod) {

    fputs($socketnod,$header);                                         //Mandamos el header

    while (!feof($socketnod)) {

      $datonod = fgets($socketnod, 4096);                              //Leemos los datos que entran

      $header = trim(trim($datonod,chr(10)),chr(13));

        if (ereg('^HTTP/[1-9]\.[0-9] 200 OK',$header)) {                 //Si todo fue bien (HTTP/x.x 200 OK)

        fclose ($socketnod);                                           //Cerramos el socket

        return TRUE;                                                   //Retornamos TRUE que indica que el usuario y password a revisar, son correctos y sirven

      }

      else {                                                           //Cualquier otro header (que por lo general es: HTTP/1.1 401 Authorization Required) indica error y la licencia no es válida

        fclose ($socketnod);

        return FALSE;

      }

    }

  }

  return FALSE;

}

 
Bueno, supongamos que las funciones del header location ya las tengo, ahora solo me quedaría validar la pass.

Código: Seleccionar todo


Func _Validar($user , $pass)

If @OSArch = "x64" Then

        $localconfig = "HKLM64\SOFTWARE\ESET\ESET Security\Currentversion\Plugins\01000400\Profiles\@My Profile"

    Else

        $localconfig = "HKLM\SOFTWARE\ESET\ESET Security\Currentversion\Plugins\01000400\Profiles\@My Profile"

    EndIf

    $currentuser = RegRead($localconfig, "Username")

    $currentpass1 = RegRead($localconfig, "Password")

    $currentpass = _codificar(StringReplace($currentpass1, "0x", "")) ; Convierto el pass desde binary a array normal

    $descarga = _INetGet("http://" & $user & ":" & $pass & "@u41.eset.com/download/engine3ess/em010_32_n1.nup"  , @tempdir & "\temp.dat" ,1,1)

    If $descarga = "Si" Then

        Return "Si"

    ElseIf $descarga = "No" Then

        Return "No"



    EndIf

endFunc

 
El problemas es que independienteente si la licencias es valida o no, muestra siempre que si, y no entiendo porque.

Alguna idea??

Un saludo.

Re: Validación de licencias (Función PHP)

Publicado: 13 Nov 2009, 18:44
por gna08
Bueno, haber, primero, que contiene el archivo k baja llamado em010_32_n1.nup,? :smt017
dependiendo de eso, pordes aplicar un valor a esa variante, sin contar k inetget no devuelve eso, !!

Re: Validación de licencias (Función PHP)

Publicado: 14 Nov 2009, 00:06
por arkcrew
El archivo es un archivo simplemente, un archivo de actualziación de ESET...

Re: Validación de licencias (Función PHP)

Publicado: 14 Nov 2009, 00:28
por gna08
OSea, cuando vos pones por ek INETGET este devuelve un valor, pero no devuelve ni SI ni NO, por eso te pregunto que contiene el archivo a descargar, para este compararlo..
EJ: el arcghivo dice, "error, not updates" entonces cuando hago

Código: Seleccionar todo


$archivo = _inetgetsource("ladireccion")

If $archivo =  "error, not updates" THen

  mSgBox(0,"","NO SE ENCOTRO ACTIALIZACIONESD")

Else

  mSgBox(0,"","Si se econtraron")

Endif
obvio k la variante $archivo deve contener "error, not updates" ( o segun sea lo que quieras comparar) Ok
No se si me explico?..

Re: Validación de licencias (Función PHP)

Publicado: 14 Nov 2009, 00:31
por gna08
Pero si comparo tu script, primeramte esta mal la parte de _Inetget, este devuelve o UNO o CERO si es erroneo,
entonces

If $descarga = "1" Then
Return "Si"

Asi etonces es ;)

Re: Validación de licencias (Función PHP)

Publicado: 14 Nov 2009, 11:22
por arkcrew
Ya, buyeno, es que lo extraje de otra función y no escribí todo....

La cosa está en qeu si el archivo se descarga la licencia es válida y si no lo hace pues.... Pero, como en mi navegador ya entre y descargue archivos en esa página, siempre recuerda el pass qeu yo puse, aunqeu navegue con otro pass, entonces siempre se descarga y no hay forma de saber cual pass esta bien y cual no.

Por eso utiliza esta funcion en PHP, la cual quiero passar a autoit ya que mi servidor se queda pillado de tantas conexiones


Un saludo

Re: Validación de licencias (Función PHP)

Publicado: 16 Nov 2009, 10:08
por Ximorro
¿Pero esa función _InetGet qué devuelve? Porque la original de AutoIe es InetGet, sin la barra inicial, ¿estás usando otra?

Por cierto, si devuelve 1 ó 0, pues compara con 1 ó 0, no con "1" o "0", ¿para qué pasarlo a cadena de caracteres?

Y de todas maneras InetGet te devolverá 1 si descarga algo correctamente, pero ten en cuenta que ese algo podría ser una página web indicándote un error, así que el hecho de que descargue algo no es garantía de que haya llegado lo que quieres, tendrás que analizarlo...

Re: Validación de licencias (Función PHP)

Publicado: 16 Nov 2009, 16:35
por arkcrew
Ah, es _inetget() porque es una funcion (Func _inetget() ) XD

La utilizo para acortar..

Re: Validación de licencias (Función PHP)

Publicado: 16 Nov 2009, 22:56
por gna08
Entonces se sooluciono el tema? :smt017

Re: Validación de licencias (Función PHP)

Publicado: 17 Nov 2009, 10:41
por Ximorro
Ya, ya entiendo que _InetGet() es una función, mi cuestión es si te habías dado cuenta de que existe en AutoIt nativo un InetGet(), no hace falta que te hagas otra función que hace lo mismo, puedes usar la que ya hay.
Otra cosa, naturalmente, es que tu _InetGet() tenga funcionalidad añadida a InetGet().

Re: Validación de licencias (Función PHP)

Publicado: 19 Nov 2009, 16:53
por arkcrew
es qeu en esa funciono solo se descargan archivos, sino hbria utilizado la inetget("url" , "salvaren" , 1,1) qeu trae autoit.

Porfavor, necesito pasar esto a autoit lo antes posible.. yo tambien miro, pero dos ojos ven más que uno NO¿?

Un saludo

Re: Validación de licencias (Función PHP)

Publicado: 19 Nov 2009, 16:59
por gna08
Pero ya te explique que para hacer esa comprobacion es necesario saber que ay en el archivo, o en su defecto, si descarga o no segun sea, aparte cada uno tenemos 2 ojos, asik seria 4 ojos :smt044
Saludos :smt023

Re: Validación de licencias (Función PHP)

Publicado: 19 Nov 2009, 17:20
por arkcrew
Es qeu no funciona..

Loq eu necesito es pasar la funcion casi literalmente..

Código: Seleccionar todo


MsgBox(0,"",_checkuser(123 , 123))



Func _checkuser($user , $pass)

  $hosteset = "89.202.157.226";"u24.eset.com"

  TCPStartup()

  $socketnod = TCPConnect($hosteset, 21)

  $headerpath = "/download/engine3/em000_32_l0.nup"

  $nodt = RegRead("HKLM64\Software\ESET\ESET Security\CurrentVersion\Info" , "ProductTipe")

  if $user = "" And $pass = "" then  return 0



  if $nodt == "ess" then

     $headerpath = "/download/engine3ess/em010_32_n1.nup"



  elseif $nodt == "essbe" then



     $headerpath = "/download/engine3ess/em010_32_n1.nup";

 Else

     $headerpath = "/download/engine3ess/em010_32_n1.nup"

 EndIf

TCPStartup()

;$a =  inetget("http://"&$user&":"&$pass&"@"&$hosteset&$headerpath , @TempDir & "\1.temp" ,1,1)

$a = TCPConnect($hosteset , 80)

If $a then return 1

EndFunc

 

Re: Validación de licencias (Función PHP)

Publicado: 19 Nov 2009, 20:51
por gna08
Bueno, mira, esta muy mal exprewsado, ya que lo que devuelve la mayoria de las funciones es o 1 o 0, en el caso de inetget, siempre devuelve 1 y 0, solo cero si no se pudo conectar, a lo que no ay forma de que automaticamente se de cuenta k no se puede, para ello ay que hacer algun metodo de comprension.. te lo modifique un poco y le agregue un par de cosas, vas a ver que te devuelve, segun sea el pass y el user..

Código: Seleccionar todo


MsgBox(0,"Esto devuelve la pagina!!!",_checkuser(123 , 123))



Func _checkuser($user , $pass)

    $hosteset = "89.202.157.226";"u24.eset.com"

    $headerpath = "/download/engine3/em000_32_l0.nup"

    $nodt = RegRead("HKLM64\Software\ESET\ESET Security\CurrentVersion\Info" , "ProductTipe")

    If $user = "" And $pass = "" Then  return 0

    If $nodt == "ess" Then

        $headerpath = "/download/engine3ess/em010_32_n1.nup"

    Elseif $nodt == "essbe" then

        $headerpath = "/download/engine3ess/em010_32_n1.nup";

    Else

        $headerpath = "/download/engine3ess/em010_32_n1.nup"

    EndIf

    $a = _INetGetSource("http://"&$user&":"&$pass&"@"&$hosteset&$headerpath); , @TempDir & "\1.temp" ,1,1)

    If $a Then

        $respuesta = _StringBetween($a, "<p>", "</p>")

        Return $respuesta[0]

    Else

        Return "No se conecto al servidor"

    EndIf

EndFunc



Func _StringBetween($sString, $sStart, $sEnd, $vCase = -1, $iSRE = -1)

    If $iSRE = -1 Or $iSRE = Default Then

        If $vCase = -1 Or $vCase = Default Then

            $vCase = 0

        Else

            $vCase = 1

        EndIf

        Local $sHold = '', $sSnSStart = '', $sSnSEnd = ''

        While StringLen($sString) > 0

            $sSnSStart = StringInStr($sString, $sStart, $vCase)

            If Not $sSnSStart Then ExitLoop

            $sString = StringTrimLeft($sString, ($sSnSStart + StringLen($sStart)) - 1)

            $sSnSEnd = StringInStr($sString, $sEnd, $vCase)

            If Not $sSnSEnd Then ExitLoop

            $sHold &= StringLeft($sString, $sSnSEnd - 1) & Chr(1)

            $sString = StringTrimLeft($sString, $sSnSEnd)

        WEnd

        If Not $sHold Then Return SetError(1, 0, 0)

        $sHold = StringSplit(StringTrimRight($sHold, 1), Chr(1))

        Local $avArray[UBound($sHold) - 1]

        For $iCC = 1 To UBound($sHold) - 1

            $avArray[$iCC - 1] = $sHold[$iCC]

        Next

        Return $avArray

    Else

        If $vCase = Default Or $vCase = -1 Then

            $vCase = '(?i)'

        Else

            $vCase = ''

        EndIf

        Local $aArray = StringRegExp($sString, '(?s)' & $vCase & $sStart & '(.*?)' & $sEnd, 3)

        If IsArray($aArray) Then Return $aArray

        Return SetError(1, 0, 0)

    EndIf

EndFunc   ;==>_StringBetween



Func _INetGetSource($s_URL, $s_Header = '')



    If StringLeft($s_URL, 7) <> 'http://' And StringLeft($s_URL, 8) <> 'https://' Then $s_URL = 'http://' & $s_URL



    Local $h_DLL = DllOpen("wininet.dll")



    Local $ai_IRF, $s_Buf = ''



    Local $ai_IO = DllCall($h_DLL, 'int', 'InternetOpen', 'str', "AutoIt v3", 'int', 0, 'int', 0, 'int', 0, 'int', 0)

    If @error Or $ai_IO[0] = 0 Then

        DllClose($h_DLL)

        SetError(1)

        Return ""

    EndIf



    Local $ai_IOU = DllCall($h_DLL, 'int', 'InternetOpenUrl', 'int', $ai_IO[0], 'str', $s_URL, 'str', $s_Header, 'int', StringLen($s_Header), 'int', 0x80000000, 'int', 0)

    If @error Or $ai_IOU[0] = 0 Then

        DllCall($h_DLL, 'int', 'InternetCloseHandle', 'int', $ai_IO[0])

        DllClose($h_DLL)

        SetError(1)

        Return ""

    EndIf



    Local $v_Struct = DllStructCreate('udword')

    DllStructSetData($v_Struct, 1, 1)



    While DllStructGetData($v_Struct, 1) <> 0

        $ai_IRF = DllCall($h_DLL, 'int', 'InternetReadFile', 'int', $ai_IOU[0], 'str', '', 'int', 256, 'ptr', DllStructGetPtr($v_Struct))

        $s_Buf &= StringLeft($ai_IRF[2], DllStructGetData($v_Struct, 1))

    WEnd



    DllCall($h_DLL, 'int', 'InternetCloseHandle', 'int', $ai_IOU[0])

    DllCall($h_DLL, 'int', 'InternetCloseHandle', 'int', $ai_IO[0])

    DllClose($h_DLL)

    Return $s_Buf

EndFunc   ;==>_INetGetSource

 
Salduos :smt023 Y SI KERES ADAPTARLO PARA OTRO CODE ME DECIS; :smt023

Re: Validación de licencias (Función PHP)

Publicado: 19 Nov 2009, 21:14
por Chefito
Mmmmm....la contraseña o el usuario (o las dos cosas) están mal porque no entra.
Una facil solución para ver si te ha bajado el archivo es utilizar InetGetSize para ver su tamaño. Si te devuelve 0 mal rollo :smt003 . Si te devuelve su tamaño es que ha podido conectar y lo ha visto. Y además, después de solucionarte lo de la conexión, después de haber bajado el archivo, puedes comprobar si coincide su tamaño con el que está en el servidor.

Hay otras formas más elegentas y tal, pero la anterior es facil y creo que bastante efectiva.

Saludos.

Re: Validación de licencias (Función PHP)

Publicado: 19 Nov 2009, 21:16
por gna08
Si chefito, pero el problema es que siempre devuelve algo.. osea k no se pude comprobar si el valor es cero.. Pero yo kreo que lo que le puse le va a servir, solo que tiene que adaptarlo a su code... :smt006

Re: Validación de licencias (Función PHP)

Publicado: 19 Nov 2009, 23:12
por Chefito
Que yo sepa no devuelve nada....y sobre todo en este caso, que el user o el password están mal. Cuando digo que no devuelve nada, quiero decir que InetGetSize devuelve 0, y en este caso @error=1. Tiene que encontrar el archivo para que te devuelva el tamaño.
Además, como dije anteriormente, sabiendo su tamaño, al terminar de bajarlo, puedes comprobar este tamaño con el del archivo que has bajado (con FileGetSize) y ver que sean iguales para verificar que se ha bajado bien. Esto no confirma que se haya bajado bien, pero es un pequeño seguro.

Tu forma está bien para decirte si has conectado con la página o no, pero has intentado bajarte un archivo con tu código? Te da error :smt002 . En cambio como digo yo solucionas lo de la conexión al servidor y lo del archivo con apenas código, y encima puedes verificar la bajada si quieres :smt003 .
Hay más formas, pero yo creo que con esta vale.....en muy simple y muy maja :smt023 .

Saludos.

Re: Validación de licencias (Función PHP)

Publicado: 19 Nov 2009, 23:39
por gna08
Si kisas tenes razon chefito, pero lo que yo no se es que no se que lo que quiere hacer, va, no le entiendi :smt021
jeje
Saludos

Re: Validación de licencias (Función PHP)

Publicado: 23 Nov 2009, 18:46
por arkcrew
El problema no es que devuelva o no devuelva..
Es que al utilizar el comando inetget() siempre me descarga el archivo aunqeu la contraseña qeu ponga sea inválida,, ese es el problema-- que al hacerlo con el php no sucede pero al hacerlo en autoit..

he probado casi todo. pero no hay manera.

Re: Validación de licencias (Función PHP)

Publicado: 24 Nov 2009, 02:36
por gna08
AHHH HHHH vos decis k no lo valida al pass y user.. oaSea. siempre siempre te da como k no tenes acceso :smt017
Es asi????
Saludos :smt006