Puede que ya no lo recuerde nadie, en los tiempos de Razorback2, HispaShare tenía una funcionalidad que permitía ver (casi) en tiempo real el número de fuentes de cada elink. Pinchando un icono al lado de cada elink se veía una gráfica que mostraba el número de fuentes completas, parciales y peticiones que había tenido el elink en los últimos días y así comprobar el estado “de salud” de cada elink.
Obtener esos datos era facilísimo ya que el servidor Razorback2 tenía una web donde proporcionaba esa información. El servidor tuvo problemas legales y la web se cerró.
Desde ese momento, para obtener el número de fuentes lo que hice fue hacer un programilla que simulaba las peticiones UDP que hace eMule para obtener el número de fuentes de un elink determinado en cada servidor. Pero con el tiempo los servidores perdieron esa funcionalidad.
Había otra solución, en vez de hacer una petición UDP preguntando por el número de fuentes, hacías una petición con distintos opcodes que el servidor interpretaba como una búsqueda. Si buscas “ed2k::<hash>”, el servidor te devuelve el número de clientes que tienen un archivo con ese hash. Pero desde hace medio año, o puede que más, los servidores tampoco permiten hacer búsquedas de tipo “global” (es decir, por UDP). Prueba de ello es que si con eMule haces una búsqueda local y global obtienes los mismos resultados (puede que en global recibas SPAM si no tienes los filtros de IPs, otro día hablaré sobre ello…)
Resumiendo, ahora mismo, la única forma (que yo sepa!!!) de averiguar las fuentes que tiene un elink es conectarte vía TCP al servidor y preguntarle. Pero claro, eso ya no es tan fácil de programar… buscar por KAD queda descartado ya que no permite hacer búsquedas por Hash. Tendría que hacer un programa que se conectara a la vez a todos los servidores que pudiera para ir enviando las peticiones en paralelo. Haciendo una petición cada 5 segundos al cabo del día habría comprobado 17280 elinks, casi todos los de la web. Dando prioridad a los nuevos elinks podría hacer que las fuentes de éstos se vieran casi en tiempo real.
El protocolo no es muy complicado (aunque sí feo) pero no encuentro documentación decente y actualizada sobre él y no voy a perder el tiempo haciendo ingeniería inversa con un servidor local… eso ya lo hice con los UDPs xD
Tengo pensado reutilizar código de aMule (el eMule para Linux) pero mi nivel de C++ no alcanza esa categoría y me cuesta entenderlo pero tampoco me apetece traducir las funciones a otro lenguaje que me sea más familiar. Si alguien tiene experiencia en programar aplicaciones multihilo con sockets en C++ y le interesa explicarme cuatro cosillas, lo agradeceré. Sino ya me buscaré la vida… porque lo de obtener el número de fuentes es una obsesión…
