ProxyChains-NG 版本 4.17 自述文件
ProxyChains 是一个 UNIX 程序,它通过预加载的 DLL(dlsym()、LD_PRELOAD)挂钩动态链接程序中的网络相关 libc 函数,并将连接重定向到 SOCKS4a/5 或 HTTP 代理。它仅支持 TCP(不支持 UDP/ICMP 等)。
它的工作方式本质上是一种 HACK;因此它有可能无法与你的程序配合使用,尤其是当你的程序是脚本、会启动大量进程(如后台守护进程)或使用 dlopen() 加载“模块”时(glibc 动态链接器中的一个 bug)。不过,它应该适用于简单的编译型(C/C++)动态链接程序。
如果你的程序无法与 proxychains 配合使用,请考虑改用基于 iptables 的解决方案;这样要稳健得多。
支持的平台:Linux、BSD、Mac、Haiku。
*********** 注意 ***********
此程序可用于规避审查。
在某些国家,这样做可能非常危险。
在将 PROXYCHAINS 用于任何严肃用途之前,请务必确保其按预期工作。
这既涉及程序本身,也涉及你将要使用的代理。
例如,你可以连接某个“我的 IP 是什么”的服务(如 ifconfig.me),以确认它没有使用你的真实 IP。
只有在清楚自己在做什么的情况下,才使用 PROXYCHAINS。
PROXYCHAINS 的作者和维护者不对任何滥用或误用本软件及其后果承担任何责任。
*** 安装 ***
needs a working C compiler, preferably gcc
./configure --prefix=/usr --sysconfdir=/etc
make
[optional] sudo make install
[optional] sudo make install-config (installs proxychains.conf)
如果你不安装,也可以从构建目录中直接使用 proxychains,
如下:./proxychains4 -f src/proxychains.conf telnet google.com 80
更新日志:
版本 4.17
- 为 close_range 函数添加挂钩,修复新版 openssh
- 为 mac 添加 fat-binary-m1 选项
- 修复 proxy_dns_old 中的 DNS 错误处理
- 简化初始化代码
- 修复 openbsd 预加载
- 修复多线程应用中的双重关闭(double-close)
- 对 configure 脚本进行多项改进
版本 4.16
- 修复 configure 脚本中链接器标志检测的回归
- 移除针对 glibc getnameinfo 签名错误的 10 年旧临时解决方案
- 支持 OSX Monterey 的新 DYLD 挂钩方法
- 修复 netbsd 编译
- 支持 IPv6 本地网络(localnets)
- 当 execvp 失败时显示更友好的错误消息
- proxy_getaddrinfo():如果请求,则填充 ai_socktype
版本 4.15
- 修复 configure 脚本以适配有问题的 binutils 版本
- 以纳秒粒度初始化 rand_seed
- 在 getaddrinfo 中添加对数字 IPv6 的支持
- 修复 getaddrinfo 中 node 为 null 且 !passive 时的 bug
- 新增 dnat 功能
- 新增 raw 代理类型
- 新增 haiku 支持
- 新增 proxy_dns_old 以模拟 proxychains 3.1 的行为
- 新增 proxy_dns_daemon 功能(实验性)
- 其他各种修复
版本 4.14
- 允许 proxylist 使用备选的 proto://user:pass@ip:port 语法
- 修复当所有代理都不可用时 round robin 模式下的死循环(#147)
- 修复 android 上的编译问题(#265)
- 修复 fork 进程中的 fd 泄漏(#273)
- 跳过对 nullroute IP 的连接尝试
- 允许在特定情况下为 proxylist 使用主机名
版本 4.13
- 修复 DNS 查找线程的健壮性以及一个段错误
- 修复在不合规服务器上的 socks5 用户/密码认证
- 修复内存泄漏
- 新增对 Solaris 的支持
版本 4.12
- 修复多个构建问题
- 修复某些 GUI 应用的兼容性(8870140)
- 修复某些 HTTP 代理的兼容性(cf9a16d)
- 修复多个警告,使 debian 上的构建更干净
- 修复 OSX 上的 random_chain(0f6b226)
版本 4.11
- 初步支持 IPv6
- 修复 hostsreader 中的 bug
- 初步支持在 OpenBSD 上使用(风险自负)
版本 4.10
- 修复使用自定义 LDFLAGS 时链接顺序的回归
- 修复在具有超过约 400 个不同查找的程序中 DNS 映射代码的段错误
版本 4.9
- 修复安全问题 CVE-2015-3887
- 新增 sendto 挂钩以处理 MSG_FASTOPEN 标志
- 用 hostsreader 替换有问题的 hostentdb
- 修复 OpenBSD 上的编译(尽管在那里无法运行)
版本 4.8.1:
- 修复 4.8 中 install-config Makefile 目标的回归
版本 4.8:
- 修复一个奇怪的边界情况:getaddrinfo 与 AI_NUMERICHOST 一起使用,用于测试数字 IP 而不是解析它(修复 nmap)。
- 允许与自身依赖 LD_PRELOAD 的程序一起使用
- 拒绝配置文件中的错误条目
- 启动时打印版本号
版本 4.7:
- 由 crass 带来的新的 round_robin 链类型。
- 修复未使用 GCC constructor 时惰性分配的 bug。
- 新增 configure 标志 --fat-binary,用于在 OS X 上创建“胖”二进制文件/库
- 在 close 挂钩中返回 EBADF 而不是 EINTR。
程序在收到 EINTR 后重试 close() 调用是合法的,这可能导致无限循环,如 chromium 中出现的情况。
版本 4.6:
- 对 Makefile 进行一些外观修复,修复将非数字 IP 用作代理服务器地址时的 bug。
版本 4.5:
- 挂钩 close() 以防止 OpenSSH 干扰内部基础设施。这导致 ssh 客户端在被代理化时出现段错误。
版本 4.4:
- FreeBSD 移植
- 修复 Debian 和 Mac 上的一些安装问题
版本 4.3:
- 修复在子进程(fork() 出来的)中进行 DNS 查找的程序,如 irssi。为此,牺牲了对无 pthreads 编译的支持。
- 修复 gethostent() 调用的线程安全性。
- 提升了 DNS 处理速度,因为 hostent 数据库已被缓存。
版本 4.2:
- 修复 ubuntu 12.04 工具链的编译问题
- 修复罕见代码路径中的段错误
版本 4.1
- 支持 mac os x(所有架构)
- 使用 -DTHREAD_SAFE(默认)编译时,所有内部函数都是线程安全的
版本 4.0
- 用远程 DNS 查找替换了 dnsresolver 脚本(该脚本需要存在动态链接的“dig”二进制文件)。这加速了任何涉及 DNS 的操作,因为旧脚本必须使用 TCP。此外,与 TOR 一起使用时,它允许使用 .onion URL。
- 移除了损坏的 autoconf 构建系统,改用简单的 Makefile。不过为了使用方便,仍然提供了一个 ./configure 脚本。它还支持通过命令行开关/环境变量传入配置文件。
版本 3.0
- 支持通过代理进行 DNS 解析
支持 SOCKS4、SOCKS5 和 HTTP CONNECT 代理服务器。
认证类型:socks - “user/pass” ,http - “basic”。
什么时候使用它?
- 当从你的局域网访问“外部”的唯一途径是经过代理服务器时。
- 用于突破限制出站端口的严格防火墙。
- 使用两个(或更多)代理组成链:
例如:your_host <--> proxy1 <--> proxy2 <--> target_host
- 对某些没有内置代理支持的程序(如 telnet)进行“代理化”
- 通过代理从外部访问内网。
- 在代理后使用 DNS。
- 访问隐藏的 tor onion 服务。
一些炫酷的功能:
- 该程序可以在同一条链中混合不同的代理类型
例如:your_host <-->socks5 <--> http <--> socks4 <--> target_host
- 支持不同的链式选项
从列表中随机排序(链的长度由用户定义)。
精确顺序(按列表中的出现顺序)
动态顺序(智能地将失效代理从链中排除)
- 你可以将其与大多数 TCP 客户端应用程序一起使用,甚至可能包括网络
扫描器,只要它们使用标准 libc 功能。
基于 pcap 的扫描无法工作。
- 你可以将其与服务器一起使用,如 squid、sendmail 等。
- 通过代理进行 DNS 解析。
配置:
proxychains 按以下顺序查找配置文件:
- 环境变量 PROXYCHAINS_CONF_FILE 中列出的文件,或通过 -f 参数提供给 proxychains 脚本或二进制文件。
- ./proxychains.conf
- $(HOME)/.proxychains/proxychains.conf
- $(sysconfdir)/proxychains.conf **
** 通常为 /etc/proxychains.conf
使用示例:
$ proxychains telnet targethost.com
在此示例中,它将通过 proxychains.conf 指定的代理(或代理链)运行 telnet。
使用示例:
$ proxychains -f /etc/proxychains-other.conf telnet targethost2.com
在此示例中,它将使用与 proxychains.conf 不同的配置文件来连接 targethost2.com 主机。
使用示例:
$ proxyresolv targethost.com
在此示例中,它将通过 proxychains.conf 指定的代理(或代理链)解析 targethost.com。
已知问题:
-
较新版本的 nmap 会尝试确定要使用的网络接口,即使并不需要(例如在执行使用标准 POSIX socket API 的简单 SYN 扫描时)。当 proxychains 将 IP 地址分配给保留地址空间时,这会导致错误。
可能的解决方法:禁用 proxy_dns、使用数字 IP,或使用 nmap 对 SOCKS 代理的原生支持。
-
Mac OS X 10.11(El Capitan)附带了一项名为 SIP 的新安全功能,该功能会阻止对系统应用的挂钩。解决方法是在恢复模式下执行 csrutil enable --without debug 来部分禁用 SIP,或将系统二进制文件复制到主目录并从中运行。详情请参阅 github issue #78。
-
glibc 动态链接器存在一个 bug 或安全特性,导致通过 dlopen() 加载的模块无法像主程序那样应用相同的 dlsym 挂钩。这主要影响 perl 或 python 等脚本语言,这些语言严重依赖 dlopen() 来加载用 C 编写的模块。不过,有未经证实的报告称以 root 身份运行时可以正常工作。musl libc 不受此 bug 影响。
实用链接
以下网站可能有助于检查泄漏:
https://ipfighter.com/
https://browserleaks.com/webrtc
https://dnsleaktest.com
http://check.torproject.org - tor 特有
http://ifconfig.me - 可通过 curl 使用
http://ifconfig.io/
社区:
#proxychains(在 irc.libera.chat 上)
捐赠:
欢迎比特币捐赠——请发送到以下地址:
1C9LBpuy56veBqw5N33sZMoZW8mwCw3tPh