graftcp 可以把任何指定程序(应用程序、脚本、shell 等)的 TCP 连接重定向到 SOCKS5 代理。
对比 tsocks、proxychains 或 proxyChains-ng,graftcp 并不使用 LD_PRELOAD 技巧来劫持共享库的 connect()、getaddrinfo() 等系列函数达到重定向目的,这种方法只对使用动态链接编译的程序有效,对于静态链接编译出来的程序,例如默认选项编译的 Go 程序,proxychains-ng 就无效了。graftcp 使用 ptrace(2) 系统调用跟踪或修改任意指定程序的 connect 信息,对任何程序都有效。工作原理后面将会解释。
假设你正在运行默认地址 "localhost:1080" 的 SOCKS5 代理,首先启动 graftcp-local:
./graftcp-local/graftcp-local
通过 graftcp 安装来自 golang.org 的 Go 包:
./graftcp go get -v golang.org/x/net/proxy
通过 graftcp 打开 Chromium / Chrome / Firefox 浏览器,网页的所有请求都会重定向到 SOCKS5 代理:
./graftcp chromium-browser
通过 graftcp 启动 Bash / Zsh / Fish,在这个新开的 shell 里面执行的任何新命令产生的 TCP 连接都会重定向到 SOCKS5 代理:
% ./graftcp bash
$ wget https://www.google.com
要达到重定向一个 app 发起的的 TCP 连接到其他目标地址并且该 app 本身对此毫无感知(透明代理)的目的,大概需要这些条件:
简单的流程如下:
更多信息: https://github.com/hmgle/graftcp
文章出处:V2EX
原文链接:https://www.v2ex.com/t/476594?from=singlemessage&isappinstalled=0