elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 04:49  


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)

+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP
| | | |-+  [Reto][PHP] Bot http
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Reto][PHP] Bot http  (Leído 711 veces)
lnvisible


Desconectado Desconectado

Mensajes: 456



Ver Perfil
[Reto][PHP] Bot http
« en: 25 Diciembre 2011, 14:45 »

Hay un tipo de retos incrementales que son más productivos que los retos habituales.

http://en.wikipedia.org/wiki/Cutting_contest
http://en.wikipedia.org/wiki/Guitar_battle

Esto es un reto a ese estilo, consiste en ir añadiendo algo al bot para hacerlo más parecido a una persona en la navegación (con cookies, con referer, con todo eso), además para que sea más fácil indicarle los parámetros que tiene que rellenar (por ejemplo muchos formularios tienen campos hidden, podría rellenarlos él mismo), para que sea más fácil parsear el html después, para que sea más fácil usar proxies... el límite lo pone vuestra imaginación.

Creo que puede ser un reto interesante, entretenido, productivo y del que todos saquemos el divertirnos, un código interesante y aprender y hacer algo útil. Vosotros diréis.

Aquí tenéis un ejemplo de cómo podría empezarse, veremos si alguien continua o no, en unos días pondré una mejora si nadie se anima, y con eso espero que ya sí se anime alguien.

Código
class PHPBot {
 
   function PHPBot (){
     $this->ch = curl_init();
     $ch = $this->ch;
     curl_setopt($ch, CURLOPT_HEADER, 1); // Include headers in response or not
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Return (don't print) answer of exec
     curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12");
     curl_setopt($ch, CURLOPT_AUTOREFERER, true); // Isn't this great?
     curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: */*', 'Accept-Language: en-us,en;q=0.5', 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7'));      
   }
 
   private function act($url, $params = false){
     $ch = $this->ch;
     curl_setopt($ch, CURLOPT_URL, $url);
     if ($params != false){
       curl_setopt($ch, CURLOPT_POSTFIELDS, $this->myurlencode($params));
       curl_setopt($ch, CURLOPT_POST, 1);
     }
     else
       curl_setopt($ch, CURLOPT_POST, 0);
     $r = curl_exec($ch);
     return $r;
   }
 
   private function myurlencode($dict){
     $r = "";
     foreach($dict as $key => $value)
       $r = $r.urlencode($key).'='.urlencode($value).'&';
     return $r;
   }
 
   function get ($url){
     return $this->act($url);
   }
 
   function post($url, $params){
     return $this->act($url, $params);
   }
 
 }


« Última modificación: 25 Diciembre 2011, 14:50 por lnvisible » En línea

drvy | BSM


Desconectado Desconectado

Mensajes: 1.129


badstupidmonkey


Ver Perfil WWW
Re: [Reto][PHP] Bot http
« Respuesta #1 en: 27 Diciembre 2011, 02:11 »

Añado una función para parsear un string, recoger todo lo que empiece con http (links) y devolverlo en un array.

Código
class PHPBot {
 
   function PHPBot (){
     $this->ch = curl_init();
     $ch = $this->ch;
     curl_setopt($ch, CURLOPT_HEADER, 1); // Include headers in response or not
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Return (don't print) answer of exec
     curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12");
     curl_setopt($ch, CURLOPT_AUTOREFERER, true); // Isn't this great?
     curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: */*', 'Accept-Language: en-us,en;q=0.5', 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7'));      
   }
 
   private function act($url, $params = false){
     $ch = $this->ch;
     curl_setopt($ch, CURLOPT_URL, $url);
     if ($params != false){
       curl_setopt($ch, CURLOPT_POSTFIELDS, $this->myurlencode($params));
       curl_setopt($ch, CURLOPT_POST, 1);
     }
     else
       curl_setopt($ch, CURLOPT_POST, 0);
     $r = curl_exec($ch);
     return $r;
   }
 
   private function myurlencode($dict){
     $r = "";
     foreach($dict as $key => $value)
       $r = $r.urlencode($key).'='.urlencode($value).'&';
     return $r;
   }
 
   private function get_urls($context){
$query = '/http?\:\/\/[^\" ]+/i';
preg_match_all($query,$context,$result);
return $result[0];
   }
 
   function get ($url){
     return $this->act($url);
   }
 
   function post($url, $params){
     return $this->act($url, $params);
   }
 
 }
 
 

