Como hacer ping a Bitacoras.com ?

Iniciado por Diabliyo, 10 Marzo 2010, 18:12 PM

0 Miembros y 2 Visitantes están viendo este tema.

Diabliyo

Hola:

Tengo cuenta en Bitacoras.com y registrados 2 Feeds propios, pero no encuentro como hacer ping para que me indexen rapido (cuando cuelgue una noticia).

Antes (cuando bitacoras.com se caia mucho) para que me indexara solamente ejecutaba un javascript donde indicada la URL la pagina del ping, y automaticamente me hacia ping indexandome la noticia mas reciente (o conjunto de noticias), este script lo ejecutaba despues de colgar el post.

Pero ahora las cosas han cambiado en Bitacoras.com, han pasado ya unos 2 años que no entraba a Bitacoras.com y deje de actualizar mi antiguo blog, hace unas 2 semanas volvi a entrar a Bitacoras.com y me topo con que en mi perfil ya no existia mi antiguo blog, de tal modo que agregue mis 2 nuevos sitios, me aceptaron los sitios, pero no encuentro de que forma hacerle ping sin usar la opcion PING del sitio de bitacoras.com.

Quiero hacer el ping mas automatizado mediante javascript o PHP, pero la verdad no he deducido como :(....

Les palticare lo que he realizado para "intentar" hacer ping.

Accedi a la opcion PING (http://bitacoras.com/ping) y veo que nos re-direcciona a http://bitacoras.com/agregador/enviar, donde aparece un pequeno formulario, el cual invoca lo siguiente en html:
Código (html) [Seleccionar]
<form action="http://bitacoras.com/agregador/enviar" id="form-enviar" method="post">
<fieldset>
<legend>Indica la URL del blog o de la anotación</legend>
<input type="text" name="url" value="http://" class="text" style="width: 50%"  />
<select name="bitacora" style="width: 45%" id="bitacoras">
<option value="0">&#x2193; o elige una de tus bitácoras</option>
<option value="podcast.sie-group.net">http://podcast.sie-group.net</option>
<option value="lab.sie-group.net">http://lab.sie-group.net/</option>
</select>
</fieldset>

<input type="submit" name="enviar" value="Enviar" class="submit" id="boton-enviar"  />
<div id="loading" style="display: none;">
<img src="http://static2.bitacoras.com/images/icons/load.gif" alt="Cargando..."/>
El proceso puede tardar varios segundos, sé paciente...
</div>
<div>
<input type="hidden" name="token" value="1fa491a9f7ef9177fb3bedbc7bb77812" /></div>
</form>


Como vemos el formulario envia las variables a http://bitacoras.com/agregador/enviar mediante POST, en donde las variables son:
Variables:
- url --> debe contener la URL asi: http://sitio.com.
- bitacora --> debe contener la URL de la bitacora, de esta forma: sitio.com (omitimos http://).
- enviar --> debe contener: Enviar.
- token --> contiene un valor aleatorio generado por el sistema.


Asumiendo esto, y si hacemos una prueba manual, se asume que en un rango de tiempo no mayor a 1 minuto (los asumo, mas no me consta), el valor de la variable token debe estar disponible en el sistema para mandar el ping, asi que armo la URL manualmente y la pego al navegador, quedando dos formas de hacerlo:

// Forma 1
http://bitacoras.com/agregador/enviar/?url=http://misitio.com&bitacora=misitio.com&enviar=Enviar&token=1fa491a9f7ef9177fb3bedbc7bb77812

// Forma 2
http://bitacoras.com/agregador/enviar/url=http://misitio.com&bitacora=misitio.com&enviar=Enviar&token=1fa491a9f7ef9177fb3bedbc7bb77812


Y como resultado con ambas formas sale:

La URL que has indicado no es una URL válida. Comprueba que no contenga caracteres extraños y el dominio sea correcto...

Como ven ?, como se podria hacer manualmente ??...

Me interesa saber como hacerlo manualmente, de esta forma una vez sepa como, se puede hacer un codigo PHP que invoque sockets para hacer una consulta HTTP y obtener el valor de token, despues simplemente armamos la trama (URL) y hacemos la consulta completa.

Espero me haya explicado y me puedan ayudar !!

bye

Diabliyo

#1
Hola:

Creo que ya supe como :D, por favor alguien confirme mis sospechas....

He utilizado un sniffer (wireshark) capturando solo los paquetes que utilizan protocolo HTTP, y me he topado conque se genera una trama (envio o intercambio) al momento de que se pulsa el boton de Enviar (formulario para enviar bitacora) y encontre con que se envia esto:

Peticion del Socket: POST /agregador/enviar HTTP/1.1
--- DATOS DE PETICION ---
Host: bitacoras.com\r\n
Referer: http://bitacoras.com/agregador/enviar\r\n
Data: url=http%3A%2F%2FMI_SITIO.COM&bitacora=MI_SITIO.COM&enviar=Enviar&token=VALOR_GENERADO_POR_EL_SISTEMA


Solo me queda la duda de que si el sistema antes de aceptar la indexacion, compruebe que exista la session o cookie (tendria que hacer mis pruebas), pero como veo, la razon del porque la forma manual no funciono, es porque el referer no tenia la informacion que se especifica en la peticion del socket que les puse arriba.

Por favor, alguien que me confirme mis sospechas ?


MinusFour

Bueno, si miras un poco más abajo en este foro podrías usar el código que se usa para ataque por diccionario. El único inconveniente que veo es el de obtener el token y si usa alguna session o algo parecido.

Diabliyo

Cita de: MinusFour en 10 Marzo 2010, 19:31 PM
Bueno, si miras un poco más abajo en este foro podrías usar el código que se usa para ataque por diccionario. El único inconveniente que veo es el de obtener el token y si usa alguna session o algo parecido.

Y porque razon mencionas lo del ataque por diccionario ?... de que me serviria un ataque por diccionario :S ??... Si la idea es obtener el token y armas trama en sockets, hacer peticion y esperar un OK en HTTP (302).

Donde entra el diccionario ??


MinusFour

#4
No te digo que hagas un ataque por diccionario, te dije que revisaras el tema porque tiene código que te puede servir para lo que necesitas.

Hablo de esto:

Código (php) [Seleccionar]
<?

$host="www.tupagina.com";
$referer="http://referer.com";
$uri="/pagina.php";
$vars="&parametro1=valor1&parametro2=valor2";

$header = "Host: $host\r\n";
$header .= "User-Agent: Mosaic\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header.="Referer: $referer\r\n";
$header .= "Content-Length: ".strlen($vars)."\r\n";
$header.="Pragma: no-cache\r\n";
$header .= "Connection: close\r\n\r\n";

$fp = pfsockopen("tcp://".$host, 80, $errno, $errstr, 20);
fputs($fp, "POST $uri HTTP/1.1\r\n");
fputs($fp, $header.$vars);
while (!feof($fp)){
echo fgets($fp, 128)."<br>";
}
fclose($fp);
?>

Diabliyo

#5
Hola:

Gracias por aclararlo, lo que sucede es que ese codigo es el mismo que esta en los manuales php oficiales (php.net) y pues no le vi lo interesante :S.

Bueno continuando con mi problema y en busca de una solucion optima mediante sockets, estuve realizando un codigo que permita hacer ping a Bitacoras.com, pero con la finalidad que se pueda usar para hacer ping a cualquier sitio, mas que nada para todos aquellos que usamos nuestro propio CMS.

Retomando el tema y siguiendo la explicacion que di en el primer post, inicie a codificar (inicialmente) un socket en PHP que permita hacer peticiones POST y GET utilizando los sockets comunes (restringidos para hostings gratuitos).... Yo se que muchos diran "no uses sockets comunes, es ineficiente para los que tenemos hosting en internet", pero no se preocupen, son solo pruebas, la idea es que la aplicacion te permita crear peticiones utilizando los 3 tipos de sockets:

- Sockets.
- pSocket.
- pfSockets.

Asi que iniciare usando sockets (normal, comun).....




Primero el formulario que usaremos para hacer las pruebas:

Código (php) [Seleccionar]
<?php
echo '<form action="ping_index.php" method="POST">
Host: <input type="text" name="host">
<br>URL: <input type="text" name="url">
<br>Referer: <input type="text" name="referer">
<br>variables: <input type="text" name="vars">
<br>Mantener conexion: <select name="live"><option value="0"/>0<option value="1"/>1</select>
<br>Tipo de Socket: <select name="tipo_socket"><option value="1"/>Socket<option value="2"/>FSocket<option value="3"/>pFSocket</select>
<br>Flujo de Datos: <select name="stream"><option value="POST"/>POST<option value="GET"/>GET</select>
<br><input type="submit" value="Enviar" name="boton"> 
</form>'
;

if( isset(
$_POST["boton"]) && !strcmp$_POST["boton"], "Enviar") )
{
$datapingproteger_cadena($_POST["host"]), proteger_cadena($_POST["url"]), proteger_cadena($_POST["referer"]), proteger_cadena($_POST["vars"]), proteger_cadena($_POST["live"]), proteger_cadena($_POST["tipo_socket"]), proteger_cadena($_POST["stream"]) );

echo '<p>Recivido ['strlen($data). ']<br>'$data;
}
?>


Como vemos, al pulsar el boton de Enviar, se invoca la funcion proteger_cadena() y ping().

Funcion: proteger_cadena( $cadena )
Código (php) [Seleccionar]
<?php
function proteger_cadena$cadena )
{
return htmlentities($cadenaENT_QUOTES);
}
?>


