如何使用特定的代理服务器调用命令?


12

有些应用程序支持代理(http代理或袜子代理),而有些则不支持。

对于浏览器,我可以在“首选项/选项”对话框中指定代理服务器,其他应用程序可能能够在配置文件中配置代理服务器。

出于一般目的,我可以使用特定代理来调用命令吗?如下所示:

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

我正在使用Ubuntu Maverick。

聚苯乙烯

在win32中,可以通过劫持套接字dll来实现它,也许,我对Linux编程并不熟悉,但是我想这在Linux中是可能的。虽然。

Answers:


17

大多数Linux命令,访问互联网看在HTTP_PROXYFTP_PROXYSOCKS_SERVER为代理信息的环境变量。因此,要执行类似您的示例的操作,只需运行:

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

对于语法HTTP_PROXYFTP_PROXY略有不同:

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

Ubuntu代理设置中随附的默认GNOME桌面环境具有“ 应用系统范围”按钮,该按钮将自动为您设置这些环境变量。否则,您可以将这些export行添加到~/.bashrc文件中,以使它们在每次登录时生效。

不幸的是,wget根本不支持SOCKS。您可以使用curlUbuntu随附的来完成许多工作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代理,则可以创建一个shell别名。只需将以下行添加到您的~/.bashrc

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

您将需要重新启动终端或运行该行,就像这是使更改生效的命令一样。


我已经尝试wgetSOCKS_SERVER,但是似乎没有用。wget仅从读取代理设置/etc/wgetrc。我也尝试links过,可以指定links -socks-proxy 127.0.0.1:7878 <url>,但是使用失败export SOCKS_SERVER=...; links <url>
谢耶利

@谢继雷:不幸的是,有些程序无法读取SOCKS_SERVER,尽管许多受欢迎的程序都可以读取ssh。而且,wget似乎根本不支持SOCKS。但是,您可以使用curl。我将在我的回答中添加信息。
补丁

youtube-dl不会读取SOCKS_SERVER,而是读取http_proxy。而且它不支持袜子代理。嗯...程序列表及其受支持的代理环境变量可能会很有帮助。
谢雷(YièJìléi)2012年

如果您搜索BXR.SU,则看起来根本没有任何支持SOCKS_SERVER的东西,当然也不支持OpenSSH。最肯定的是socksify安全性/ dante软件包中的实用程序仅支持该选项。
cnst 2015年

wget(1)如果从14.0版本开始(大约在1999年), --with-socks可以支持SOCKS代理而在打包版本中几乎从来没有使用过。
bufh 2015年

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
DenilsonSáMaia 2015年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.