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,?
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?
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
Saludos
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
Y SI KERES ADAPTARLO PARA OTRO CODE ME DECIS;
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
. 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...
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
. 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
.
Hay más formas, pero yo creo que con esta vale.....en muy simple y muy maja
.
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
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
Es asi????
Saludos