一种把指定程序的TCP流量重定向到代理的方法

一个可以把指定程序的 TCP 连接重定向到 SOCKS5 proxy 的工具。

简介

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 本身对此毫无感知(透明代理)的目的,大概需要这些条件:

  • fork(2) 一个新进程,通过 execv(2) 启动该 app,并使用 ptrace(2) 进行跟踪,在 app 执行每一次 TCP 连接前,捕获并拦截这次 connect(2) 系统调用,获取目标地址的参数,并通过管道传给 graftcp-local。
  • 修改这次 connect(2) 系统调用的目标地址参数为 graftcp-local 的地址,然后恢复执行被中断的系统调用。返回成功后,这个程序以为自己连的是原始的地址,但其实连的是 graftcp-local 的地址。这个就叫“移花接木”。
  • graftcp-local 根据连接信息和目标地址信息,与 SOCKS5 proxy 建立连接,把 app 的请求的数据重定向到 SOCKS5 proxy。

简单的流程如下:

更多信息: https://github.com/hmgle/graftcp

文章出处:V2EX

原文链接:https://www.v2ex.com/t/476594?from=singlemessage&isappinstalled=0

原文发布于微信公众号 - 七夜安全博客(qiye_safe)

原文发表时间:2018-08-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

前端:图文混排-怎么在不使用float的情况下实现想要的效果呢?

异常处理汇总-前端系列 http://www.cnblogs.com/dunitian/p/4523015.html 举个例子 ? 重点:display:fle...

31211
来自专栏郭耀华‘s Blog

Vmware虚拟机安装Ubuntu 16.04 LTS(长期支持)版本+VMware tools安装

今天用VMware虚拟机安装了Ubuntu 16.04,过程用点繁琐,顺便又安装了VMware tools,这样就可以全屏显示Ubuntu系统了,下面是具体的安...

4785
来自专栏移动端周边技术扩展

.a VS .framework VS .dylib

2275
来自专栏Python疯子

iOS 之多个 button 的单选与多选

下面是实现的代码: 首先创建10个button(一个一个写太麻烦了,个人认为还是用一个 for 循环来创建比较好)

891
来自专栏Jerry的SAP技术分享

如何使用腾讯云提供的云主机

下载PuTTY这个远程登录软件,host name输入腾讯云自动分配的IP地址,端口号22:

4779
来自专栏DeveWork

WordPress 一键关闭/禁止页面评论功能

WordPress 中页面都是默认开启批量功能的,对于一些特殊的网站,可能需要禁止所有的页面的评论功能;一个个去页面编辑页面去禁止固然可以,但是页面一多的话那就...

1946
来自专栏菩提树下的杨过

"Goole项目托管"及"CodePlex发布开源项目"要点

一.google项目托管相对比较容易 http://code.google.com/ 先注册一个gmail邮箱,然后参考孟子的这篇文章http://blog.c...

2077
来自专栏前端大白专栏

关于上报错误最简单的实现方式--利用图片

1645
来自专栏WindCoder

ubuntu13.10下安装Eclipse兼tar.gz提取时提示失败的解决办法

前段时间一直想编程时在linux下常驻,于是在ubuntu里面配置java环境,按Eclipse遇到了点问题,就一直没能继续进行下去,今天刚刚找到解决办法,终于...

691
来自专栏腾讯云实验室

搭建微信订阅号后台

腾讯云提供了开发者实验室帮助用户搭建微信订阅号后台,教程内容如下,用户可以点击开发者实验室快速上机完成实验。

8644

扫码关注云+社区