Как вызвать команду с использованием определенного прокси-сервера?

12

Некоторые приложения поддерживают прокси (http proxy или socks proxy), а некоторые нет.

Для браузеров я могу указать прокси-сервер в диалоге настроек / опций, а другие приложения могут настроить прокси-серверы в файлах конфигурации.

Для общего назначения, я могу вызвать команду, используя определенный прокси? Вроде следующего:

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

Я использую Ubuntu Maverick.

PS

В win32 это может быть реализовано путем захвата dll сокетов, может быть, я не знаком с программированием в Linux, но думаю, что это возможно в Linux. хоть.

Xiè Jìléi
источник

Ответы:

17

Большинство Linux команды , которые имеют доступ к Интернету смотреть в HTTP_PROXY, FTP_PROXYи SOCKS_SERVERпеременные окружения для прокси информации. Итак, чтобы сделать что-то вроде вашего примера, просто запустите:

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

Синтаксис для HTTP_PROXYи FTP_PROXYнемного отличается:

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

Среда рабочего стола GNOME по умолчанию, включенная в настройки прокси-сервера Ubuntu, имеет кнопку Apply System-Wide , которая автоматически установит эти переменные среды для вас. В противном случае вы можете добавить exportстроки в ваш ~/.bashrcфайл, чтобы они вступили в силу при каждом входе в систему.

К сожалению, wgetвообще не поддерживает SOCKS. Вы можете использовать curl, который входит в Ubuntu, для достижения многих целей wget. К сожалению, он не проверяет SOCKS_SERVER, а проверяет HTTP_PROXY(как делает wget). Чтобы использовать curl для загрузки этой страницы с сервера SOCKS5 (выполнение DNS-разрешения на этом сервере) и сохранения ее как superuser.html, запустите:

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

Если вы хотите curlвсегда использовать этот прокси-сервер SOCKS, вы можете создать псевдоним оболочки. Просто добавьте следующую строку в ваш ~/.bashrc:

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

Вам нужно будет перезапустить свой терминал или запустить эту строку, как если бы это была команда, чтобы изменения вступили в силу.

Патчи
источник
Я пытался wgetс SOCKS_SERVER, но, похоже, не работает. wgetчитать только настройки прокси из /etc/wgetrc. Я пытался linksтоже, это нормально, чтобы указать links -socks-proxy 127.0.0.1:7878 <url>, но это не удалось использовать export SOCKS_SERVER=...; links <url>.
Xiè Jìléi
@ 谢 继 雷: К сожалению, некоторые программы не читают SOCKS_SERVER, хотя многие популярные sshделают. Кроме того, wgetкажется, не поддерживает SOCKS вообще. Вы можете, однако, использовать curl. Я добавлю информацию в мой ответ об этом.
Патчи
Также youtube-dlне читает SOCKS_SERVER, он читает http_proxyвместо этого. И это не поддерживает прокси носки. Ммм ... Список программ и их поддерживаемых переменных окружения прокси может быть очень полезным.
Xiè Jìléi
Если вы ищете BXR.SU , то, похоже, что что-то вообще не поддерживает SOCKS_SERVER, конечно, не OpenSSH . Это, безусловно, только опция, поддерживаемая socksifyутилитой из пакета security / dante .
CNST
wget(1)может поддерживать прокси SOCKS начиная с версии 1.4.0 (около 1999 г.), если сборка с--with-socks которой почти никогда не применяется в упакованных версиях.
Буф
10

Попробуйте прокси-цепочки .

Может быть установлен с apt-get. Затем вам нужно будет создать файл конфигурации в любом из

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

и вы сможете вызывать другие команды, такие как proxychains wget google.com- соединения будут проходить через прокси. Вы можете указать несколько прокси, используемых одновременно или в случайном порядке.

Например:

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

Я удалил некоторые HTML-теги и IP-адреса, но, как вы можете видеть, прокси был использован, и IP-адрес действительно изменился.

пушистый
источник
3
Поскольку исходные прокси-цепи не поддерживаются, вы можете использовать вместо них proxychains-ng .
Денилсон Са Майя,
1

wget не поддерживает носки, curl работает так, как сказал Патч :

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

Если вам нужен Wget, вы можете установить tsocks.

Установка sudo aptitude install tsocksи настройка:

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

Использование:

tsocks wget /superuser//q/262956/66003
PiTheNumber
источник
1
torsocks, кажется, является обновленной версией tsocks: superuser.com/a/1000811/128124
Сиро Сантилли,