jproxyson - proxy privado gracias a webhostings gratuitos


Jproxyson icono La mayoria de proxys publicos o que ofrecen las webs suelen ir unidos a lentitud, inseguridad y en definitiva poco fiables. Si no tenemos dinero para poder comprar servidores o servicios privados de proxy/vpn para utilizar diferentes ips para nuestros scripts ( ya sean bots o scraping ) podemos usar jproxyson. Consiste en un proxy creado en php que transforma una simple web de un webhosting gratuito en un proxy privado.

Jproxyson es una forma de conseguir IPs de paises distintos al nuestro o del mismo pais (todo depende de donde lo alojemos) de forma que con peticiones CURL desde un script PHP podamos usarlos como si fuera un proxy HTTP.

Al ser un script en php y no ser un proxy HTTP o SOCKS5 tienen la desventaja de que no se pueden usar en el navegador, pero si pueden ser usados para scripts automatizados a través de un simple webservice.

Ejemplos de uso

  • Scraping: Como ya se ha dicho pueden ser usados para scrapings de web, si las ips que usan las tienen baneadas de tanto hacer peticiones puede que te interesen nuevas ips, pues Jproxyson te los ofrece.
  • Bots: Si te tienes bots de acceso a páginas y te los bloquean por cualquier cosa también tendrás unas ips extra para ello con jproxyson.
  • Brute force: Si vas ha hacer un ataque de fuerza bruta necesitarás una buena cantidad de IPs para saltarse beaneos temporales, Jproxyson añade algunas.
  • DDos: lo mismo, para esto necesitan muchas ips, jproxyson no podrá ser la única fuente de ellas, pero añadirá otras ips.

Estructura

Jproxyson se compone de 2 clases. La clase Cliente y la clase Servidor. La clase Servidor es la que se tiene que dejar en el webhosting gratuito, es decir, se sube al webhosting y se inicializa la clase en otro php o el mismo.

Funcionamiento

Jproxyson esquema

  1. El cliente cifra los datos de la petición (Url final,cookie,...) y se lo envía al servidor.
  2. El servidor descifra los datos del cliente y hace la petición a la URL que ha pedido el cliente de forma no cifrada.
  3. El servidor cifra la respuesta de la URL y la retorna al cliente junto datos informativos.
  4. El cliente recibe los datos y los descifra, así consigue los datos de la petición pedida.

Instalación

  1. Descargar proyecto Descargamos el proyecto desde github.
git clone https://github.com/jbenages/jproxyson.git
  1. Cambiar la key de cifrado de las clases Client y Server Tanto la clase Client como la clase Server necesitan una key de 40 carácteres para que se cifren las conexiones. Esto se configura añadiendolo en la constante KEY. Es importante cambiar esta key ya que la que viene por defecto no es muy segura.
  2. Subir la parte Server al servidor hosting
  3. Fichero src/Server.php: Es la clase principal que se comunicará con el cliente.
  4. Fichero index.php: Es el fichero al que hará las llamadas la clase Client.
  5. Fichero src/upgrade: La función de este fichero es añadir las funciones de json_encode y json_decode en el caso de que no estén instaladas en el servidor para que la clase Server pueda codificar y decodifficar la inormación que le llega del cliente.
  6. Configurar el fichero Client.php Una vez tengamos configurado el hosting con un dominio tendremos que añadirlo a la clase Client del fichero src/Client.php . Si nuestro dominio es, por ejemplo, dominio.prueba.com lo añadiremos al array $proxys para su utilización.
  7. Hacer una llamada Para usar el sistema deberemos instanciar la clase Client del fichero src/Client.php . Si queremos usarlo enmodo debug y muestre los mensajes de las conexiones le pasaremos true al constructor. Al final quedaría un código com este:
<?php

    require_once("../src/Client.php");

    $request = new Client(true);
    $configRequest = array(
        "proxy"         =>   "example.customproxy.com/index.php",
        "url"           =>   "example.urlrequest.com",
        "post"          =>   array(
            "param1"    =>   "value1"
            ),
        "id"            =>   "firstRequest",
        "headers"       =>   array(
            "Referer : google.com"
            ),
        "cookie"        =>   "",
        "showCookie"    =>   true
        );
    try {  
        $arrayRequest = $request->sendRequest($configRequest);
    } catch (Exception $e) {
        echo $e->getMessage();
    }

    var_dump($arrayRequest);

?>

Con esta peticion enviaríamos al proxy "example.customproxy.com/index.php" uuna petición para que envíe por post "param1=value1" a la dirección "example.urlrequest.com". También le pondremos en los headers el referer de google.com y además nos devolverá el contenido de la cookie en la respuesta así como enviar el contenido de la cookie que queremos.

El array devuelto contendrá lo siguiente:

array(
    "contentPage"   =>   "", //Contenido de la página web.
    "errors"        =>   "", //Errores posibles en la carga de la web.
    "info"          =>   "", //Información de versión y más sobre el Server.php
    "cookie"        =>   "" //Contenido de la cookie en caso de que se especifique que se muestre.
);

Con esto haríamos una petición a la web, con los parámetros GET o POST, con los headers y cookie, todo ello como nosotros queramos.