前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一种把指定程序的TCP流量重定向到代理的方法

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

作者头像
七夜安全博客
发布2018-08-16 10:40:56
2.4K0
发布2018-08-16 10:40:56
举报
文章被收录于专栏:七夜安全博客七夜安全博客

一个可以把指定程序的 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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 七夜安全博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一个可以把指定程序的 TCP 连接重定向到 SOCKS5 proxy 的工具。
    • 简介
      • 快速开始
        • 工作原理
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档