【问题标题】:Python script through the Tor network通过 Tor 网络的 Python 脚本
【发布时间】:2015-09-22 14:07:14
【问题描述】:

我编写了一个简单的 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 网络进行路由,但它看起来不是来自“标准”tor 浏览器。我理解后一部分,虽然我没有将它包含在上面的代码中,但我正在使用 User-Agent 字符串和其他标题,所以我将其归结为主要原因。我不明白的是,作为 py 脚本响应的 IP 是从哪里来的 h-e-double 曲棍球棒?

我的下一个问题是建立在这一切之上的,是如何将我的 python 脚本正确连接到 tor 网络?经过一番谷歌搜索,我发现 tor 会阻止除 socks 协议之外的所有内容的流量,并且另一种方法是将 privoxy 与 tor 结合使用。我最初的想法是做一些会导致软件分层的路由。在我看来,它看起来像:

Python -> Privoxy -> Tor -> 目的地

我的最终目标是获取一个基于 .onion 的地址并保存/读取它。然而,在所有这些问题开始发生后,我把它放在一边。一些有助于获得更好答案的信息:我使用的是 Windows 机器,虽然我有一台 Linux 机器,如果那里可能存在一些有助于这个过程的功能,而且我使用的是 Python 2.7,但同样,这可以很容易改变。

我想要求列出实现这一切的步骤 - 或至少一些链接/方向,我绝不害怕阅读一些关于该主题的好博客/教程。然而,我觉得这真的是几个单独的问题,需要安静地回答一个冗长的答案,所以我很高兴在我扯掉更多头发之前知道我走在正确的道路上:)

【问题讨论】:

    标签: python tor


    【解决方案1】:

    您的代码是正确的,但是您认为 Tor 将始终为您提供相同 IP 地址的假设不正确。由于电路隔离,Tor 的一项隐私功能可确保您打开的连接之间的隔离,您将通过与 Tor 浏览器不同的退出节点路由请求。

    可靠地模拟 Tor 浏览器的行为很难,我建议不要这样做。您连接到 Tor 网络的方法看起来是正确的。

    Tor 将允许您使用任何您想要的协议,但是是的,您需要通过 SOCKS 协议进行连接。不过这很好:几乎所有网络协议(包括 http)都可以很好地与 SOCKS 配合使用。

    【讨论】:

      【解决方案2】:

      使用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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-26
        • 2014-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-20
        • 2016-06-27
        • 2023-04-05
        相关资源
        最近更新 更多