elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Espameando a fotolog en C#
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Espameando a fotolog en C#  (Leído 9,690 veces)
Nork

Desconectado Desconectado

Mensajes: 196



Ver Perfil
Espameando a fotolog en C#
« en: 22 Agosto 2008, 14:35 pm »


  • Presentación
  • Conceptos básicos
  • Resumen de lo que haremos
  • Ver código por funciones
  • Despedida
Presentación
 
Hola a todos, bueno pues en este artículo os voy a intentar mostrar una de las maneras para crear un bot en C#. En este caso nuestra victima será la página fotolog ya que nos puede ser útil para hacer publicidad o cualquier cosa que os ocurra. No se pretende que ahora quede inservible la página o que este llena de bots ya que para eso os tendréis que saltar el captcha y es una cosa que no daremos aquí. Este artículo es, como siempre, de información para asegurar nuestras aplicaciones web contra estos programas. Dicho esto vamos a ver los conceptos básicos para luego entender todo lo que sigue.

Conceptos básicos
 
HTTPWEBREQUEST
 
Según Microsoft, la comenta de la siguiente manera:
 
La clase HttpWebRequest hace que se admitan las propiedades y los métodos definidos en WebRequest y que las propiedades y los métodos adicionales permitan al usuario interactuar directamente con servidores que utilicen HTTP.
 

Tengo que decir que esta clase sin su acompañante HTTPWebResponse no haría mucho en este artículo sólo que por comodidad y estética me referiré únicamente a HttpWebRequest [HWR].
 
Sistema de cookies en HWR
 
Un tema esencial para crear este tipo de bots es utilizar las cookies para navegar por los directorios del dominio logueado. En este punto puede crear confusiones de cómo realmente funcionan las cookies en esta clase por lo que intentaré explicarme lo mejor que pueda.
 
Primero de todo necesitamos declarar un “espacio” para guardar todas las cookies que necesitemos, en HWR es así:
 
Código
  1. CookieContainer misgalletas = new CookieContainer();
   
Ahora imaginemos que “misgalletas” es una jarra vacía, como esta:

Ya tenemos nuestra jarra vacía preparada para llenarla. Ahora tenemos que hacer saber a la petición, que se comunicará con el servidor, que tiene a su disposición una jarra donde puede guardar todas las cookies. Es decir, así:

Código
  1. peticion.CookieContainer = miscookies;

Ahora ya sabe  petición donde tiene que meter las cookies que le mande el servidor. La petición añadirá las cookies a la jarra de esta manera:

Código
  1. misgalletas.Add(peticion.Cookies);

Ahora ya tenemos en la jarra las cookies que nos mando el Server al loguarnos, un dibujo resumen:


Espero que aunque sea “bastante” malo se pueda entender xD Ahora ya sabemos (o eso espero) como se puede trabajar con las cookies.

Argumentos que puedes necesitar en una petición POST

En una petición POST aparte del header de la petición donde se encuentra el user-agent, content-lenght y demás hay a veces que el servidor necesita de argumentos para rellenar las variables[/FONT]. Aunque es algo bastante fácil haré un breve resumen de cómo se pueden obtener dichos argumentos. Ya que la idea es aprender el concepto y en cada servidor te puede pedir a rellenar variables distintas.

En este caso yo usaré mozilla firefox y el addon Tamper Data. El tamper lo podéis descargar de aquí:

https://addons.mozilla.org/en-US/firefox/addon/966

Este programa trabaja como un Proxy, es decir, estará entre el cliente (tu) y el servidor (la página) analizando el trafico http que haya y dando la posibilidad de modificar las cabeceras y los parámetros.

Para activar la herramienta (estando ya delante de su interfaz) le daremos a comenzar modificación y a partir de ahí en cada petición saliente nos dará 3 opciones; modificar, podremos cambiar los parámetros de envío, enviar, se enviará la petición por defecto y abortar petición.

Argumentos para la petición POST de logueo

Ahora necesitamos ponernos en la página de logueo del fotolog, es decir, esta:

http://account.fotolog.com/login


