¿Cómo puedo conectarme a un servicio oculto de Tor usando cURL en PHP?

Resuelto frosty asked hace 54 años • 0 respuestas

Estoy intentando conectarme a un servicio oculto de Tor usando el siguiente código PHP:

$url = 'http://jhiwjjlqpyawmpjx.onion/'
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, "http://127.0.0.1:9050/");
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
$output = curl_exec($ch);
$curl_error = curl_error($ch);
curl_close($ch);

print_r($output);
print_r($curl_error);

Cuando lo ejecuto, aparece el siguiente error:

No se pudo resolver el nombre del host

Sin embargo, cuando ejecuto el siguiente comando desde mi línea de comando en Ubuntu:

curl -v --socks5-hostname localhost:9050 http://jhiwjjlqpyawmpjx.onion

Recibo una respuesta como se esperaba.

La documentación de PHP cURL dice esto:

--socks5-hostname
Use  the  specified  SOCKS5 proxy (and let the proxy resolve the host name).

Creo que la razón por la que funciona desde la línea de comandos es porque Tor (el proxy) está resolviendo el nombre de host .onion, que reconoce. Al ejecutar el código PHP anterior, supongo que cURL o PHP están intentando resolver el nombre de host .onion y no lo reconocen. He buscado una manera de decirle a cURL/PHP que permita que el proxy resuelva el nombre de host, pero no puedo encontrarla.

Hay una pregunta de desbordamiento de pila muy similar: la solicitud de cURL que usa el proxy calcetines5 falla cuando se usa PHP, pero funciona a través de la línea de comando .

frosty avatar Jan 01 '70 08:01 frosty
Aceptado

Es necesario configurar la CURLOPT_PROXYTYPEopción paraCURLPROXY_SOCKS5_HOSTNAME

curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);

CURLPROXY_SOCKS5_HOSTNAMEse define a partir de PHP 5.6.10 . Si está utilizando una versión anterior, puede utilizar explícitamente su valor 7:

curl_setopt($ch, CURLOPT_PROXYTYPE, 7);
dr.scre avatar Aug 17 '2013 22:08 dr.scre

Utilizo Privoxy y cURL para extraer páginas Tor:

<?php
    $ch = curl_init('http://jhiwjjlqpyawmpjx.onion'); // Tormail URL
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
    curl_setopt($ch, CURLOPT_PROXY, "localhost:8118"); // Default privoxy port
    curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
    curl_exec($ch);
    curl_close($ch);
?>

Después de instalar Privoxy, debe agregar esta línea al archivo de configuración ( /etc/privoxy/config). Tenga en cuenta el espacio y '.' al final de la línea.

forward-socks4a / localhost:9050 .

Luego reinicie Privoxy.

/etc/init.d/privoxy restart
FattyPotatoes avatar May 27 '2013 00:05 FattyPotatoes

Intenta agregar esto:

curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); 
Anthony Garcia-Labiad avatar Apr 04 '2013 19:04 Anthony Garcia-Labiad