Saludos


« Última modificación: 27 Diciembre 2011, 02:14 por drvy | BSM » En línea
lnvisible


Desconectado Desconectado

Mensajes: 456



Ver Perfil
Re: [Reto][PHP] Bot http
« Respuesta #2 en: 27 Diciembre 2011, 03:28 »

Muy bien, pero en ocasiones los links pueden no ser absolutos sino relativos y aparecer sin http. Añado una función para recoger los links (absolutos y relativos) pero sólo cuando son enlaces a otras páginas, no los que son a imágenes ni otras cosas.

A ver si más gente se anima  :D

Código
class PHPBot {
 
   function PHPBot (){
     $this->ch = curl_init();
     $ch = $this->ch;
     curl_setopt($ch, CURLOPT_HEADER, 1); // Include headers in response or not
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Return (don't print) answer of exec
     curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12");
     curl_setopt($ch, CURLOPT_AUTOREFERER, true); // Isn't this great?
     curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: */*', 'Accept-Language: en-us,en;q=0.5', 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7'));      
   }
 
   private function act($url, $params = false){
     $ch = $this->ch;
     curl_setopt($ch, CURLOPT_URL, $url);
     if ($params != false){
       curl_setopt($ch, CURLOPT_POSTFIELDS, $this->myurlencode($params));
       curl_setopt($ch, CURLOPT_POST, 1);
     }
     else
       curl_setopt($ch, CURLOPT_POST, 0);
     $r = curl_exec($ch);
     return $r;
   }
 
   private function myurlencode($dict){
     $r = "";
     foreach($dict as $key => $value)
       $r = $r.urlencode($key).'='.urlencode($value).'&';
     return $r;
   }
 
   private function get_urls($context){
$query = '/http?\:\/\/[^\" ]+/i';
preg_match_all($query,$context,$result);
return $result[0];
   }
 
   function getLinks ($url){
     $dom = new DOMDocument();
     $p = $this->act($url);
     $dom->loadHTML(mb_convert_encoding($p, 'utf-8'));
     $links = $dom->getElementsByTagName('a');
     foreach($links as $l)
       $r[] = $l->getAttribute('href');
     return $r;
   }
 
 
   function get ($url){
     return $this->act($url);
   }
 
   function post($url, $params){
     return $this->act($url, $params);
   }
 
 }
 
 
En línea

DonVidela


Desconectado Desconectado

Mensajes: 1.617



Ver Perfil WWW
Re: [Reto][PHP] Bot http
« Respuesta #3 en: 23 Enero 2012, 14:50 »

Podrían comentar el codigo para explicar bien lo que hace, hay gente como yo que sabe la sintaxis de php pero no conoce bien las funciones porque no suele programar en ese lenguaje xD , de antemano, gracias.

Espero no haber estorbado acá.
En línea

Aprendiendo: Java , C# , pl/sql, mysql , sql server, PHP , Access, JSF, Facelets, JSP, CakePHP, JQuery

http://pablovidela.wordpress.com
lnvisible


Desconectado Desconectado

Mensajes: 456



Ver Perfil
Re: [Reto][PHP] Bot http
« Respuesta #4 en: 24 Enero 2012, 20:10 »

Puedes hacer click en las funciones que no conozcas y te lleva directamente a la documentación. :D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
identificacion http « 1 2 »
Desarrollo Web
MinusFour 15 818 Último mensaje 11 Mayo 2005, 20:01
por el-brujo
DIF ENTRE http://www.midom.com/section1/ y http://www.midom.com/section1
Desarrollo Web
Nabucodonosor 2 375 Último mensaje 7 Septiembre 2005, 16:38
por Nabucodonosor
HTTP
Programación General
Ragnarok 8 668 Último mensaje 29 Septiembre 2005, 21:06
por Crack_X
nod32 v3.x.x y los servidores "http://raw1.dperu.org y http://raw2.buscardetodo"
Seguridad
edu2vb 2 3,615 Último mensaje 14 Febrero 2008, 05:20
por Zinc
reto:Hack-Web_Spoof+cabecera del protocolo http+añadir ip
WarZone
ruben_linux 5 1,658 Último mensaje 18 Agosto 2011, 15:37
por ruben_linux
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines