同样直接相关的是,在使用proxychains时,DNS服务器是如何查询的?假设我用Tor做丙链。
如果我取消对proxychains.conf的DNS部分的评论,我的请求就会被直接发送到Tor网络。如果是这样的话,DNS是如何解决的?在什么时候?取消对conf文件中该行的注释是否可以避免查询我的ISP的DNS服务器,如果是,那么如何避免?
非常感谢。
发布于 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请求,因为它是连接到实际目的地的代理。
特别是在您的情况下,如果您要运行:
$ proxychains curl https://example.comTor SOCKS5服务器将收到来自proxychains的请求,如:
Hello server! Connect me to www.example.com:443然后,Tor SOCKS5服务器将处理所有内容;执行DNS解析并通过Tor网络发送数据包。
TL;DR:当启用proxy_dns设置时,不会从您的终端发出(或需要)真正的DNS请求。
https://security.stackexchange.com/questions/224394
复制相似问题