简介

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