Una vez ahí activaremos nuestro tamper data “Comenzar modificación”. No cal poner ningún valor de momento. Ahora nos saldrán las 3 opciones y le damos a modificar. Dejo una screen para que veáis los datos que tenemos que tener en cuentra:


En verde tenemos el header de la petición, ahí de momento no nos sirve nada. En rojo tenemos los parámetros que tenemos que rellenar y como podemos observar estos son; redirect, u_name y p_word. Esto no hay que olvidar que son variables y que cuando hagamos la petición lo que realmente haremos será:

Código:
account.fotolog.com/login?redirect=&u_name=TUUSUARIO&p_word=TUPASSWORD

Esto lo digo porque después, al comenzar a escribir en C# los argumentos se escribirán de esa manera y lo que tendremos que hacer será formar una string con todo esto, por lo que no hay que olvidar el carácter “&” a partir de la segunda variable.

Argumentos para la petición POST para dejar un mensaje

Vamos a ver que argumentos tenemos que enviar junto con la petición. Dejaré ya directamente la screen del Tamper Data y pasaré a comentar un valor un tanto peculiar.


Vemos que aquí los parámetros son; ajax, t y message. Deducimos que message es el mensaje ya que he escrito “e” en el formulario :P, ajax tiene el valor de true por lo que podemos pensar que será algo así como una “variable boolean” (aunque ya te digo que siempre será true). El parámetro que nos puede resultar algo mas confuso es “t”.

Te explicaré como he hecho yo para sacar el valor y deducir que es así no perdemos tanto tiempo.
Lo primero que hay que hacer es mirar el código fuente de la página. Para eso vamos a mirar cualquier fotolog y observamos en el form de posteo lo siguiente:

Código:
<form id="gb_post_form" action="/gb.post" method="POST">
        <input type="hidden" name="t" value="vPhoYDt86DsIcXowvUvEja2GF+XP55ahtn0jBTqBcny6DkbhDZtEhSmrxVbXlhb6tILleUf4Ezr6LD5IdJ4G3K+0duMa5PaMUanZpRXNWhO25cn2qgW/WjCiMyQQtQGRhme6">
        <h3>Deja un mensaje en el libro de visitas:</h3>
        <div id="counter">&darr; <var>1500</var> caracteres restantes</div>
        <textarea name="message" rows="8" cols="40" id="guestbookMessage">   
        </textarea>       
        <div id="message_limit" class="limit">Límite de 1500 caracteres</div>       
       <div style="margin-top: .4em;">               
       <button class="btSubmit0" type="submit">Dejar tuMensaje</button>               
        <img src="http://si.fotolog.com/i67/images/icon_ajax_bar.gif" id="gbAjaxIndicator">       
</div></form> 

Como podemos observar hay un valor oculto en este form y precisamente se llama “t”. También vemos (yo ya lo he hecho) que si vamos a un fotolog distinto y miramos, tendremos otro valor de “t”, por lo que deducimos que este valor se asocia al fotolog a postear ya que si no el servidor no sabría en cual queremos postear. Cal decir que este valor cambia bastante rápido por lo que necesitaremos sacarlo en el momento del posteo mediante expresiones regulares.

Creo que habiendo leído esto ya entenderemos el código y como trabaja un poco el servidor.

Resumen de lo que haremos

Creo que antes de ponernos a ver código hay que pensar y estructurar un poco como vamos hacer las cosas.[/FONT]
 
La idea principal es que el programa sea autónomo y él solo vaya navegando por el fotolog sin que nosotros tengamos que interferir. Para eso vamos a partir de un fotolog cualquiera y a partir de ahí mediante expresiones regulares sacaremos los amigos de este y haremos esto todo el rato.

Sé que estaréis pensando “¿Y si alguien no tiene amigos agregados?” (Si no lo pensabais ahora tenéis esa duda así que xD) Bien, si alguien no tiene amigos nosotros daremos al programa unos cuantos fotologs de reserva que primeramente habremos mirado que tengan bastantes amigos agregados y en el caso que no encuentre en el fotolog que este mirando pasaremos a usar esos de “reserva”.

Teniendo mas o menos una idea ya creo que podemos pasar a ver el código.

