4

私の目標は、tor SOCKS プロキシで python の機械化を使用することです。

次の Ubuntu バージョンで GUI を使用していません: 説明: Ubuntu 12.04.1 LTS リリース: 12.04 コードネーム: 正確

Tor がインストールされており、nmap スキャンによるとポート 9050 でリッスンしています。

    Starting Nmap 5.21 ( http://nmap.org ) at 2013-01-22 00:50 UTC
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.000011s latency).
    Not shown: 996 closed ports
    PORT     STATE SERVICE
    22/tcp   open  ssh
    80/tcp   open  http
    3306/tcp open  mysql
    9050/tcp open  tor-socks

また、ポート 9050 に telnet で接続できるかどうかを確認するのも合理的だと思いました。

    telnet 127.0.0.1 9050
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    quit
    Connection closed by foreign host.

tor を urllib2 で動作させるには、この投稿の提案に大きな期待を寄せていました: How can I use a SOCKS 4/5 proxy with urllib2?

そこで、Python で次のスクリプトを試しました。

    import socks
    import socket
    socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
    socket.socket = socks.socksocket
    import urllib2
    print urllib2.urlopen('http://icanhazip.com').read()

スクリプトは応答なしでハングします。

mechanize は urllib2 に関連しているように見えるので、次のスクリプトが機能する可能性があると思いました。

    import socks
    import socket
    import mechanize
    from mechanize import Browser
    socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
    socket.socket = socks.socksocket
    br = Browser()
    print br.open('http://icanhazip.com').read()

urllib2 スクリプトを使用すると、上記と同じ結果が得られます。

私はPythonとネットワーキングに非常に慣れていないので、非GUI Ubuntuサーバーでpython urllib2にtorをSOCKSとして使用させる方法についてセカンドオピニオンが必要です。

このスクリプトを実行したところ、期待どおりの応答がありました。tor プロキシは使用しませんでした。

    In [1]: import urllib2

    In [2]: print urllib2.urlopen('http://icanhazip.com').read()
    xxxx:xxxx:xxxx:512:13b2:ccd5:ff04:c5f4

ありがとう。

効果のあるものを見つけました!なぜ機能するのかわかりませんが、機能します。私はここでそれを見つけました: Python urllib over TOR?

    import socks
    import socket
    def create_connection(address, timeout=None, source_address=None):
        sock = socks.socksocket()
        sock.connect(address)
        return sock

    socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)

    # patch the socket module
    socket.socket = socks.socksocket
    socket.create_connection = create_connection

    import urllib2

    print urllib2.urlopen('http://icanhazip.com').read()

    import mechanize
    from mechanize import Browser

    br = Browser()
    print br.open('http://icanhazip.com').read()
4

2 に答える 2

1

上記の解決策は私にはうまくいきませんでした。私はUbuntu 14.04を使用しています。上記のスクリプトを実行しようとするたびに、次のエラーがスローされ続けます。

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen
  return _opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 404, in open
  response = self._open(req, data)
File "/usr/lib/python2.7/urllib2.py", line 422, in _open
  '_open', req)
File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain
  result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 1214, in http_open
  return self.do_open(httplib.HTTPConnection, req)
File "/usr/lib/python2.7/urllib2.py", line 1184, in do_open
  raise URLError(err)
urllib2.URLError: <urlopen error ((1, 'general SOCKS server failure'),)>

nmap コマンドを使用して、tor が実行されているかどうかを確認しました。

Nmap scan report for localhost (127.0.0.1)
Host is up (0.00026s latency).
Not shown: 993 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
631/tcp  open  ipp
902/tcp  open  iss-realsecure
3306/tcp open  mysql
9050/tcp open  tor-socks

Vidaliaをインストールすると、この問題は解決しました。どうやら、socks プロキシが接続の通過を許可していなかったようです。これが同じ問題に直面している誰かに役立つことを願っています。

于 2014-11-06T07:23:22.350 に答える