chainproxys-ng:在服务器/终端也能使用代理

介绍

简单的说就是这个程序 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
所有用户当前用户

参考链接

https://blog.csdn.net/orangleliu/article/details/51994513

https://www.hi-linux.com/posts/48321.html

1人评论了“chainproxys-ng:在服务器/终端也能使用代理”

  1. Pingback: Ubuntu下网络问题一般解决方法 - Fivyex's Blog

发表评论

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据