撸了个转换 socks 代理的小工具,有点点像 proxifier, proxycap 的小工具,让不支持的代理可以使用代理访问网络。

2014-12-20 16:15:15 +08:00
 pagxir
原理是这样:
多数软件都会执行域名解析。在系统执行域名解析时,悄悄的将解释出的IP替换掉(通常替换成 127.0.x.x的一个本地回环IP)。那么,软件直接接的就不是目标IP, 而是替换后的IP,该IP被替换之后,会自动把域名还原回来,并通过socks代理真正的连接到目标真正IP地址。这样,只需要软件执行域名解析,就会被默默的通过代理链接服务器,从而把不支持服务器变成支持。

从上面的原理,看到,这个方法缺点很明显,就是如果软件没有使用域名,而是使用IP(跳过域名解析这一步骤)直接连接。

实现的代码见这里: https://github.com/pagxir/libtx 代码可以在FreeBSD/linux/win32上执行,但是只有linux/win32下,功能能正常使用。

编译很简单, 不需要依赖于额外的库,直接 checkout 执行 make即可,如果需要编译win32的版本,可以在linux 环境下安装 mingw32 来进行交叉编译,执行 checkbuild.sh就可以。

编译完成之后,生成 txrelay.exe (win32执行文件), txrelay (linux执行文件)。

默认的配置文件: dnstxrelay.conf,

1、将里面的 translate white-list 替换为 translate black-list

2、将里面的 nameserver 127.0.0.1:53 172.24.63.162:53 替换成 nameserver 127.0.0.1:53 <your-real-dns-server-ip>:53, 然后把你电脑的主dns设置为 127.0.0.1。

3、修改 relay socks5://127.0.0.1:8080 这一行设置为你的代理的IP地址和端口(不要写域名), 如果是你代理服务器是 https类型 则将 socks5 替换为https,如果socks4则以此类推。目前不支持代理认证。配置文件仅作参考。

修改完成之后, 执行txrelay -f dnstxrelay.conf, 软件就会自动侦听80/443端口,如果你的代理服务器能访问youtube的话,这个时候,你IE浏览器设置成步需要代理应该可以访问youtube的了。

你可以可以试试 nslookup www.facebook.com, 如果解析出来的IP地址是127.0.0.x 说明dns开始正常工作的了。

注意linux下因为需要绑定tcp/80 tcp/443 udp/53端,所以需要root权限。

如果有更新,请看这里: http://www.shifenwa.com/archives/16
9910 次点击
所在节点    分享创造
21 条回复
pagxir
2015-04-16 16:47:36 +08:00
关于判断是否域名污染的原理,有个人写过,但是暂时无法找到了。大致是,往境外发一个DNS请求包,目的地址的服务器并非是一个DNS服务器,所以期待的结果是完全没有应答。但是经过GFW的时候,因为GFW认为它是个被墙的域名,所以会伪造一个DNS应答。

也就是说,如果收到GFW的伪造的应答就说明该域名被墙了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/155329

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX