Comment appeler une commande à l'aide d'un serveur proxy spécifique?

12

Certaines applications prennent en charge le proxy (proxy http ou proxy socks), et d'autres non.

Pour les navigateurs, je peux spécifier un serveur proxy dans la boîte de dialogue préférences / options, et d'autres applications peuvent configurer des serveurs proxy dans des fichiers de configuration.

À des fins générales, puis-je appeler une commande à l'aide d'un proxy spécifique? Comme suivant:

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

J'utilise Ubuntu Maverick.

PS

Dans win32, il peut être implémenté en détournant les DLL de socket, peut-être que je ne suis pas familier avec la programmation Linux, mais je suppose que c'est possible sous Linux. bien que.

Xiè Jìléi
la source

Réponses:

17

La plupart des commandes Linux qui accèdent au regard Internet dans les HTTP_PROXY, FTP_PROXYet les SOCKS_SERVERvariables d'environnement pour les informations de proxy. Donc, pour faire quelque chose comme votre exemple, lancez simplement:

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

La syntaxe de HTTP_PROXYet FTP_PROXYest légèrement différente:

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

L'environnement de bureau GNOME par défaut inclus avec les paramètres de proxy d'Ubuntu possède un bouton Appliquer à l'échelle du système , qui définira automatiquement ces variables d'environnement pour vous. Sinon, vous pouvez ajouter les exportlignes à votre ~/.bashrcfichier pour qu'elles prennent effet à chaque connexion.

Malheureusement, wgetne prend pas du tout en charge SOCKS. Vous pouvez utiliser curl, qui est inclus avec Ubuntu, pour accomplir beaucoup de choses wget. Malheureusement, il ne vérifie pas SOCKS_SERVER, alors qu'il vérifie HTTP_PROXY(tout comme wget). Pour utiliser curl pour télécharger cette page avec un serveur SOCKS5 (en exécutant la résolution DNS avec ce serveur) et l'enregistrer sous superuser.html, exécutez ceci:

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

Si vous souhaitez curltoujours utiliser ce proxy SOCKS, vous pouvez créer un alias de shell. Ajoutez simplement la ligne suivante à votre ~/.bashrc:

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

Vous devrez redémarrer votre terminal ou exécuter cette ligne comme s'il s'agissait d'une commande pour que les modifications prennent effet.

Patchs
la source
J'ai essayé wgetavec SOCKS_SERVER, mais ça ne marche pas. wgetlire uniquement les paramètres du proxy à partir de /etc/wgetrc. J'ai essayé linksaussi, c'est correct de le préciser links -socks-proxy 127.0.0.1:7878 <url>, mais ça n'a pas pu être utilisé export SOCKS_SERVER=...; links <url>.
Xiè Jìléi
@ 谢 继 雷: Malheureusement, certains programmes ne lisent pas SOCKS_SERVER, bien que de nombreux programmes populaires aiment le sshfaire. En outre, wgetne semble pas du tout prendre en charge SOCKS. Vous pouvez cependant utiliser curl. J'ajouterai des informations à ma réponse à ce sujet.
Patchs du
Aussi youtube-dlne lit pas SOCKS_SERVER, il lit à la http_proxyplace. Et il ne prend pas en charge le proxy de chaussettes. Umm ... Une liste de programmes et de leurs environnements proxy pris en charge peut être très utile.
Xiè Jìléi
Si vous recherchez BXR.SU , il ne semble pas que quoi que ce soit supporte SOCKS_SERVER, certainement pas OpenSSH . Il s'agit très certainement d'une option prise en charge par l' socksifyutilitaire du package security / dante .
2015
wget(1)peut prendre en charge le proxy SOCKS depuis la version 1.4.0 (vers 1999) s'il est construit avec--with-socks ce qui n'est presque jamais le cas dans les versions packagées.
bufh
10

Essayez les proxychains .

Il peut être installé avec apt-get. Ensuite, vous devrez créer un fichier de configuration dans l'un des

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

et vous pourrez invoquer d'autres commandes comme proxychains wget google.com- les connexions passeront par un proxy. Vous pouvez spécifier plusieurs proxys utilisés simultanément ou dans un ordre aléatoire.

Par exemple:

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

J'ai supprimé certaines balises HTML et IP, mais comme vous pouvez le voir, le proxy a été utilisé et l'adresse IP a changé.

Duveteux
la source
3
Étant donné que les chaînes proxy d' origine ne sont pas gérées, vous pouvez utiliser à la place proxychains-ng .
Denilson Sá Maia
1

wget ne prend pas en charge les chaussettes, curl fonctionne comme le disait Patches :

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

Si vous avez besoin de wget, vous pouvez l'installer tsocks.

Installer sudo aptitude install tsockset configurer:

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

Usage:

tsocks wget /superuser//q/262956/66003
PiTheNumber
la source
1
torsocks semble être la version mise à jour de tsocks: superuser.com/a/1000811/128124
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功