Buscar correos en los buscadores : 
----------------------------------

Esta idea no es nueva, ya la uso el Mydoom y se les debe haber ocurrido a
muchos de ustedes.

Si entramos a algun buscador, y hacemos una busqueda de digamos :
 @hotmail.com  ,nuestro navegador se conecta al puerto 80 del buscador
envia una solicitud HTTP Get ,y el buscador responde enviando los
resultados de la busqueda.

Ahora si nos fijamos en las urls que aparecen en el navegador, cuando
accedemos a los resultados de la busqueda, podemos ver segun el navegador:

Google:
-------

http://www.google.com/search?q=%40hotmail.com&hl=es&lr=&start=0&sa=N

Analizando la sintaxis de la Url:

http://www.google.com/search?q=palabra&hl=es&lr=&start=#&sa=N


Yahoo:
------

http://search.yahoo.com/search?p=%40hotmail.com&toggle=1&ei=UTF-8&fr=FP-tab-web-t&b=0

Analizando la sintaxis de la Url:

http://search.yahoo.com/search?p=palabra&toggle=1&ei=UTF-8&fr=FP-tab-web-t&b=#


Altavista:
----------

http://www.altavista.com/web/results?itag=ody&q=@hotmail.com&kgs=0&kls=0&stq=0

Analizando la sintaxis de la Url:

http://www.altavista.com/web/results?itag=ody&q=palabra&kgs=0&kls=0&stq=#


Lycos:
------

http://search.lycos.com/default.asp?query=%40hotmail%2Ecom&first=0&pmore=more

Analizando la sintaxis de la Url:

http://search.lycos.com/default.asp?query=palabra&first=#&pmore=more


-----------------------------------------------------------
Donde:

palabra es la palabra o cadena que queremos buscar

%40hotmail%2Ecom = @hotmail.com
 @ = %40 en Unicode
 . = %2E en Unicode

# es el numero de resultado, para el buscador
si ponemos 0 le estamos indicando que nos muestre del resultado 0 al 10
si ponemos 10 le estamos indicando que nos muestre del resultado 10 al 20
( como muestran de 10 en 10 )


Entonces ya conocemos la sintaxis de las url de busqueda que utilizan esos
buscadores, podemos entrar al navegador y colocar alguna de esas urls
y reemplazar palabra por lo que queramos y #
por algun numero ( de preferencia multiplo de 10, en especial para google )
y el buscador nos devolvera los resultados de la palabra indicados por el
numero.

Como nota, ninguno de los 4 buscadores me dejo acceder a resultados
mayores al numero 1000, osea que # debe ser un multiplo de 
10 entre 0 y 990

Ahora nuestro programa debe conectar al puerto 80 del buscador y enviar
la url de busqueda, debe enviar una peticion HTTP Get como la envian los
navegadores, porque si envia solo:  GET /<url> HTTP/1.0  no funka en 
algunos buscadores.

Conectamos con alguno:

Google => www.google.com           Yahoo => search.yahoo.com

Altavista => www.altavista.com        Lycos => search.lycos.com


Si conectamos por ejemplo con Google enviamos:


GET /search?q=palabra&hl=es&lr=&start=#&sa=N  HTTP/1.0
Accept: */*
Accept-Language: es-pe
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)
Host: www.google.com:80


Asegurense de no incluir la cabecera: Accept-Encoding: gzip ,para que no
esten como yo, revisando como bruto 1 hora el code, porque los buscadores me
enviaban "basura" en vez de los resultados, esa "basura" era la page
que el buscador me enviada comprimida porque le indicaba en esa cabecera
que aceptaba compresion gzip.


Luego recibimos los resultados y de hay tenemos que extraer los correos,
si hacemos una busqueda por @hotmail.com obtendremos tambien otros
correos como @aol.com, @yahoo.com, etc, asi que si solo queremos
los de hotmail para enviar por mx1.hotmail.com debemos separarlos

Lo que me parece más recomendable seria encontrar un server smtp que
permita relay (que no compruebe el dominio del destinatario, osea por 
ejemplo mx1.hotmail.com solo nos permite enviar mails a correos de dominio
hotmail.com ,hay smtps que permiten enviar a cualquier dominio destinatario
prueben el smtp con el mail from del dominio del server y el rcpt to de otro
dominio, si les deja mandar el mail es relay); y hacer busquedas por
@hotmail.com, @yahoo.com.mx, @terra.com.pe, etc y enviarnos a todos los 
mails que obtengamos.

Muy posible que recibamos mails invalidos o mesclados con caracteres basura
tenemos que obviar los invalidos y quitar la basura, por ejemplo:

invalido: user@dominio   (no tiene punto)
con basura: (user@dominio.com) ó "user@dominio.com" (quitamos los ( y ")

Tambien tendremos que hacer reemplazos, algunas pages para evitar que los
spammers capturen los correos, reemplazan la @ por (a) , (at) , [at]
y el . por (.) , [.] ,entonces los volvemos a convertir a @ y .

Aun despues de la seleccion es muy posible que se nos cuele un correo
invalido, por lo que nuestro motor smtp debe estar preparado para
manejar ciertos errores y de ser necesario volver a conectar

Codigo de como buscar los mails en los buscadores en la carpeta [Ejemplos]
El code esta en VB (el mydoom que lo hizo en C++, hay si debe ser dificil)

(C) Mitosis 3 - GEDZAC LABS