ProxyChains-NG 4.17 版 README
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 的作者和维护者不对本软件的任何滥用或误用
以及由此产生的后果承担任何
责任。
*** 安装 ***
需要一个可用的 C 编译器,最好是 gcc
./configure --prefix=/usr --sysconfdir=/etc
make
[可选] sudo make install
[可选] sudo make install-config(安装 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 预加载
- 修复多线程应用中的双重关闭
- 对 configure 脚本的各种改进
4.16 版
- 修复 configure 脚本链接器标志检测中的回归问题
- 移除存在 10 年之久的针对错误 glibc getnameinfo 签名的变通方案
- 支持 OSX Monterey 的新 DYLD 挂钩方法
- netbsd 编译修复
- 支持 IPv6 localnets
- execvp 失败时提供更友好的错误消息
- proxy_getaddrinfo():如被请求则填充 ai_socktype
4.15 版
- 修复 configure 脚本针对有缺陷的 binutils 版本的问题
- 以纳秒级粒度初始化 rand_seed
- 在 getaddrinfo 中添加对数字 IPv6 的支持
- 修复当 node 为 null 且 !passive 时 getaddrinfo 中的 bug
- 添加 dnat 功能
- 添加 raw 代理类型
- 添加 haiku 支持
- 添加 proxy_dns_old 以模拟 proxychains 3.1 的行为
- 添加新的 proxy_dns_daemon 功能(实验性)
- 其他各种修复
4.14 版
- 允许代理列表使用替代的 proto://user:pass@ip:port 语法
- 修复轮询模式下所有代理均不可用时的无限循环(#147)
- 修复在 android 上的编译(#265)
- 修复 fork 进程中的 fd 泄漏(#273)
- 跳过对 nullrouted IP 的连接尝试
- 在特定情况下允许代理列表使用主机名
4.13 版
- 修复 DNS 查询线程的健壮性问题及一处段错误
- 修复在不符合规范的服务器上的 socks5 用户名/密码认证
- 修复内存泄漏
- 添加对 Solaris 的支持
4.12 版
- 修复若干构建问题
- 针对 MAC
- 使用 -pie 时
- 使用自定义 CC 时
- 针对某些 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 构造函数时惰性分配的错误。
- 新增 configure 标志 --fat-binary,用于在 OS X 上创建“胖”二进制/库
- 在 close 钩子中返回 EBADF 而非 EINTR。
程序在收到 EINTR 时重试 close() 调用是合法的,这可能导致无限循环,如在 chromium 中所见。
版本 4.6:
- 对 Makefile 的一些外观性修复,修复了使用非数字 IP 作为代理服务器地址时的错误。
版本 4.5:
- 钩住 close() 以防止 OpenSSH 干扰内部基础设施。
这曾导致 ssh 客户端在代理化时发生段错误。
版本 4.4:
- FreeBSD 移植
- 修复了 Debian 和 Mac 上的一些安装问题。
版本 4.3:
- 修复在子进程(fork() 产生的)中进行 DNS 查询的程序(如 irssi)。为实现此目的,牺牲了对无 pthreads 编译的支持。
- 修复了 gethostent() 调用的线程安全问题。
- 由于 hostent 数据库被缓存,提高了 DNS 处理速度。
版本 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
[ProxyList] 中的第一个代理可以通过 unix 域套接字而非 IP 和端口访问,
例如,绑定到仅其所有者可访问的套接字的 ssh 隧道的 SOCKS 代理:
$ ssh -N -o StreamLocalBindMask=0177 -D ~/.ssh/sock/socks.sock relay
[ProxyList]
socks5 unix:/home/user/.ssh/sock/socks.sock
该路径必须是绝对路径,且长度最多为 107 个字符。此类代理只能作为代理链中的第一个代理,并且不能与 random_chain 或 round_robin_chain 模式下的其他代理组合使用。
用法示例:
$ 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 的新安全功能,
它会阻止对系统应用进行 hook。
解决方法是在恢复模式下执行
csrutil enable --without debug 来部分禁用 SIP,
或者将系统二进制文件复制到主目录并从那里运行。
详情请参见 github issue #78。
-
glibc 动态链接器存在一个 bug 或安全特性,会阻止通过 dlopen() 加载的
模块受到与主程序相同的 dlsym hook 影响。这主要影响 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/
社区:
irc.libera.chat 上的 #proxychains
捐赠:
欢迎比特币捐赠 - 请发送至以下地址:
1C9LBpuy56veBqw5N33sZMoZW8mwCw3tPh