proxychains-ng 工作原理分析

概要

  • linux 中使用 LD_PRELOAD
  • mac osx 中使用 DYLD_INSERT_LIBRARIESDYLD_FORCE_FLAT_NAMESPACE=1 环境下

对网络相关的 API(sys/socket.h, 见 src/libproxychains.c) 进行 hook 实现代理的功能

细节

src/libprocychains.c

// hook socket 相关的函数
static void setup_hooks(void) {
	SETUP_SYM(connect);
	SETUP_SYM(sendto);
	SETUP_SYM(gethostbyname);
	SETUP_SYM(getaddrinfo);
	SETUP_SYM(freeaddrinfo);
	SETUP_SYM(gethostbyaddr);
	SETUP_SYM(getnameinfo);
	SETUP_SYM(close);
}

src/main.c

// 主要逻辑如下,加载动态链接库,然后执行后面的程序,由于是同一个进程仅仅更换执行的代码所以动态链接的网络库使用的是修改过的不会变
// proxychains4 curl http://ipecho.net/plain; echo
int main(int argc, char *argv[]) {
	int start_argv = 1;

	putenv("LD_PRELOAD=/usr/local/lib/libproxychains4.dylib");
	execvp(argv[start_argv], &argv[start_argv]);
}

待续

references

转载于:https://my.oschina.net/xieyunzi/blog/669349

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值