Llevo muchos años adentrándome en la Deep Web, y he de reconocer que la mayoría de webs que se comparten en los foros son siempre las mismas, a excepción de alguna web que va apareciendo nueva, por lo general suelen ser las mismas que encontrarás en los listados que se intercambian los usuarios.
Estas webs suelen contener material ilegal, es cierto, pero por lo general no es muy interesante, pues las páginas que realmente contienen material que puede considerarse interesante no suele intercambiarse entre usuarios, por lo que tampoco puede ser indexado por la mayoría de buscadores de la Deep Web.
La indexación de estos buscadores suele funcionar leyendo el código fuente de las páginas e ir aislando las url, así que si una web nunca fue escrita en otra página accesible al rastreador, jamás podrá ser encontrada por indexación.
Para realizar una araña web hay que tener varios aspectos en consideración, y uno de los más importantes es la sobre carga en la web y la frecuencia de busqueda, ya que de lo contrarío podrías tener problemas legales. Otro aspecto importante es definir una política que no vulnere la privacidad. Así que antes de lanzarte a crear un robot buscador de páginas asegurate que antes de crear el indice no vulneres ningún derecho de terceros.
En nuestro caso, y para evitar la indexación y con ello evitar también tener que entrar en temas legales, me dispuse a crear un pequeño programa en JAVA que me permitiese obtener páginas de la Deep Web de forma aleatoria, y así de esta forma obtener un índice de páginas de las cuales es posible que ni aparezcan en los buscadores ni aparezcan en ningún foro.
De esta forma evitamos la sobre carga en el servidor de consulta, además evitamos que indexe página que puedan contener datos privados, y lo más importante, la probabilidad de encontrar una web desconocida es muchísimo mayor.
Una de las dificultades para realizar este ejercicio era encontrar el modo en el que JAVA podía leer las páginas .onion, y después de un tiempo buscando como hacerlo terminé encontrando una solución más sencilla. No hacía falta cambiar el protocolo, ya que todas las páginas webs de TOR pueden verse en cualquier navegador con tan solo añadir al final de cada url el .to
Al navegar con un navegador que no es TOR perdemos la privacidad, pero como en este caso no vamos a navegar en estas webs, ya que solo nos hace falta la primera página, utilizaremos un VPN para mantener cierta privacidad, pero insisto que no hace falta.
Procedimiento para crear un enlace de 16 caracteres, que serán la dirección de la web:
public static String aleatorio (){ String cadenacompleta=""; // creamos un String vacio para evitar un error null for (int a=0; a <16; a++){ // Iniciamos un bucle 16 veces, cada uno para un caracter String [] abecedario = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", // creamos un array string de 37 casillas cada uno con un valor "k", "l", "m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4", "5", "6","7", "8", "9","9" }; int numRandon = (int) Math.round(Math.random()*35) ; // generamos un número aleatorio de entre 1 y 35 String cadena = abecedario[numRandon]; // asignamos ese número a un apartado del array cadenacompleta += cadena; // sumamos el caracter para contatenarlo uno con otro } return cadenacompleta; // Retornamos la cadena al finalizar }
Ahora que ya tenemos nuestro proceso que realiza una cadena aleatoria de 16 caracteres, debemos hacer que esto se convierta en una url valida, para ello añadimos el http:// y el onion.to a la cadena de caracteres. Lo haremos de la siguiente forma:
URL u = new URL("http://"+ nombrecadena + ".onion.to"); [/code] Y para realizar la condición de si es OK o es false la consulta realizamo un if: [code] if (code ==200 ){ System.out.println(" -- "); System.out.println(a+ " OK : " + u + " " ); } else { System.out.print(a + " .... " + u + " " ); }
A continuación dejo el código completo y funcionando:
public static void main(String[] args) throws IOException { HttpURLConnection connection = null; try { /** Cadena alfa numerica aleatoria **/ for (int a=0 ; a <= 1000000 ; a++) { // De momento solo un millón de búsquedas, puedes ampliarlo o realizar búsquedas de millón en millón. String nombrecadena = aleatorio(); long inicio = System.currentTimeMillis(); URL u = new URL("http://"+ nombrecadena + ".onion.to"); // aquí creamos el objeto (u) con el valor de la cadena convertida a url //Realizamos la conexión connection = (HttpURLConnection) u.openConnection(); connection.setRequestMethod("HEAD"); // obtenemos valor de repues y guardamos en variable int code = connection.getResponseCode(); long fin = System.currentTimeMillis(); //condicional según respuesta if (code ==200 ){ // Si la conexión es Ok System.out.println(" -- "); System.out.println(a+ " OK : " + u + " " ); } else { // si la conexión a fallado System.out.print(a + " .... " + u + " " ); } } / // Gestión de errores } catch (MalformedURLException e) { System.out.println("Error de URL: " +e); } catch (IOException e) { System.out.println("Error de conexion: " +e); } finally { if (connection != null) { connection.disconnect(); } } } // Función que crea la cadena de 16 caracteres public static String aleatorio (){ String cadenacompleta=""; for (int a=0; a <16; a++){ String [] abecedario = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4", "5", "6","7", "8", "9","9" }; int numRandon = (int) Math.round(Math.random()*35) ; String cadena = abecedario[numRandon]; cadenacompleta += cadena; // System.out.println( cadena ); } return cadenacompleta; } }
Por lo general el funcionamiento es lento, pero quizás exitoso, pudiendo encontrar alguna web que sea interesante. Trataré de ir modificando este pequeño programa, y si te animas a realizar alguna modificación o sugerencia será bienvenida.