我写了一个简单的python脚本来获取我的ip。
import urllib
import socks
import socket
#set the proxy and port
socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 9150)
#initialize the socket
socket.socket = socks.socksocket
#store the URL that we want
url = 'https://check.torproject.org/'
#open the URL and store it into 'response'
response = urllib.urlopen(url)
#parse the response
html = response.read()
#print to console
print html
没有什么太复杂,但是在分析来自check.torbrowser的响应时问题就开始了。该网站将始终给我一个与我当前在同一页面上运行的Tor浏览器不同的地址。但是,html响应会说我正在通过Tor网络进行路由,但它看起来并不是来自“标准”的浏览器。后一部分我理解,虽然我没有在上面的代码中包含它,但我正在使用User-Agent字符串和其他标题,因此我将其归结为主要原因。我不明白的是,在h-e-双曲棍球棒的哪个地方,知识产权来自于py脚本的响应?
我的下一个问题,建立在这一切之上,是如何正确地将我的python脚本连接到tor网络?经过一番谷歌搜索后,我发现tor会阻止除袜子协议之外的所有事情,而另一种方法是使用privoxy和tor。我最初的想法是做一些导致软件分层的路由。在我看来,它看起来像:
Python - > Privoxy - > Tor - >目的地
我所有这一切的最终目标是获取基于.onion的地址并保存/读取它。但是,在所有这些问题开始发生之后,我已经把它放在了一边。一个小信息,以帮助获得更好的答案:我使用的是Windows机器,虽然我有一个Linux机器,如果有一些可能存在的功能可以帮助这个过程,我使用的是Python 2.7,但是,这个可以很容易改变。
我想问一下,要实现这一切的步骤 - 或者至少是一些链接/方向,我绝不会害怕阅读一些关于这个主题的好博客/教程。但是,我觉得这真的是几个单独的问题,并且需要安静的答案,所以我会非常高兴地知道我在正确的道路上,然后才能撕掉更多的头发:)
答案 0 :(得分:2)
您的代码是正确的,但是您假设Tor总是会给您相同的IP地址。由于电路隔离,Tor的隐私功能可确保您打开的连接之间的隔离,您通过与Tor浏览器不同的出口节点来路由请求。
可靠地模仿Tor浏览器行为很难,我建议不要这样做。您连接Tor网络的方法看起来是正确的。
Tor将允许您使用您想要的任何协议,但是您需要通过SOCKS协议进行连接。但这很好:几乎所有网络协议(包括http)都可以很好地与SOCKS配合使用。
答案 1 :(得分:0)
使用torpy库,您可以根据需要更新电路。
>>> from torpy.http.requests import TorRequests
>>>
>>> def show_ip(resp):
... for line in resp.text.splitlines():
... if 'Your IP address appears to be' in line:
... print(line)
...
>>> with TorRequests() as tor_requests:
... print("build circuit")
... with tor_requests.get_session() as sess:
... show_ip(sess.get("https://check.torproject.org/"))
... show_ip(sess.get("https://check.torproject.org/"))
... print("renew circuit")
... with tor_requests.get_session() as sess:
... show_ip(sess.get("https://check.torproject.org/"))
... show_ip(sess.get("https://check.torproject.org/"))
...
build circuit
<p>Your IP address appears to be: <strong>178.17.171.102</strong></p>
<p>Your IP address appears to be: <strong>178.17.171.102</strong></p>
renew circuit
<p>Your IP address appears to be: <strong>49.50.66.209</strong></p>
<p>Your IP address appears to be: <strong>49.50.66.209</strong></p>