Como invocar um comando usando um servidor proxy específico?

12

Alguns aplicativos suportam proxy (proxy http ou proxy de meias) e outros não.

Para navegadores, posso especificar o servidor proxy na caixa de diálogo preferências / opções, e outros aplicativos podem configurar servidores proxy nos arquivos de configuração.

Para fins gerais, posso chamar um comando usando um proxy específico? Como a seguir:

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

Estou usando o Ubuntu Maverick.

PS

No win32, ele pode ser implementado seqüestrando as DLLs de soquete, talvez, eu não esteja familiarizado com a programação do Linux, mas acho que é possível no Linux. Apesar.

Xiè Jìléi
fonte

Respostas:

17

A maioria Linux comandos que o acesso a aparência Internet nos HTTP_PROXY, FTP_PROXYe SOCKS_SERVERvariáveis de ambiente para informações de proxy. Então, para fazer algo como o seu exemplo, basta executar:

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

A sintaxe para HTTP_PROXYe FTP_PROXYé um pouco diferente:

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

O ambiente de desktop GNOME padrão incluído nas configurações de proxy do Ubuntu possui um botão Aplicar em todo o sistema , que definirá automaticamente essas variáveis ​​de ambiente para você. Caso contrário, você pode adicionar as exportlinhas ao seu ~/.bashrcarquivo para que elas entrem em vigor a cada login.

Infelizmente, wgetnão oferece suporte a SOCKS. Você pode usar curl, incluído no Ubuntu, para conseguir muitas coisas que wgetfaz. Infelizmente, não verifica SOCKS_SERVER, enquanto verifica HTTP_PROXY(como faz wget). Para usar o curl para baixar esta página com um servidor SOCKS5 (executando a resolução DNS com esse servidor) e salvá-lo como superuser.html, execute o seguinte:

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

Se você quiser curlsempre usar esse proxy SOCKS, poderá criar um alias de shell. Basta adicionar a seguinte linha ao seu ~/.bashrc:

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

Você precisará reiniciar seu terminal ou executar essa linha como se fosse um comando para que as alterações entrem em vigor.

Patches
fonte
Eu tentei wgetcom SOCKS_SERVER, mas parece não funcionar. wgetleia apenas as configurações de proxy de /etc/wgetrc. Também tentei links, não há problema em especificar links -socks-proxy 127.0.0.1:7878 <url>, mas falhou ao usar export SOCKS_SERVER=...; links <url>.
Xiè Jìléi 27/03
@ 谢 继 雷: Infelizmente, alguns programas não são lidos SOCKS_SERVER, embora muitos populares como o sshfaçam. Além disso, wgetparece não oferecer suporte a SOCKS. Você pode, no entanto, usar curl. Vou adicionar informações à minha resposta sobre isso.
Patches
Também youtube-dlnão lê SOCKS_SERVER, mas lê http_proxy. E não suporta proxy de meias. Umm ... Uma lista de programas e seus ambientes proxy suportados podem ser muito úteis.
Xiè Jìléi 13/08/2012
Se você pesquisar no BXR.SU , parece que nada suporta o SOCKS_SERVER, certamente não o OpenSSH . Certamente, é apenas uma opção suportada pelo socksifyutilitário no pacote security / dante .
CNST
wget(1)pode suportar o proxy SOCKS desde a versão 1.4.0 (por volta de 1999) se a compilação com a--with-socks qual quase nunca ocorre nas versões empacotadas.
bufh
10

Tente proxychains .

Pode ser instalado com apt-get. Então você precisará criar um arquivo de configuração em qualquer um dos

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

e você poderá chamar outros comandos como proxychains wget google.com- as conexões passarão por proxy. Você pode especificar vários proxies usados ​​de uma só vez ou em ordem aleatória.

Por exemplo:

➜  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.*.*

Tirei algumas tags HTML e IPs, mas como você pode ver, o proxy foi usado e o endereço IP mudou.

Fofo
fonte
3
Como as proxychains originais não são mantidas, você pode usar proxychains-ng .
Denilson Sá Maia
1

O wget não suporta meias, o curl funciona como o Patches disse:

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

Se você precisar do wget, pode instalar tsocks.

Instalação sudo aptitude install tsockse configuração:

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

Uso:

tsocks wget /superuser//q/262956/66003
PiTheNumber
fonte
1
torsocks parece ser a versão atualizada do tsocks: superuser.com/a/1000811/128124
Ciro Santilli