Funcion: ping( $host, $url, $referer, $vars, $live, $type_connection, $accion )
Codigo: http://pastebin.com/ZuqNgVqC

Errores?
Si... Usando funciones socket (nomales) no consigo traer una pagina (cualquiera), obviamente uso mi localhost y tengo habilitado el uso de dichos sockets. Para ilutrarlo el ejemplo desde mi localhost, tengo una pagina que uso para ver informacion de mi equipo (IP, navegador, geolocalizacion, etc...) y es: http://sie-group.net/get_info.php, cuando accedes a dicha pagina se te muestra la informacion de tu maquina/equipo/navegador, de una forma textual y simple (sin estilos). Asi que intento traer dicha pagina usando el socket en php, pero no... me da este error:

Warning: socket_read() [function.socket-read]: unable to read from socket [104]: Connection reset by peer in
/home/diabliyo/public_html/onefloor/admin/ping_index.php on line 35


OJO: la linea 35 es donde se invoca la funcion socket_read(), en el codigo de arriba.

Podrian ayudar ???

Diabliyo

#6
Hola:

He modificado el codigo y aun continuo sin poder hacer una consulta GET o POST mediante sockets normales, solo he logrado hacerlo mediante pfsocket (tanto en mi localhost como en mi sitio en internet), pero no se como leer la informacion devuelta !!...

Vaya, mediante PHP he realizado:
GET /dime_hola.php HTTP/1.1\r\n
Host: misitio.com\r\n
User-Agent: MiPrograma\r\n
Keep-Alive: 300\r\n
Connection: keep-alive\r\n
Referer: misitio.com\r\n\r\n


Y recivo la informacion pero no me muestra mas que dos saltos de linea (\r\n\r\n), que de echo ni lo puedo ver a menos que le pase a dichos saltos de linea el htmlentities(), pero en si quiero el contenido del sitio, no entiendo porque no :S...

Les dejo la modificacion del codigo: http://pastebin.com/ZuqNgVqC