【发布时间】:2016-09-03 17:19:12
【问题描述】:
假设这个工作代码:
import win_inet_pton
import socks
import socket
s = socks.socksocket()
s.set_proxy(socks.SOCKS5, "localhost", 9050)
s.connect(("xmh57jrzrnw6insl.onion",80))
s.send("GET / HTTP/1.1\r\n\r\n")
print 'sended'
data=s.recv(1024)
print data
Tor 服务确实在 9050 端口运行。
正常情况下,python 会通过连接 Tor 中继的 SOCKS5 代理进行 DNS 解析。但是,Tor 不处理 UDP 数据包(它直接从 TCP 数据包中的主机名处理解析),因此 DNS 解析会失败。
这段代码怎么可能工作? (例如 java 中的等效代码将失败,因为无法进行 DNS 解析)。
【问题讨论】:
-
@tripleee 抱歉,我不认为这是跨站点重复。我想指出的是代码只能在 python 中工作。如果您使用其他编程语言尝试此操作,我认为 DNS 解析是通过代理进行的,将失败并关闭套接字。这是代理/套接字实现通过代理执行DNS解析的正常过程。所以我想知道为什么它在 python 中工作。另外,这里的过程是不同的,因为我试图连接到一个洋葱域(如果你尝试连接到一个隐藏的服务,那么没有退出节点执行 DNS 解析的概念)。