简介
ProxyChains是一个UNIX程序,通过预加载动态库(dlsym()
,LD_PRELOAD
)劫持动态链接程序中与网络相关的libc函数,将连接重定向至SOCKS4a/5或HTTP代理。仅支持TCP协议(不支持UDP/ICMP等)。它的工作方式基本上是一种黑客技术,因此有可能与你的程序不兼容。例如脚本程序和多进程后台程序。
安装程序
在Kali
中可以使用apt
包管理器安装,编译按照话请查看文档
apt install proxychains4
基本配置
配置信息
所有的配置在/etc/proxychains.conf
文件下,大概机翻了一下,具体的配置有代理的轮换形式、DNS解析、排除地址、超时时间、关闭终端的回显以及代理的配置。
# proxychains.conf VER 4.x
#
# 带 DNS 的 HTTP、SOCKS4a、SOCKS5 隧道代理。
# 下面的选项确定了如何处理代理列表。
# 每次只能取消一个选项、
# 否则,最后出现的选项将被接受
#
#dynamic_chain
#
#动态 - 每个连接将通过链式代理完成
#所有代理在列表中出现的顺序链接
#至少一个代理必须在线播放链
#(跳过死去的代理)
#否则eintr返回到应用程序
#strict_chain
#
# 严格 - 每个连接都将通过链式代理完成
# 所有代理服务器按照它们在列表中出现的顺序链入
# 所有代理都必须在线才能进行链式游戏
# 否则将返回应用程序 EINTR
#
#round_robin_chain
#
# 轮询链(Round Robin)- 每个连接将通过长度为 chain_len 的代理链完成。
# 所有代理按列表顺序链接,在链中至少需一个代理在线(失效代理将被跳过)。
# 当前代理链的起始位置,是上一次调用代理链中最后一个代理的下一个代理。
# 若在查找代理时到达代理链末端,则从头开始重新循环。
# 否则将向应用程序返回 EINTR 错误。
#
# 注意:在多线程环境中无法保证此语义的严格性。
#
#random_chain
#
# 随机链(Random)- 每个连接将通过列表中随机选择的代理(或代理链,参见 chain_len)完成。
# 此选项适用于测试您的 IDS(入侵检测系统):)
# 仅在启用 random_chain 或 round_robin_chain 时生效
#chain_len = 2 # 定义代理链长度(示例值,需取消注释并配置)
#安静模式(终端没有输出)
#quiet_mode
# 方法1:远程DNS解析(默认)
proxy_dns # 速度快/支持 .onion,但复杂应用可能崩溃
# 方法2:传统脚本模式
#proxy_dns_old # 需 proxyresolv+dig,兼容性强但慢
# 方法3:守护进程模式
#proxy_dns_daemon 127.0.0.1:1053 # 需提前启动守护进程
# 设置用于内部远程 DNS 映射的 A 类子网编号
# 我们默认使用保留的 224.x.x.x 范围、
# 如果代理应用发出 DNS 请求,我们将返回该范围内的一个 IP。
# 在进一步访问该 IP 时,我们会将保存的 DNS 名称发送给代理。
# 以防某些控制狂应用程序检查返回的 IP,并拒绝与之连接。
# 连接,您可以使用另一个子网,如 10.x.x.x 或 127.x.x.x。
# 当然,你应该确保被代理的应用程序不需要
# 真正访问该子网。
# 也就是说,不要在本地网部分使用相同的子网。
#remote_dns_subnet 127
#remote_dns_subnet 10
remote_dns_subnet 224
#一些超时以毫秒为单位
tcp_read_time_out 15000
# 数据读取超时(默认15秒)
tcp_connect_time_out 8000
# 代理连接超时(默认8秒)
### 直连排除示例(以下地址不经过代理)
## 注意:仅当应用直接使用IP、通过/etc/hosts解析域名,
## 或禁用proxy_dns/使用proxy_dns_old时生效
## 排除 192.168.1.0/24 网段的80端口
# localnet 192.168.1.0:80/255.255.255.0
## 排除整个 192.168.100.0/24 网段
# localnet 192.168.100.0/255.255.255.0
## 排除全局80端口(所有IP)
# localnet 0.0.0.0:80/0.0.0.0
# localnet [::]:80/0 # IPv6格式
## RFC6890 回环地址范围
## 启用时需确保 remote_dns_subnet 不为 127
## 若需代理访问 localhost 的应用必须启用
# localnet 127.0.0.0/255.0.0.0 # IPv4回环
# localnet ::1/128 # IPv6回环
## RFC1918 私有地址范围
# localnet 10.0.0.0/255.0.0.0 # A类私有
# localnet 172.16.0.0/255.240.0.0 # B类私有
# localnet 192.168.0.0/255.255.0.0 # C类私有
### DNAT 示例 ###
## 对目标地址进行DNAT转换后,实际通过代理连接新地址
## 当连接 1.1.1.1:1234 时,实际连接到 1.1.1.2:443
# dnat 1.1.1.1:1234 1.1.1.2:443
## 当连接 1.1.1.1:443 时,实际连接到 1.1.1.2:443
## (无需重复写端口)
# dnat 1.1.1.1:443 1.1.1.2
## 无论连接 1.1.1.1 的哪个端口,都重定向到 1.1.1.2:443
# dnat 1.1.1.1 1.1.1.2:443
## 将所有访问 1.1.1.1 的连接重定向到 1.1.1.2
# dnat 1.1.1.1 1.1.1.2
# 代理列表格式
# 类型 IP 端口 [用户密码]
# (用 "tab "或 "空白 "分隔的值)
#
# 只有数字 IPv4 地址有效
#
#
# 例子:
#
# socks5 192.168.67.78 1080 lamer secret
# http 192.168.89.3 8080 justu hidden
# socks4 192.168.1.49 1080
# http 192.168.39.93 8080
#
#
# 代理类型:http、socks4、socks5、raw
# * 原始:流量不经修改直接转发到代理。
# ( 支持的认证类型:"basic"-http "user/pass"-socks )
#
[ProxyList]
# 在此添加代理...
# 默认配置为 Tor 代理
# 示例:本地SOCKS5代理(端口需与实际代理服务匹配)
socks5 127.0.0.1 80
配置代理
这里我本地启动socks5
帐号密码为空只需要按照格式写入即可
[协议] [地址] [用户名] [密码]
socks5 127.0.0.1 10101
测试请求,这里用一个网站测试当前请求的地址,使用方法只需要在执行正常的命令的前面加上proxychains4
或者proxychains
即可
proxychains4 curl https://ifconfig.me
关闭请求回显
只需要修改配置文件将quiet_mode
前面的注释删掉,启用即可。当然也可以执行前加上-q
参数直接关闭日志
#关闭请求回显
quiet_mode
测试请求,使用方法还是一样。减少了每次请求的回显。
测试请求,关闭日志-q
指定配置文件
使用-f
参数,在需要的时候指定不同的配置文件,例如切换代理地址,或者切换代理轮换等。默认情况下使用的配置文件为当前目录下的配置文件。
proxychains4 -f ~/no_show.conf curl https://ifconfig.me/
扩展使用
别名调用
正常使用的时候需要在需要代理的程序前面加上proxychains4
,命令稍微有点长,这时候可以通过alias
来为它设置别名。
当前用户生效
可以通过在当前用户的.profile
文件里设置环境变量,来实现每次登录这个用户的时候自动执行命令。
全局生效
通过在/etc/profile.d
创建命令执行的脚本实现当每个用户登录的时候都执行alias
的命令。创建脚本后切换用户测试
echo "alias pc=proxychains4" > /etc/profile.d/pc.sh