Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Login con proveedor de internet (https://www.clubdelphi.com/foros/showthread.php?t=89744)

FideRosado 28-01-2016 03:51:01

Login con proveedor de internet
 
Hola amigos del foro, aca les traigo un reto tanto personal como profecional,hace unos meses en mi ciudad de instalaron unos equipos para la conexion wifi de acceso publico,pero ojo,no gratis, el sistema funciona con autentificacion del wirewall, usando un portal cautivo,quizas con pfSense, bueno no lo se del todo, pero si se que hay pasos que hay que completar para autenticarce a travez de la web de ese portal.

Un amigo me comento de cierto programa en android que hace la autenticacion,pero yo me propongo hacer uno para windows,pero yo no cuento con el conocimiento avanzado qque mucho de ustedes tienen, por eso creare este hilo para que entre todos aporten y me corrijan lo que ire haciendo.

ire tirando un poco de codigo aqui para que ustedes vean de que se trata y mientras pueden decirme que hacer.

Usando un ejemplo de un downloader de indy descargue la pagina de acceso aunke solo me devuelve cierta informacion indispensable para comenzar.

cuando accedemos a la web del proveedor:
http://login.serviciowifi.cu:8080/showlogin.do

nos devuelve esto

Código PHP:

<html><body>
<form name="CMCCWLANFORM" method="post" action="http://login.nauta.cu:8080/showlogin.do">  
  <input type="hidden" name="wlanuserip" value="100.68.33.178">  
  <input type="hidden" name="wlanacname" value="">
  <input type="hidden" name="portalurl" value="http://login.nauta.cu:8080/showlogin.do">  
  <input type="hidden" name="wlanparameter" value="d339387934a89b9a023fc18f8adbcac7e4b2f40fb76c7657">
</form>
  <script language='javascript'>CMCCWLANFORM.submit();</script>
  </body>
</html>
<!--
<?xml version="1.0" encoding="UTF-8"?>
<WISPAccessGatewayParam  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:noNamespaceSchemaLocation="http://www.acmewisp.com/WISPAccessGatewayParam.xsd">
<Proxy>
<MessageType>110</MessageType>
<NextURL>http://login.nauta.cu:8080/showlogin.do?wlanuserip=100.68.33.178&wlanacname=&wlanparameter=d339387934a89b9a023fc18f8adbcac7e4b2f40fb76c7657</NextURL>
<ResponseCode>200</ResponseCode>
</Proxy>
</WISPAccessGatewayParam>
-->


Ñuño Martínez 28-01-2016 13:19:57

Qué raro esa respuesta. Genera un formulario invisible y lo envía automáticamente y sin espera. Y encima, con un XML comentado (y por tanto, inútil). :confused:

FideRosado 28-01-2016 21:50:08

respuesta
 
Asie es, muchos no se dan uante porke pasa muy rapido, luego te envia a una web que te muestra otro form pero con mas dattos oultos, miren aca.

Código PHP:

ESTOS SON LOS VALORES NECESARIOS DEL FORMULARIO los limpie un poco de todo su estilo html pero es lo mismo.

<
form class="form" action="https://login.nauta.cu:8443//LoginServlet" method="post" id="formulario">
<
input type="hidden" name="wlanuserip" id="wlanuserip" value="100.68.33.178"/>
<
input type="hidden" name="wlanacname" id="wlanacname" value=""/>
<
input type="hidden" name="wlanmac" id="wlanmac" value="" />
<
input type="hidden" name="firsturl" id="firsturl" value="notFound.jsp" />
<
input type="hidden" name="ssid" id="ssid" value="" />
<
input type="hidden" name="usertype" id="usertype" value="1" />
<
input type="hidden" name="gotopage" id="gotopage" value="/nauta_etecsa/LoginURL/pc_login.jsp" />
<
input type="hidden" name="successpage" id="successpage" value="/nauta_etecsa/OnlineURL/pc_index.jsp" />
<
input type="hidden" name="loggerId" id="loggerId" value="20160126173347869" />
<
input type="hidden" name="lang" id="lang" value="es_ES" />
<
input type="text"   name="username" id="username" maxlength="253" class="input_text cred" >
<
input type="password" name="password" id="password" class="input_text cred" value="">
<
input type='hidden' name='CSRFToken_HW' value='e6b45eb31911c24279cf1f1d20d68917' />

CHEKEANDO EL LOGIN
<input class="btn" name="Enviar" value='Aceptar' type="button" onclick="checkLogin();">
</
form>

FUNCIONES PARA  DE LOGIN

function sendUserInfoForm(){
    var 
url '/EtecsaQueryServlet';
    var 
= $$("username");
    var 
= $$("password");
    if (
== null || b.value == "") {
        
alert(JSLocale.username_null);
        
b.focus();
        return 
false;
    }
    if (
== null || a.value == "") {
        
alert(JSLocale.pwd_null);
        
a.focus();
        return 
false;
    }
    $(
'#formulario').attr('action'url);
    $(
'#formulario').submit();
}

FUNCIONES EXTERNAS

var JSLocale =
{
    
username_null "Por favor introduce tu usuario",
    
pwd_null "Por favor introduce tu contraseña",
    
verifycode_null "Por favor introduce el código de verificación",
    
varify_wrong "Los caracteres introducidos no coinciden con la imagen",
    
end "" // end sign,no meaning
}


function $$(
a) {
    return 
document.getElementById(a);
}
function 
checkLogin() 
{
    var 
= $$("username");
    var 
= $$("password");
    var 
d=$$("validate");
    if (
== null || b.value == ""
    {
        
alert(JSLocale.username_null);
        
b.focus();
        return 
false;
    }
    if (
== null || a.value == ""
    {
        
alert(JSLocale.pwd_null);
        
a.focus();
        return 
false;
    }
    if(
d!=null)
    {
        if(
d.value=="")
        {
            
alert(JSLocale.verifycode_null);
            
d.focus();
            return 
false
        
}
        else
        {
            var 
c=d.value;
            
DWREngine.setAsync(true);
            
VerifyCode.checkJS(c,check_callback)
        }
    }
    $$(
"formulario").submit();
}
function 
switchLang(b) {
    
document.getElementById("lang").value=b;
    
document.getElementById("currentURL").value=currentURL;
    var 
changelang document.getElementById("changelang");
    
changelang.action "/changelang.do";
    
changelang.submit();
}
function 
RefreshImage(validate)
{
    var 
el = $$(validate+"img");
    
el.src '/verifycode?' Math.random(); //[false alarm:Insecure Randomness]
    
$$("validate").value="";
}

function 
check_callback(a)
{
    if(
0>a)
    {
        
alert(JSLocale.varify_wrong);
        $$(
"validate").value="";
        
RefreshImage("validate0");
        $$(
"validate").focus();
    return 
false
    
}
    else
    {
        $$(
"formulario").submit()
        return 
true
    
}



FideRosado 28-01-2016 21:57:27

TidHTTP para empesar
 
Creo que seria bueno empesar a usar este componente TidHTTP para tirar peticiones al servidor y ver que pasa. que me aconsejan, aunque creo que tendria que usar unas funciones para obtener los datos necesarios antes de enviar algo

Ñuño Martínez 29-01-2016 13:17:06

Yo el mayor problema que veo es el analizar el HTML para saber qué campos tiene cada formulario. A partir de ahí no debería ser difícil generar una petición que envíe los datos apropiados.

Claro que el tema del JavaScript también es peliagudo, ya que a veces se usa para modificar o montar las peticiones, en lugar de que sea el <form > quien lo haga. Aunque por lo que he visto parece que aquí sólo se usa para comprobar los datos antes de enviarlos (por ejemplo, que no haya campos vacíos), pero al ser jQuery no quiero asegurarlo (ya es difícil con algunos JavaScript "limpios", como para encima intentar adivinarlo si se usa jQuery).

Mi recomendación es que, si es posible, te pongas en contacto con los propietarios/autores de la página y preguntarles a ellos. Quizá se pueda usar un web-service o similar que te facilitaría mucho las cosas.

FideRosado 30-01-2016 05:45:29

Jquery
 
Con respecto a eso pues si ya veo que usa jquery en la web tambien vere de que forma la aislo eso del proyecto,modifico las funciones , y como dices es importante ver de que forma se obtiene determinado valor del html, estaba pensando convertirlo en un String para despues enontrar as posiciones de los objetos dentro del form, por suerte no hay mucha diferencia, solo queda programar.

aeff 18-04-2016 22:30:22

Saludos amigos, hace un mes mas o menos logre hacer esto, prepare una clase que recupera esos formularios con una instancia de TIdHTTP, y analizo las respuestas con expresiones regulares para extrear la informacion de los formularios y posteriormente reenviarla al proximo URL, o sea: 1 - Formulario CMCCWLANFORM, 2 - Formulario de logueo, y finalmente cuando accedes te responde un pagina con informacion sobre la URL que debes consultar, por ejemplo, el "loggerid" y el "ATTRIBUTE_UUID" entre otros que por supuesto extraigo con expresiones regulares como les conte.

Bueno ahora, presento un problema que no comprendo, a veces trato de hacer la solicitud del formulario y el provedor no me responde, esto desde una PC conectada al Punto de Acceso, sin embargo, en ese mismo momento con un Smartphone hago la peticion de la URL por el browser y si me responde, alguien tiene alguna idea de que puede estar sucediento?

muchas gracias antemano.
aeff!

FideRosado 01-05-2016 09:46:41

respuesta
 
el error debe estar al usar el componente tidhttp

Casimiro Notevi 01-05-2016 09:54:55

Cita:

Empezado por aeff (Mensaje 504466)
Saludos amigos

Para otra ocasión, crea un hilo nuevo con tu pregunta.
En este hilo, y en cualquier otro, solamente debes participar para colaborar en ayudar al que inició el hilo, no para hacer tus propias preguntas.
Gracias :)


La franja horaria es GMT +2. Ahora son las 14:43:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi