目录
介绍
简单的说就是这个程序 Hook 了 sockets 相关的操作,让普通程序的 sockets 数据走 SOCKS/HTTP 代理。
其核心就是利用了 LD_PRELOAD 这个环境变量(Mac 上是 DYLD_INSERT_LIBRARIES)。
在 Unix 系统中,如果设置了 LD_PRELOAD 环境变量,那么在程序运行时,动态链接器会先加载该环境变量所指定的动态库。也就是说,这个动态库的加载优先于任何其它的库,包括 libc。
ProxyChains 创建了一个叫libproxychains4.so(Mac 上是 libproxychains4.dylib)的动态库。里面重写了 connect、close 以及 sendto 等与 socket 相关的函数,通过这些函数发出的数据将会走代理,详细代码可以参考 libproxychains.c。
在主程序里,它会读取配置文件,查找 libproxychains4 所在位置,把这些信息存入环境变量后执行子程序。这样子程序里对 socket 相关的函数调用就会被 Hook 了,对子程序来说,跟代理相关的东西都是透明的。
功能 | 不足 |
支持http/https/socks4/socks5 | 不支持udp/icmp转发 |
支持认证 | 少部分程序和在后台运行的可能无法代理 |
远端dns查询 | |
多种代理模式 |
安装
git clone https://github.com/rofl0r/proxychains-ng.git
cd proxychains-ng
./configure
make && make install
cp ./src/proxychains.conf /etc/proxychains.conf
cd .. && rm -rf proxychains-ng
2021/4/16修改:由于习惯了在VPS下面全部以根用户进行操作,上面所有命令都没有加sudo
。而在虚拟机编译安装的时候按照上面写的来操作的话会报错提示权限不足,此时需要在需要权限的命令前加sudo
即可。注:&&
前后的是不同的两个指令,都需要加sudo
。
配置
nano /etc/proxychains.conf
将socks4 127.0.0.1 9095
改为socks5 127.0.0.1 1080
。
其中,1080对应代理软件的监听端口,如酸酸乳,V2ray等。
测试
proxychains4 curl ip.cn
2020-06-30修改:ip.cn已不可用。
proxychains4 curl myip.ipip.net
proxychains4 curl https://ipinfo.io/ip
优化
alias
编辑.bashrc,在最后添加:
alias pc='proxychains4'
以后就可以类似pc curl http://www.google.com
这样调用proxychains4,简化了输入。
全局代理(仅本终端有效)
法一
手动设置环境变量
使用proxychains4 printenv
查看生成的两个环境变量,手动export
到环境变量即可。
法二
proxychains4 -q /bin/bash
这样在当前 shell 中运行的所有程序的网络请求都会走代理了。可以把上面的命令加入到用户目录的.bashrc或者.zshrc中,用户登录后自动代理一个shell,这就类似一个全局代理了。在这个SHELL下的所有命令都可以使用代理了。
全局代理(永久有效)
将环境变量放到系统配置文件中。
/etc/profile | .bashrc |
所有用户 | 当前用户 |
Pingback: Ubuntu下网络问题一般解决方法 - Fivyex's Blog