Ver código por funciones:

Vamos a ver la función de logueo:

Código
  1. static CookieContainer sesion(string user, string pass)
  2.          {
  3.              //PASAMOS LAS PROPIEDADES A VARIABLES
  4.              HttpWebRequest peticion;
  5.              HttpWebResponse respuesta=null;
  6.              CookieContainer misgalletas = new CookieContainer();
  7.  
  8.              string url = "http://account.fotolog.com/login"; //Sitio donde enviaremos la petición.
  9.              string argumentos = string.Format("redirect=" + user + "&u_name=" + user + "&p_word=" + pass); //Los argumentos
  10.              byte[] encodearg = Encoding.ASCII.GetBytes(argumentos);//pasamos a bytes los argumentos
  11.              peticion = (HttpWebRequest)WebRequest.Create(url);//Creamos la petición a la url que indiquemos arriba            peticion.Referer = "http://www.fotolog.com"; //Ponemos un refer de fotolog por poner algo xd
  12.              peticion.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13"; //Le decimos al server que navegamos con el explorador Mozilla
  13.              peticion.AllowAutoRedirect = true; //Permitimos que nos redirecione ATENCIÓN aquí puede cambiar según el sistema de logueo pero en este caso si no lo permites no te loguea
  14.              peticion.CookieContainer = misgalletas; //Explicado
  15.              peticion.Method = "POST"; //El metodo sera POST y no GET
  16.              peticion.ProtocolVersion = HttpVersion.Version10; //Usaremos la version10
  17.              peticion.ContentType = "application/x-www-form-urlencoded"; //Códificamos los datos a enviar, aquí tener cuídado según el servidor tmb
  18.              peticion.ContentLength = encodearg.Length; //Calculamos el tamaño de los argumentos
  19.  
  20.              Stream canal = peticion.GetRequestStream();//Creamos un canal para el envio y recibo de datos con el servidor
  21.              canal.Write(encodearg, 0, encodearg.Length); //Enviamos datos
  22.              canal.Flush();
  23.              canal.Close(); //Limpiamos y cerramos
  24.  
  25.              try //INTENTAMOS OBTENER RESPUESTA
  26.              {
  27.                  respuesta = (HttpWebResponse)peticion.GetResponse(); //Cogemos lo que nos ha enviado el servidor
  28.              }
  29.              catch (Exception ex) //EN EL CASO DE NO SER POSIBLE...
  30.              {
  31.                  Console.WriteLine(ex.Message); //DEVOLVEMOS EL MENSAGE DE ERROR
  32.              }
  33.  
  34.              misgalletas.Add(respuesta.Cookies); //AGREGAMOS A LA "JARRA" LAS COOKIES GENERADAS
  35.  
  36.              respuesta.Close(); //Cerramos
  37.              return misgalletas; //Devolvemos las cookies generadas
  38.          }

El código esta comentado lo mejor que he podido, si hay alguna duda se pregunta y ya esta ;).

Ahora la función para sacar el valor de t:

Código
  1. static string t(string urls, CookieContainer miscookies)
  2.          {
  3.              HttpWebRequest hRequest = ((HttpWebRequest)WebRequest.Create("http://www.fotolog.com/"+urls));Creamos la petición al fotolog que nos pasaron como argumentos
  4.              hRequest.CookieContainer = miscookies; //Utilizamos la misma jarra que cuando el logueo ;)
  5.              hRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13";
  6.              StreamReader reader = new StreamReader(hRequest.GetResponse().GetResponseStream()); //El canal para mantener la comunicación con el servidor
  7.              string devuelto = reader.ReadToEnd();//Aquí todo lo que nos ha respondido el servidor lo ponemos en un string
  8.              reader.Close();
  9.  
  10.              try
  11.              {
  12.                  //Conseguimos el valor de t para saber donde postear y mantener la sessión
  13.                  string str = devuelto;
  14.                  int first = str.IndexOf("/gb.post");
  15.                  first += 63;
  16.                  int last = str.LastIndexOf("<h3>Leave a Guestbook Message:");
  17.                  string str2 = str.Substring(first, last - first);
  18.                  last = str2.LastIndexOf(">");
  19.                  string td = str2.Substring(0, last - 1);
  20.  
  21.                  //Remplazar los caracteres especiales a hexadecimales
  22.                  td = td.Replace("+", "%2B").ToString();
  23.                  td = td.Replace("=", "%3D").ToString();
  24.                  td = td.Replace("-", "%27").ToString();
  25.                  td = td.Replace("/", "%2F").ToString();
  26.  
  27.                  return td;
  28.              }catch{
  29.                  return "NADA";
  30.              }
  31.          }

