layout | title | date | categories | tags |
---|---|---|---|---|
post |
命令行利用代理执行命令-proxychains |
2016-10-23 20:07:36 -0700 |
IT |
Internet Shell Software Proxy Ubuntu Mac |
回国后, 用 git 在 github下载上传都慢得像翔一样.. 有些访问amazon云,SourceForge 的也是慢得要死. 很奇怪, 号称100M的电信上这些东西速度只有几十kB/s.. 而家里12M的移动反而很快.. 这个在mac重启后command + R
进入网络恢复时也很明显了. 移动很多网站上不去, 但反而很多下载速度可以..
一般地, 使用了SS代理后浏览器上网可以切换代理比较方便, 但是呢, 命令行依然是很尿性.. 有时设了全局代理依然不管用 (尤其在SS客户端上). 然后搜索发现了这个程序proxychains, 他可以在原命令前面另加一个代理程序来运行该命令, 从而使得本来不能配置运行代理的程序可以使用代理运行.
该程序原理是通过和网络相关libc
动态相关库的函数进行绑定(hook), 使这些函数走一个预加载的动态库并重定向链接. 因为这个工作原理, 他只能对动态连接的程序起效(就是调用动态库的), 另外proxychains和被代理程序需要调用同一个动态连接库.
该程序如名字, 可以使用代理链(一般我们只采用一个代理), 即可以代理接一个代理传输信号, 这样可以使得使用身份更隐蔽. 另外这种代理链可以混杂各种不同的协议, 如HTTP+SOCKS4+SOCKS5的混合. 这种"代理链"的方式可以轻松帮你解决 外网 -> 网关机 -> 内网机
的internet 访问 intranet的功能.
该程序现在主要在Github上维护, 新版本为 ng
版(更新到4.X), 另外也可以从SourceForge下载. 另外原版旧版的Github也有到4.2的, 旧版的sourceforge 上有旧的3.1版. 不过推荐使用最新版本啦~
proxychains: 执行命令时
- Ubuntu 里面:
sudo apt-get install proxychains
装的是3.1的旧版. - Mac 里面:
brew install proxychains-ng
# needs a working C compiler, preferably gcc
./configure
make
# install proxychains4 and dy-lib
# /usr/local/bin/proxychains4
# /usr/local/lib/libproxychains4.dylib
sudo make install
# installs /etc/proxychains.conf
sudo make install-config
如果是ubuntu或者直接安装, 配置文件一般是 /etc/proxychains.conf
, 如果是Mac用brew安装, /usr/local/Cellar/proxychains-ng/4.11/etc/proxychains.conf
. (其中版本号会有区别,这里是4.11)
一般地, 配置文件查找顺序为:
${PROXYCHAINS_SOCKS5}
环境变量定义的端口${PROXYCHAINS_CONF_FILE}
定义的配置文件或者-f
选项指定的文件./proxychains.conf
- ${HOME}/.proxychains/proxychains.conf
- ${sysconfdir}/proxychains.conf (e.g. /etc/proxychains.conf or /usr/local/etc/proxychains.conf or /usr/local/.../etc/proxychains.conf)
代理模式在配置文件最开头, 有四种模式供选择, 关闭某模式就是注释掉就可以了. 默认模式是strict_chain
dynamic_chain
,按照列表中出现的代理服务器的先后顺序组成一条链,如果有代理服务器失效,则自动将其排除,但至少要有一个是有效的。strict_chain
,按照后面列表中出现的代理服务器的先后顺序组成一条链,要求所有的代理服务器都是有效的round_robin_chain
, 类似dynamic_chain
, 但是只读取chain_len
长度random_chain
,列表中的任何一个代理服务器都可能被选择使用,这种方式很适合网络扫描操作(参数chain_len
对random_chain有效)。
默认是选择的strict_chain,一般我们不用多个代理造成链, 只要一个就好了, 所以一般不改变代理模式部分。
在最下面的部分就是代理服务器列表配置了, 支持HTTP, SOCKS4, SOCKS5, 貌似新版本还支持HTTPS.
例如:
对于SS代理, 在最后一行加入这句话 socks5 127.0.0.1 1080
. 另外把socks4 127.0.0.1 9050
一行#
注释掉或者直接删掉.
http 12.34.56.78 8080 user passwd
可以配置有用户名密码验证的HTTP代理.
一般地, http 采用8080端口, 而 socks4/socks5 采用1080 端口.
使用就很简单了, 就是在原有的运行命令前面加入proxychains4
, 例如我要wget 进行代理抓取
proxychains4 wget www.google.com
指定配置文件的话, 是:
proxychains4 -f proxy.conf wget www.google.com
例如结合ssh隧道:
ssh -fN -D 4321 some.example.com
PROXYCHAINS_SOCKS5=4321 proxychains zsh
这个例子使用ssh隧道来用某个服务端4321端口作动态代理, 然后用 PROXYCHAINS_SOCKS5
来指明端口后直接用proxycains 来代理一个zsh, zsh所有命令均走这个ssh代理. 注意这里走的都是 SOCKS5
代理.
如果嫌打那么长命令很麻烦, 那还可以在启动sh配置文件.bashrc
里面加入:
alias pc4=proxychains4
这样只要用pc4 wget www.google.com
就可以进行代理咯.
电信访问git来下载那就是一个慢! 所以代理是需要的!
做法很简单, 运行两条命令将代理加到配置.gitconfig
就可以了.
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'
注意这是对git全局都使用代理, 但如果使用gitcafe
或者coding.io
这些国内的git仓库, 代理反而走远路了. 这时proxychains就起到作用啦.
wget
使用 -Y on
来打开代理设置, 用 -e "http_proxy=http://ip_address:port"
来指定代理地址.
wget -Y on -e "http_proxy=http://10.0.0.172:8080" "www.google.com"
遗憾的是, wget 只能采用http代理, 不能使用 socks5
代理.
curl
使用 -x ip_address:port
来指定代理服务器IP和端口.
curl -x 10.0.0.172:8080 www.google.com
--socks5 ip:port
和 --socks5-hostname hostname:port
可以使用socks5 来代理
TODO: 更多方式请待续..