首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >proxychains如何避免DNS泄漏?

proxychains如何避免DNS泄漏?
EN

Security用户
提问于 2020-01-17 20:19:04
回答 1查看 6.7K关注 0票数 3

同样直接相关的是,在使用proxychains时,DNS服务器是如何查询的?假设我用Tor做丙链。

如果我取消对proxychains.conf的DNS部分的评论,我的请求就会被直接发送到Tor网络。如果是这样的话,DNS是如何解决的?在什么时候?取消对conf文件中该行的注释是否可以避免查询我的ISP的DNS服务器,如果是,那么如何避免?

非常感谢。

EN

回答 1

Security用户

回答已采纳

发布于 2020-01-18 16:35:36

部分原因归结为一般的丙烷链是如何工作的。为了从任意程序(可能有或可能没有代理支持)代理通信量,proxychains使用LD_PRELOAD环境变量将自己作为共享库加载到正在调用的程序中。因为它是“预”-loaded,所以proxychains库公开的函数优先于其他函数,例如libc。这使它能够挂钩某些网络相关的功能。

例如,当程序在TCP套接字上调用connect()时,proxychains已经用自己的connect()函数替换了真正的D2函数,而后者知道如何通过配置的代理插入流量。

DNS也是如此,尽管这是一个稍微特殊的情况。应用程序将调用gethostbyname() (过时)或getaddrinfo()来执行DNS解析。如果配置文件中没有指定proxy_dns选项,则proxychains将调用未更改的libc函数,通常通过系统解析DNS。如果存在proxy_dns选项,它将相反地将这两个函数重定向到一个修改过的gethostbyname()版本,这个版本比较复杂。

这个修改过的版本实际上根本不做任何DNS解析。相反,它在保留的224.x.x.x或225.x.x.x范围内创建假IP地址,并将请求的主机名映射到表中(例如224.1.2.3 --> www.example.com)。这个以后会派上用场的。

然后,应用程序连接到上面返回的假地址(224.1.2.3)。Proxychain的钩子connect随后将建立到配置的代理的连接。然后,它将在DNS表中查找假IP地址,以检索您所请求的原始主机名(proxychains说:‘224.1.2.3?那是"www.example.com")。根据使用中的代理类型,它将通过代理请求到原始主机名的连接。代理代表您执行DNS请求,因为它是连接到实际目的地的代理。

特别是在您的情况下,如果您要运行:

代码语言:javascript
复制
$ proxychains curl https://example.com

Tor SOCKS5服务器将收到来自proxychains的请求,如:

代码语言:javascript
复制
Hello server! Connect me to www.example.com:443

然后,Tor SOCKS5服务器将处理所有内容;执行DNS解析并通过Tor网络发送数据包。

TL;DR:当启用proxy_dns设置时,不会从您的终端发出(或需要)真正的DNS请求。

源:阅读https://github.com/haad/proxychains/的源代码

票数 7
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/224394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档