Voy a explicar la parte del código en la que se obtiene el valor:

Código
  1.                  string str = devuelto;
  2.                  int first = str.IndexOf("/gb.post");
  3.                  first += 63;
  4.                  int last = str.LastIndexOf("<h3>Leave a Guestbook Message:");
  5.                  string str2 = str.Substring(first, last - first);
  6.                  last = str2.LastIndexOf(">");
  7.                  string td = str2.Substring(0, last - 1);

Primero de todo en la variable int first conseguimos el número entero que se encuentra la cadena de caracteres “/gb.post”. Pongamos que se ha localizado en el número de carácter 200. Int last contiene tambien un valor de donde se encuentra la cadena <h3>Leave a Guestbook Message:
Pongamos en el ejemplo que se ha encontrado en el numero 100 ( ya que LastIndexOf indica que comience desde el último carácter).

Ahora en str2 lo que hacemos es pasar a string los caracteres que se encuentran entre el primer valor hasta el último. De esta manera obtenemos el valor de t. La otra comparación es para eliminar el carácter “>” que me salía, pero la idea es la misma.

Ahora la función de posteo:

Código
  1. static bool postear(string t, CookieContainer misgalletas, string msg, string name)
  2.          {
  3.              //PASAMOS LAS PROPIEDADES A VARIABLES
  4.              HttpWebRequest peticion;
  5.              HttpWebResponse respuesta;
  6.  
  7.              string url = "http://www.fotolog.com/gb.post"; //Sitio donde enviaremos la petición.
  8.              string argumentos = string.Format("ajax=true&t="+t+"&message="+msg); //Los argumentos
  9.              byte[] encodearg = Encoding.ASCII.GetBytes(argumentos);//pasamos a bytes los argumentos
  10.              peticion = (HttpWebRequest)WebRequest.Create(url); //Creamos la petición a la url que indiquemos arriba
  11.              peticion.Referer = "http://www.fotolog.com"; //Ponemos un refer de fotolog por poner algo xd
  12.              peticion.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13"; //Le decimos al server que navegamos con el explorador Mozilla
  13.              peticion.AllowAutoRedirect = true; //Permitimos que nos redirecione ATENCIÓN aquí puede cambiar según el sistema de logueo pero en este caso si no lo permites no te loguea
  14.              peticion.CookieContainer = misgalletas; //Explicado
  15.              peticion.Method = "POST"; //El metodo sera POST y no GET
  16.              peticion.ProtocolVersion = HttpVersion.Version10; //Usaremos la version10
  17.              peticion.ContentType = "application/x-www-form-urlencoded"; //Códificamos los datos a enviar, aquí tener cuídado según el servidor tmb
  18.              peticion.ContentLength = encodearg.Length; //Calculamos el tamaño de los argumentos
  19.  
  20.              Stream canal = peticion.GetRequestStream(); //explicado
  21.  
  22.              canal.Write(encodearg, 0, encodearg.Length); //Enviamos datos
  23.              canal.Flush();
  24.              canal.Close(); //Limpiamos y cerramos
  25.  
  26.              try //INTENTAMOS OBTENER RESPUESTA
  27.              {
  28.                  respuesta = (HttpWebResponse)peticion.GetResponse(); //Explicado
  29.                  string cojo = new StreamReader(respuesta.GetResponseStream()).ReadToEnd(); //Pasamos a la variable cojo la respuesta del servidor.
  30.                  respuesta.Close(); //Cerramos
  31.                  misgalletas.Add(respuesta.Cookies); //Aportamos las cookies en el caso que haya
  32.                  return true;
  33.              }
  34.              catch
  35.              {
  36.                  return false;
  37.              }
  38.  
  39.          }

