
ProxyChains 是一个 UNIX 程序,它通过预加载的 DLL 钩住动态链接程序中的网络相关 libc 函数,并将连接重定向到 SOCKS4a/5 或 HTTP 代理。
警告:此程序仅适用于动态链接的程序。此外,proxychains 和要调用的程序必须使用相同的动态链接器(即相同的 libc)。
当进程 fork 时,在子进程中进行 DNS 查找,然后在父进程中使用该 IP,对应的 IP 映射将找不到,这是因为 fork 无法写回父进程的映射表。IRSSI 表现出这种行为,因此你必须将解析后的 IP 地址传递给它。(你可以使用 proxyresolv 脚本(需要 "dig")来实现)
这意味着你目前无法在 irssi 中使用 tor onion 网址。要解决这个问题,需要一个外部数据存储(文件、管道等)来管理 DNS <-> IP 映射。当然必须有适当的锁定。shm_open、mkstemp 是基于文件的方法的可能候选,另一个选项是生成某种管理映射查找的服务器进程。由于 connect() 等被钩住,这不能是一个 TCP 服务器。
我不愿意进行这一更改,因为所描述的行为似乎相当愚蠢(仅仅为了 DNS 查找而进行 fork),而且 irssi 是目前唯一已知受影响的程序。
Proxychains-4.3.0 可通过 pkgsrc 提供给在 Linux、NetBSD、FreeBSD、OpenBSD、DragonFlyBSD 或 Mac OS X 上使用 pkgsrc 的用户。你只需要安装 pkgsrc-wip 仓库,然后在 wip/proxychains 目录中运行 make install
你可以通过 link:http://www.pkgsrc.org[pkgsrc] 了解更多关于 pkgsrc 的信息,通过 link:https://pkgsrc.org/wip[Pkgsrc-wip 主页] 了解更多关于 pkgsrc-wip 的信息。
你可以使用 homebrew 在 Mac OS X 上安装当前版本的 proxychains。你需要从以下位置下载非官方的 link:https://gist.github.com/3792521[homebrew formula] 到你的 BREW_HOME(默认为 /usr/local/Library/Formula/),然后运行
$ brew install proxychains
# 需要一个可用的 C 编译器,最好为 gcc
./configure
make
sudo make install
版本 (4.x) 移除了 dnsresolver 脚本,该脚本需要一个动态链接的 "dig" 二进制文件来进行远程 DNS 查找。这加速了任何涉及 DNS 的操作,因为旧脚本必须使用 TCP。此外,它允许在与 TOR 一起使用时使用 .onion 网址。此外,它用简单的 Makefile 替换了损坏的 autoconf 构建系统。不过为了方便,还有一个 ./configure 脚本。它还增加了对通过命令行选项/环境变量传递配置文件的的支持。
版本 (3.x) 引入了通过代理进行 DNS 解析的支持,支持 SOCKS4、SOCKS5 和 HTTP CONNECT 代理服务器。
例如:your_host <--> proxy1 <--> proxy2 <--> target_host
例如:your_host <-->socks5 <--> http <--> socks4 <--> target_host
proxychains nmap -sT -PO -p 80 -iR (通过代理查找一些 web 服务器)
proxychains 按以下顺序查找配置:
详见 /etc/proxychains.conf
$ proxychains4 telnet targethost.com
在此示例中,它将通过 proxychains.conf 指定的代理(或代理链)运行 telnet。
$ proxychains4 -f /etc/proxychains-other.conf targethost2.com
在此示例中,它将使用与 proxychains.conf 不同的配置文件连接到 targethost2.com 主机。
$ proxyresolv targethost.com
在此示例中,它通过 proxychains.conf 指定的代理(或代理链)解析 targethost.com。
$ ssh -fN -D 4321 some.example.com
$ PROXYCHAINS_SOCKS5_HOST=127.0.0.1 PROXYCHAINS_SOCKS5_PORT=4321 proxychains zsh
在此示例中,它将运行一个 shell,所有流量都通过 localhost 端口 4321 上的 OpenSSH "动态代理"(SOCKS5 代理)进行代理。
$ export PROXY_DNS_SERVER=8.8.8.8
$ proxychains4 telnet targethost.com
在此示例中,它将使用用户通过 PROXY_DNS_SERVER 提供的 8.8.8.8 名称服务器 telnet 到 targethost.com。