¿Cómo invocar un comando usando un servidor proxy específico?

12

Algunas aplicaciones admiten proxy (proxy http o proxy de calcetines), y otras no.

Para los navegadores, puedo especificar un servidor proxy en el cuadro de diálogo de preferencias / opciones, y otras aplicaciones pueden configurar servidores proxy en archivos de configuración.

Para fines generales, ¿puedo invocar un comando usando un proxy específico? Como siguiente:

$ proxy-exec --type sock5 --server 1.2.3.4:8000 -- wget/ftp ...

Estoy usando Ubuntu Maverick.

PD

En win32, se puede implementar secuestrando los dlls de socket, tal vez, no estoy familiarizado con la programación de Linux, pero supongo que es posible en Linux. aunque.

Xiè Jìléi
fuente

Respuestas:

17

La mayoría de los comandos de Linux que el acceso a Internet en el aspecto de los HTTP_PROXY, FTP_PROXYy SOCKS_SERVERvariables de entorno para la información del proxy. Entonces, para hacer algo como su ejemplo, simplemente ejecute:

export SOCKS_SERVER=1.2.3.4:8000
wget http://superuser.com/q/262956/66003

La sintaxis para HTTP_PROXYy FTP_PROXYes ligeramente diferente:

export HTTP_PROXY=http://1.2.3.4:3128/
export FTP_PROXY=ftp://1.2.3.4:25/

El entorno de escritorio predeterminado de GNOME incluido con la configuración de proxy de Ubuntu tiene un botón Aplicar en todo el sistema , que configurará automáticamente esas variables de entorno por usted. De lo contrario, puede agregar las exportlíneas a su ~/.bashrcarchivo para que surtan efecto en cada inicio de sesión.

Desafortunadamente, wgetno es compatible con SOCKS en absoluto. Puede usar curl, que se incluye con Ubuntu, para lograr muchas cosas que lo wgethacen. Desafortunadamente, no verifica SOCKS_SERVER, mientras que sí verifica HTTP_PROXY(como lo hace wget). Para usar curl para descargar esta página con un servidor SOCKS5 (realizando una resolución DNS con ese servidor) y guárdelo como superuser.html, ejecute esto:

curl --socks5-hostname 1.2.3.4:8000 http://superuser.com/q/262956/66003 > superuser.html

Si desea curlutilizar siempre ese proxy SOCKS, puede crear un alias de shell. Simplemente agregue la siguiente línea a su ~/.bashrc:

alias curl='curl --socks5-hostname 1.2.3.4:8000'

Deberá reiniciar su terminal o ejecutar esa línea como si fuera un comando para que los cambios surtan efecto.

Parches
fuente
He tratado wgetcon SOCKS_SERVER, pero no parece trabajo. wgetsolo lee la configuración del proxy de /etc/wgetrc. Intenté linkstambién, está bien especificarlo links -socks-proxy 127.0.0.1:7878 <url>, pero no se pudo usar export SOCKS_SERVER=...; links <url>.
Xiè Jìléi
@ 谢 继 雷: Desafortunadamente, algunos programas no leen SOCKS_SERVER, aunque muchos otros populares lo sshhacen. Además, wgetno parece admitir SOCKS en absoluto. Sin embargo, puede usar curl. Agregaré información a mi respuesta sobre eso.
Parches
Tampoco youtube-dllee SOCKS_SERVER, sino que lee http_proxy. Y no admite calcetines proxy. Umm ... Una lista de programas y sus entornos proxy compatibles pueden ser muy útiles.
Xiè Jìléi
Si busca en BXR.SU , no parece que haya nada compatible con SOCKS_SERVER, ciertamente no con OpenSSH . Sin duda, solo es una opción compatible con la socksifyutilidad del paquete de seguridad / dante .
cnst
wget(1)puede admitir el proxy SOCKS desde la versión 1.4.0 (circa 1999) si se compila con lo--with-socks cual casi nunca es el caso en las versiones empaquetadas.
bufh
10

Prueba proxychains .

Se puede instalar con apt-get. Luego deberá crear un archivo de configuración en cualquiera de

1) ./proxychains.conf
2) $(HOME)/.proxychains/proxychains.conf
3) /etc/proxychains.conf **

y podrás invocar otros comandos como proxychains wget google.com: las conexiones pasarán por proxy. Puede especificar múltiples proxies utilizados a la vez o en orden aleatorio.

Por ejemplo:

➜  ssh -ND 4000 sockshost &
[1] 3446
➜  wget whoer.net -q -O- | grep remote_addr
89.71.*.*
➜  cat proxychains.conf 
[ProxyList]
socks5 127.0.0.1 4000
➜  proxychains wget whoer.net -q -O- | grep remote_addr
|D-chain|-<>-127.0.0.1:4000-<><>-95.211.121.18:80-<><>-OK
78.98.*.*

Eliminé algunas etiquetas HTML e IP, pero como pueden ver, se utilizó el proxy y la dirección IP cambió.

Mullido
fuente
3
Como el proxychains original no se mantiene , puede usar proxychains-ng en su lugar.
Denilson Sá Maia
1

wget no admite calcetines, curl funciona como Patches dijo:

curl --socks5-hostname 1.2.3.4:8000 /superuser//q/262956/66003

Si necesita wget, puede instalarlo tsocks.

Instalar sudo aptitude install tsocksy configurar:

$ sudo vim /etc/tsocks.conf
server = 1.2.3.4
server_type = 5
server_port = 8000

Uso:

tsocks wget /superuser//q/262956/66003
PiTheNumber
fuente
1
torsocks parece ser la versión actualizada de tsocks: superuser.com/a/1000811/128124
Ciro Santilli新疆改造中心法轮功六四事件