Jak wywołać polecenie przy użyciu określonego serwera proxy?

12

Niektóre aplikacje obsługują serwer proxy (serwer proxy HTTP lub serwer proxy skarpet), a niektóre nie.

W przypadku przeglądarek mogę określić serwer proxy w oknie dialogowym preferencji / opcji, a inne aplikacje mogą konfigurować serwery proxy w plikach konfiguracyjnych.

Czy do celów ogólnych mogę wywołać polecenie przy użyciu określonego serwera proxy? Podobnie jak poniżej:

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

Używam Ubuntu Maverick.

PS

W win32 można to zaimplementować poprzez przejęcie bibliotek DLL gniazd, być może nie znam programowania w Linuksie, ale myślę, że jest to możliwe w Linuksie. chociaż.

Xiè Jìléi
źródło

Odpowiedzi:

17

Polecenia najbardziej Linux, że dostęp do internetu w wygląd HTTP_PROXY, FTP_PROXYi SOCKS_SERVERzmiennych środowiskowych dla informacji proxy. Aby zrobić coś takiego jak twój przykład, po prostu uruchom:

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

Składnia HTTP_PROXYi FTP_PROXYjest nieco inna:

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

Domyślne środowisko pulpitu GNOME zawarte w ustawieniach proxy Ubuntu ma przycisk Zastosuj w całym systemie , który automatycznie ustawi dla ciebie te zmienne środowiskowe. W przeciwnym razie możesz dodać exportwiersze do ~/.bashrcpliku, aby obowiązywały przy każdym logowaniu.

Niestety w wgetogóle nie obsługuje SOCKS. Możesz użyć curl, który jest dołączony do Ubuntu, aby osiągnąć wiele rzeczy wget. Niestety nie sprawdza SOCKS_SERVER, podczas gdy sprawdza HTTP_PROXY(jak robi wget). Aby użyć curl, aby pobrać tę stronę z serwerem SOCKS5 (wykonującym rozpoznawanie DNS na tym serwerze) i zapisać go jako superuser.html, uruchom to:

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

Jeśli chcesz, aby curlzawsze korzystał z tego proxy SOCKS, możesz utworzyć alias powłoki. Wystarczy dodać następujący wiersz do ~/.bashrc:

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

Będziesz musiał zrestartować terminal lub uruchomić tę linię, jakby to była komenda, aby zmiany odniosły skutek.

Łatki
źródło
Próbowałem wgetz SOCKS_SERVER, ale wydaje się, że nie działa. wgetodczytaj tylko ustawienia proxy z /etc/wgetrc. Próbowałem linksteż, można określić links -socks-proxy 127.0.0.1:7878 <url>, ale nie powiodło się export SOCKS_SERVER=...; links <url>.
Xiè Jìléi
@ 谢 继 雷: Niestety niektóre programy nie czytają SOCKS_SERVER, choć wiele popularnych takich jak ssh. Ponadto wgetwydaje się , że w ogóle nie obsługuje SOCKS. Możesz jednak użyć curl. Dodam informacje do mojej odpowiedzi na ten temat.
Łaty
Również youtube-dlnie czyta SOCKS_SERVER, http_proxyzamiast tego czyta . I nie obsługuje skarpet proxy. Umm ... Lista programów i obsługiwanych przez nich środowisk proxy może być bardzo pomocna.
Xiè Jìléi
Jeśli przeszukujesz BXR.SU , nie wygląda na to, że cokolwiek w ogóle obsługuje SOCKS_SERVER, a na pewno nie OpenSSH . Jest to z pewnością tylko opcja obsługiwana przez socksifynarzędzie z pakietu bezpieczeństwa / dante .
cnst
wget(1)może obsługiwać proxy SOCKS od wersji 1.4.0 (około 1999), jeśli kompilacja z--with-socks którą prawie nigdy nie występuje w wersjach spakowanych.
bufh
10

Wypróbuj proxy .

Można go zainstalować za pomocą apt-get. Następnie musisz utworzyć plik konfiguracyjny w jednym z nich

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

i będziesz mógł wywoływać inne polecenia, takie jak proxychains wget google.com- połączenia będą przechodzić przez serwer proxy. Możesz określić wiele serwerów proxy używanych jednocześnie lub w losowej kolejności.

Na przykład:

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

Usunąłem niektóre tagi HTML i adresy IP, ale jak widać, użyto proxy i adres IP się zmienił.

Puszysty
źródło
3
Ponieważ oryginalne proxy nie są zachowane, możesz zamiast tego użyć proxy .
Denilson Sá Maia,
1

wget nie obsługuje skarpet, curl działa tak, jak powiedział Patches :

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

Jeśli potrzebujesz wget, możesz zainstalować tsocks.

Zainstaluj sudo aptitude install tsocksi skonfiguruj:

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

Stosowanie:

tsocks wget /superuser//q/262956/66003
PiTheNumber
źródło
1
torsocks wydaje się być zaktualizowaną wersją tsocks: superuser.com/a/1000811/128124
Ciro Santilli