использование tor в качестве SOCKS5 прокси с python urllib2 или механизировать

Моя цель состоит в том, чтобы использовать Python's механизировать с помощью SOCKS-прокси.

Я не использую графический интерфейс со следующей версией Ubuntu: Описание: Ubuntu 12.04.1 LTS Release: 12.04 Кодовое имя: точный

Tor установлен и прослушивает порт 9050 согласно сканированию nmap:

    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 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.

У меня были большие надежды на предложение в этом посте заставить работать с urllib2:Как я могу использовать SOCKS 4/5 прокси с 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()

Сценарий просто зависает без ответа.

Я подумал, что поскольку механизация, по-видимому, связана с 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 и сетями, поэтому мне нужно второе мнение о том, как заставить python urllib2 использовать tor в качестве SOCKS на сервере Ubuntu без графического интерфейса пользователя.

Я запустил этот скрипт и получил ожидаемый ответ. Я не использовал Tor прокси:

    In [1]: import urllib2

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

Благодарю.

Я нашел то, что работает! Я понятия не имею, почему это работает, но это делает. Я нашел это здесь:Python urllib над 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()

Ответы на вопрос(2)

Ваш ответ на вопрос