您的位置:首页 > 大数据 > 人工智能

proxychains-ng 工作原理分析

2016-05-04 00:03 639 查看

概要

linux 中使用
LD_PRELOAD


mac osx 中使用
DYLD_INSERT_LIBRARIES
DYLD_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://github.com/rofl0r/proxychains-ng

http://www.catonmat.net/blog/simple-ld-preload-tutorial/

http://www.catonmat.net/blog/simple-ld-preload-tutorial-part-2/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  proxy proxychains-ng