Pintar respuesta de peticiones simultaneas dinamicamente con curl

Iniciado por mr-medi, 15 Enero 2020, 23:36 PM

0 Miembros y 1 Visitante están viendo este tema.

mr-medi

Buenas, tengo un metodo en el que uso curl para comprobar si existen unos directorios dados para un dominio.
Esto funciona bien pero la duda viene al intentar implementar que el programa haga varias peticiones simultaneas y el resultado de estas se vayan mostrando de forma dinámica. Es decir, que si el programa ha encontrado un directorio lo pinte y siga buscando los directorios restantes para que no tenga que acabar para pintarlos todos.
Os dejo el codigo para ilustrarlo mejor.

Clase BruterDirectory:
Código (php) [Seleccionar]

class BruterDirectory extends Bruter
{
       private $directories;
       private $domain;

       public function __construct($domain,$list)
       {
           parent::__construct($list);
           $this -> domain = $domain;
           $this -> directories = array();
       }

       public function doSearch($callback)
      {

            $directorios = array();
            $rolling_window = 100;
            $rolling_window = (count($this -> list) < $rolling_window) ? count($this -> list) : $rolling_window;
            $master = curl_multi_init();
            $curl_arr = array();
            $std_options = array(CURLOPT_RETURNTRANSFER => true,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_MAXREDIRS => 2,
            CURLOPT_USERAGENT => 'Buenas tardes');
            $options = $std_options;
            for ($i = 0; $i < $rolling_window; $i++)
            {
              $ch = curl_init();
              $options[CURLOPT_URL] = $this -> list[$i];
              curl_setopt_array($ch,$options);
              curl_multi_add_handle($master, $ch);
            }
            do
            {
              while(($execrun = curl_multi_exec($master, $running)) == CURLM_CALL_MULTI_PERFORM);
              if($execrun != CURLM_OK)
                  break;
              while($done = curl_multi_info_read($master))
              {
                  $info = curl_getinfo($done['handle']);
                  if ($info['http_code'] == 200)
                  {
                      $directorios[] = $info['url'];
                      $i++;
                  }
                  $output = curl_multi_getcontent($done['handle']);
                  $callback($output, $info);
                  $ch = curl_init();
                  curl_setopt_array($ch,$options);
                  curl_multi_add_handle($master, $ch);
                  curl_multi_remove_handle($master, $done['handle']);
                  $options[CURLOPT_URL] = $this -> list[$i++];
              }
          }while ($running);
        curl_multi_close($master);
        return $directorios;
}

Lo que hace el metodo doSearch es lo comentado antes, dada una lista generada en otro fichero php va comprobando si existe ese directorio o no, si el status code es 200 lo guarda en un array y cuando acaba lo muestra. Hasta ahi funciona pero si os fijais meto una funcion callback para que cuando una de esas peticiones simultaneas finalice me pinte un "Hola" como prueba de concepto pero solo lo ejecuta cuando la funcion doSearch ha finalizado

En este fichero php es donde llamo a ese metodo:
main.php
Código (php) [Seleccionar]

$bruterDir = new BruterDirectory($domains,$urls);
$callback = function($data, $info)
{
       print "Hola";
};
echo "<strong style='color:green;'><h1>Seeking dirs </strong></h1><br>";
$dirs = $bruterDir -> doSearch($callback);


Otra cosa curiosa es que en el main.php el echo de "Seeking dirs" tambien lo pinta despues de la llamada a doSearch y no entiendo muy bien a que se debe.

Cualquier sugerencia es bienvenida o si sabéis de otra forma para hacerlo tambien, saludos.

<?php
       header
("Location: TheHackerWay");

engel lex

modifique tus codigos con la etiqueta correcta e codigo de php para que fueran mas facil leer

sinceramente php ni por cerca es el lenguaje mas util para esto, recomendaria, c++, python, .net, incluso jscript u otros...

pero mi recomendacion es que uses threads, que es la librería de procesamiento multi hilo... con el curl multi se puede ser pero para mi percepcion tiende a dar muchos errores y ser dificil de manejar

https://www.php.net/manual/es/class.thread.php

mi recomendacion absoluta es que lo hicieras en js si quieres mantenerte fiel al navegador... aunque te puede dar errores de csrf, si es un codigo para ti, puedes iniciar chrome en modo inseguro o tabien puedes intentar usar jsonp como tipo de retorno, tiene sus dificultades pero sirve...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

@XSStringManolo

Cita de: engel lex en 16 Enero 2020, 00:07 AM
modifique tus codigos con la etiqueta correcta e codigo de php para que fueran mas facil leer

sinceramente php ni por cerca es el lenguaje mas util para esto, recomendaria, c++, python, .net, incluso jscript u otros...

pero mi recomendacion es que uses threads, que es la librería de procesamiento multi hilo... con el curl multi se puede ser pero para mi percepcion tiende a dar muchos errores y ser dificil de manejar

https://www.php.net/manual/es/class.thread.php

mi recomendacion absoluta es que lo hicieras en js si quieres mantenerte fiel al navegador... aunque te puede dar errores de csrf, si es un codigo para ti, puedes iniciar chrome en modo inseguro o tabien puedes intentar usar jsonp como tipo de retorno, tiene sus dificultades pero sirve...
Cómo lo harías en js navegador con cabeceras sin extensiones? Webworkers con xhr? Se puede comparar el rendimiento con curlmultihilo si es orientado a público en general? Teníamos pensado distribuir el proyecto en .ova, exportable a equipos con php, y estar disponible para hostear utilizando cuentas de hosting gratuito UwU. Por eso no está hecho en C++.


engel lex

CitarSe puede comparar el rendimiento con curlmultihilo si es orientado a público en general?

en un hosting gratuito... XD

si probablemente a demas no usas tu banda, usa la banda del cliente... por lo menos si 10 clientes hacen busquedas al mismo tiempo, cuidado y no te hacen un DDoS XD

cual es la auto limitacion con el hosting gratuito? con 5$ al mes montas un vps que puedes colocar tus scripts de busqueda y usas el hosting gratuito solo como "cara" para el sistema...

con js, ya el jsonp no salta cors, pero tienes sitios como este...
http://cors-anywhere.herokuapp.com/

la velocidad obviamente depende de la red del cliente, pero con una barra de progreso bajas el ansias
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

@XSStringManolo

#4
Cita de: engel lex en 16 Enero 2020, 01:05 AM
en un hosting gratuito... XD
No me judges, ya lo hacen ellos XD
CitarYour site hit 412956 before the system had to suspend your account as it was impacting other free users shared hosting loading.
Es lo que tiene debuggear en producción, que piensas que el script no tira bien... xD

Cita de: engel lex en 16 Enero 2020, 01:05 AMsi probablemente a demas no usas tu banda, usa la banda del cliente... por lo menos si 10 clientes hacen busquedas al mismo tiempo, cuidado y no te hacen un DDoS XD
Es un poco show por el tema de cors y no poder editar las peticiones a gusto :S.
O el mismo con 10 instancias jajajaja

Cita de: engel lex en 16 Enero 2020, 01:05 AMcual es la auto limitacion con el hosting gratuito? con 5$ al mes montas un vps que puedes colocar tus scripts de busqueda y usas el hosting gratuito solo como "cara" para el sistema...
Soy español. Lo gratis es irresistible. Si me ofreces una bofetada gratis me cuesta decir que no. Podría pillar un vps, pero soy vago xD Igual para la semana. O para la siguiente. Me recomiendas alguno?

Cita de: engel lex en 16 Enero 2020, 01:05 AMcon js, ya el jsonp no salta cors, pero tienes sitios como este... http://cors-anywhere.herokuapp.com/
Probara hace ya algo de tiempo algunos de estos servicios para saltarme cors y obtener un imagen con estego y no lo conseguí. En caso de que funcionen, igual me baja mucho el rendimiento por el tema de tener un proxy para hacer cada request. Igual tienen límites de peticiones. A parte de estar banneados en muchos sitios.

Cita de: engel lex en 16 Enero 2020, 01:05 AMla velocidad obviamente depende de la red del cliente, pero con una barra de progreso bajas el ansias
Si no, le meto un iframe a algún adware de casadas en tu zona y listo. Jajaja

Me flipan los fuente de este tipo de páginas. Están muy bien hechas. A parte siempre tienen algun easter egg!
http://orgasmatron.mobi/warning.jsp

Igual algún día me pongo a hacer páginas por el estilo jajaja

engel lex

CitarSoy español. Lo gratis es irresistible. Si me ofreces una bofetada gratis me cuesta decir que no. Podría pillar un vps, pero soy vago xD Igual para la semana. O para la siguiente. Me recomiendas alguno?

ovh por excelencia... realmente por precio y calidad es dificil comparar con otros...

si tienes tu propio vps tiras un tinyproxy, le pides que altere las cabeceras y listo, si necesitas mas potencia, un nginx como reverse proxy... con ovh tienes suficiente ancho de banda para soportar X clientes...

tienes iframes de chaturbate XD para que se entretenga XD

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

@XSStringManolo

Cita de: engel lex en 16 Enero 2020, 02:19 AM
ovh por excelencia... realmente por precio y calidad es dificil comparar con otros...

si tienes tu propio vps tiras un tinyproxy, le pides que altere las cabeceras y listo, si necesitas mas potencia, un nginx como reverse proxy... con ovh tienes suficiente ancho de banda para soportar X clientes...

tienes iframes de chaturbate XD para que se entretenga XD
Tienen servicios de todo tipo.
Anda caro el smishing  :laugh:

Un iframe de chaturbate y un criptominer en el background y a hacer oro blanco.  :P