Pasemos a obtener los fotologs amigos:

Código
  1. static string fotolog(string foto, string[] anterior)
  2. {
  3.              //CRAWLER
  4.              HttpWebRequest hRequest = ((HttpWebRequest)WebRequest.Create("http://www.fotolog.com/"+foto+"/ff"));
  5.              hRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13";
  6.              StreamReader reader = new StreamReader(hRequest.GetResponse().GetResponseStream());
  7.              string devuelto = reader.ReadToEnd();
  8.              reader.Close();
  9.              string fotos="";
  10.              bool existe=false;
  11.              Regex r;
  12.              //http://www.fotolog.com/
  13.  
  14.              r = new Regex(@"http://www.fotolog.com/\s*([^/]*)\s*>");
  15.              //
  16.              MatchCollection mc = r.Matches(devuelto);
  17.              if (mc.Count > 0)
  18.              {
  19.                  foreach (Match m in mc)
  20.                  {
  21.                      //Console.WriteLine("{0}", m.Result("$1"));
  22.                      string dato = m.Result("$1");
  23.                      dato = dato.Replace("\"", "").ToString();
  24.  
  25.                      if (dato != foto&&dato!=foto+" class="+"goldcamera")
  26.                      {
  27.                          for (int i = 0; i<anterior.Length; i++)
  28.                          {
  29.                              if (dato != anterior[i])
  30.                              {
  31.                                  existe = false;
  32.                              }
  33.                              else
  34.                              {
  35.                                  existe = true;
  36.                                  break;
  37.                              }
  38.                          }
  39.                              if (!existe)
  40.                              {
  41.                                  fotos = dato;
  42.                                  return dato;
  43.                              }
  44.                      }
  45.                  }
  46.              }
  47.              return "hola";
  48.          }

Aquí lo que hacemos es coger el código fuente de la página de amigos del fotolog que estemos viendo y mediante expresiones regulares buscamos coincidencias de las urls:
Código
  1.  r = new Regex(@"http://www.fotolog.com/\s*([^/]*)\s*>");
  2.  
  3.  MatchCollection mc = r.Matches(devuelto);

Luego observé que en los goldcamaras me cogía un valor que no era ningún fotolog por lo que hice una condición para que no cogiera ese valor ni tampoco los fotologs anteriores ( para no repetir):

Código
  1. if (dato != foto&&dato!=foto+" class="+"goldcamera")

Después devolvemos el valor que encontramos y listo.

Ahora pondré el código que nos dirá que nuestra fiesta de posteos se ha terminado  :-(

Código
  1. static bool captcha(CookieContainer misgalletas, string name, string devuelto)
  2.          {
  3.              //AQUÍ NO HABRÁ NINGÚN PROBLEMA PARA ENTENDERLO...
  4.              HttpWebRequest peticion = ((HttpWebRequest)WebRequest.Create("http://www.fotolog.com/" + name));
  5.              peticion.CookieContainer = misgalletas;
  6.              peticion.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13";
  7.  
  8.              try
  9.              {
  10.                  string str = devuelto;
  11.                  int first = str.IndexOf("antibot");
  12.                  first += 100;
  13.                  int last = str.LastIndexOf("antibot_note");
  14.                  last -= 279;
  15.                  string td = str.Substring(first, last - first);
  16.  
  17.                  //Remplazar los caracteres especiales a hexadecimales
  18.                  td = td.Replace("+", "%2B").ToString();
  19.                  td = td.Replace("=", "%3D").ToString();
  20.                  td = td.Replace("-", "%27").ToString();
  21.                  td = td.Replace("/", "%2F").ToString();
  22.                  return true;
  23.              }
  24.              catch
  25.              {
  26.                  return false;
  27.  
  28.              }
  29.          }

Devuelve true si se ha detectado el captcha. Podría decir que sale aproximadamente cada 32 post luego si lo validas desde tu Explorer te da para unos 60 post más… aunque esto me ha variado ligeramente así que puedes activar vuestra imaginación para saltar esto, introducir el captcha cada vez que se detecte, ejecutar el programa con diferentes cuentas y poner un sleep mas grande entre cada post… no sé apañárosla ;)

