mit tor als SOCKS5-Proxy mit Python urllib2 oder mechanisieren

Mein Ziel ist es, Pythons Mechanisierung mit einem SOCKS-Proxy zu verwenden.

Ich benutze keine GUI mit der folgenden Ubuntu-Version: Beschreibung: Ubuntu 12.04.1 LTS Release: 12.04 Codename: präzise

Tor ist installiert und überwacht Port 9050 gemäß dem nmap-Scan:

    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

Ich fand es auch vernünftig zu sehen, ob ich zu Port 9050 telneten kann, was ich kann:

    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.

Ich hatte große Hoffnungen auf den Vorschlag in diesem Beitrag, urllib2 zum Laufen zu bringen:Wie kann ich einen SOCKS 4/5 Proxy mit urllib2 verwenden?

Also habe ich folgendes Skript in Python ausprobiert:

    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()

Das Skript hängt nur ohne Antwort.

Ich dachte, da mechanize mit urllib2 zu tun zu haben scheint, könnte das folgende Skript funktionieren:

    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()

Ich erhalte das gleiche Ergebnis wie oben mit dem urllib2-Skript.

Ich bin sehr neu in Python und Networking, daher brauche ich eine zweite Meinung dazu, wie ich Python urllib2 dazu bringen kann, tor als SOCKS auf einem Ubuntu-Server ohne GUI zu verwenden.

Ich habe dieses Skript ausgeführt und eine erwartete Antwort erhalten. Ich habe den Tor-Proxy nicht benutzt:

    In [1]: import urllib2

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

Vielen Dank.

Ich habe etwas gefunden, das funktioniert! Ich habe keine Ahnung, warum es funktioniert, aber es funktioniert. Ich habe es hier gefunden:Python-Urllib über 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()

Antworten auf die Frage(2)

Ihre Antwort auf die Frage