El main quedaría de esta manera:

Código
  1. using System;
  2.  using System.Collections.Generic;
  3.  using System.Text;
  4.  using System.IO;
  5.  using System.Net;
  6.  using System.Web;
  7.  using System.Text.RegularExpressions;
  8.  using System.Threading;
  9.  
  10.  namespace Fotolog
  11.  {
  12.      class Program
  13.      {
  14.          static void Main(string[] args)
  15.          {
  16.              string blog = args[3];
  17.              bool stat;
  18.              string td;
  19.              string[] anterior;
  20.              anterior = new string[30];
  21.              int post = 0;
  22.              CookieContainer cokies;
  23.              string msg = args[2].Replace("-", " ").ToString();
  24.  
  25.              do
  26.              {
  27.                  Console.WriteLine("Logueando...");
  28.                  cokies = sesion(args[0], args[1]);
  29.              } while (cokies.Count <= 1);
  30.              Console.WriteLine("Logueo exitoso... comenzando el proceso.");
  31.              do
  32.              {
  33.                  Console.WriteLine();
  34.                  Console.WriteLine("------------------------------------------------------------------");
  35.                  Console.WriteLine("Buscando amigos en {0}.", blog);
  36.  
  37.                  if (blog == "")
  38.                  {
  39.                      td = t(args[2], cokies);
  40.                      blog = td;
  41.                  }
  42.                  else
  43.                  {
  44.                      blog = fotolog(blog, anterior);
  45.                      td = t(blog, cokies);
  46.                  }
  47.                  Console.WriteLine("Posteando en {0}.", blog);
  48.  
  49.                  if (postear(td, cokies, msg, args[0]))
  50.                  {
  51.                      post += 1;
  52.                      Console.WriteLine("Post número {1}.Se ha posteado correctamente en {0}.", blog, post);
  53.                      stat = true;
  54.                      Thread.Sleep(20000);
  55.                  }
  56.                  else
  57.                  {
  58.                      Console.WriteLine("No se ha podido postear.");
  59.                      stat = false;
  60.                  }
  61.              } while (stat);
  62.  
  63.              Console.WriteLine("Error en el programa, pusla cualquier tecla para salir.");
  64.              Console.ReadLine();
  65.          }

Bueno pues este es el código entero así que a partir de aquí os dejo solos en el camino entre tú y la imaginación.

Despedida:

Espero que os haya gustado el artículo tanto como a mí escribirlo :D y que almenos hayáis aprendido algo nuevo que de eso se trata. Un saludo y cualquier duda sobre el artículo podéis hacermela.

S4ludos!!!

Nork [NullBytes]


« Última modificación: 22 Agosto 2008, 22:24 pm por Nork » En línea

C' Est La Vie
Eazy

Desconectado Desconectado

Mensajes: 229


Eazy [FM-Team]


Ver Perfil WWW
Re: Espameando a fotolog en C#
« Respuesta #1 en: 22 Agosto 2008, 15:22 pm »

No es ofenza ni nada eh, pero eso lo puedo hacer yo en 20 minutos con Autoit. Pero hiciste un gran trabajo de verdad, te felicito.. :)


En línea

[/url]
Nork

Desconectado Desconectado

Mensajes: 196



Ver Perfil
Re: Espameando a fotolog en C#
« Respuesta #2 en: 22 Agosto 2008, 15:27 pm »

Pues no tengo nidea de Autoit pero supongo que si controlas las cookies se puede hacer igual que en cualquier otro lenguaje
En línea

C' Est La Vie
Rakzo-Fimbres

Desconectado Desconectado

Mensajes: 18



Ver Perfil
Re: Espameando a fotolog en C#
« Respuesta #3 en: 22 Agosto 2008, 21:53 pm »

Muy interesante nork, tendré que probarlo
En línea

Nork

Desconectado Desconectado

Mensajes: 196



Ver Perfil
Re: Espameando a fotolog en C#
« Respuesta #4 en: 22 Agosto 2008, 22:04 pm »

Muy interesante nork, tendré que probarlo

Gracias, si te surge alguna duda solo pregunta  ;)
En línea

C' Est La Vie
Thor


Desconectado Desconectado

Mensajes: 1.177


Ver Perfil
Re: Espameando a fotolog en C#
« Respuesta #5 en: 22 Agosto 2008, 22:37 pm »

Una duda sobre la expresión regular:
Código:
http://www.fotolog.com/\s*([^/]*)\s*>
\s* ?
Entre el http://www.fotolog.com/ y el resto de la url puede haber "blancos"?
Al igual que después de encontrar la / de:
Código:
http://www.fotolog.com/xxxxxx/

Y tampoco entiendo porque se busca el ">".

Diria que vale con esto:
Código:
http://www.fotolog.com/[^/]*

A ver si me lo puedes aclarar, ya que esto de las expresiones regulares me parece algo muy útil.

Un saludo.

En línea

Nork

Desconectado Desconectado

Mensajes: 196



Ver Perfil
Re: Espameando a fotolog en C#
« Respuesta #6 en: 22 Agosto 2008, 23:30 pm »

Una duda sobre la expresión regular:
Código:
http://www.fotolog.com/\s*([^/]*)\s*>
\s* ?
Entre el http://www.fotolog.com/ y el resto de la url puede haber "blancos"?
Al igual que después de encontrar la / de:
Código:
http://www.fotolog.com/xxxxxx/

Y tampoco entiendo porque se busca el ">".

Diria que vale con esto:
Código:
http://www.fotolog.com/[^/]*

A ver si me lo puedes aclarar, ya que esto de las expresiones regulares me parece algo muy útil.

Un saludo.

Hola Thor pues la verdad que si son muy útiles  ;D

Una duda sobre la expresión regular:
Código:
http://www.fotolog.com/\s*([^/]*)\s*>
\s* ?
Entre el http://www.fotolog.com/ y el resto de la url puede haber "blancos"?

En este caso sí, ya que como vemos en la expresión "\s*" indica que se puede encontrar cualquier cantidad de espacios, tabulaciones...

El "\s" indica que puede haber cualquier espacio en blanco o tabulaciones y el signo "*" la cantidad de ellos (en nuestro caso no ponemos límite)

Y tampoco entiendo porque se busca el ">".

Diria que vale con esto:
Código:
http://www.fotolog.com/[^/]*

La verdad que eso lo añadí como código auxiliar ya que los enlaces que me recogía sin buscar ">" no eran link validos del típico fotolog si no que habían otros enlaces que no nos servía y de esa manera los conseguí obtener. Igualmente si te fijas lo único añadido a lo que propones como válido es la aceptación de espacios en blanco y la ayuda del ">" que te comentaba. Espero haber respuesto mas o menos tus dudas  :xD

S4ludos!
En línea

C' Est La Vie
Thor


Desconectado Desconectado

Mensajes: 1.177


Ver Perfil
Re: Espameando a fotolog en C#
« Respuesta #7 en: 23 Agosto 2008, 00:44 am »

Gracias por la aclaración Nork.
En línea

OzX


Desconectado Desconectado

Mensajes: 406

[NuKe] Team


Ver Perfil WWW
Re: Espameando a fotolog en C#
« Respuesta #8 en: 23 Agosto 2008, 22:28 pm »

buen articulo Brota¡
:=) lo tenias con unas ganas de postearlo ejejjejeje

En línea

Undersecurity.net
Nork

Desconectado Desconectado

Mensajes: 196



Ver Perfil
Re: Espameando a fotolog en C#
« Respuesta #9 en: 23 Agosto 2008, 23:12 pm »

buen articulo Brota¡
:=) lo tenias con unas ganas de postearlo ejejjejeje



Jaja si? porque?  :rolleyes:
En línea

C' Est La Vie
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Recuperar antiguo FOTOLOG
Dudas Generales
bostero 3 10,523 Último mensaje 18 Noviembre 2022, 20:59 pm
por bostero
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines