使用tor作为带有python urllib2或mechanize的SOCKS5代理

DMf*_*fll 4 ubuntu networking mechanize urllib2 tor

我的目标是使用python的机械化和tor SOCKS代理.

我没有使用具有以下Ubuntu版本的GUI:描述:Ubuntu 12.04.1 LTS版本:12.04代号:精确

根据nmap扫描安装Tor并正在侦听端口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
Run Code Online (Sandbox Code Playgroud)

我还认为我是否可以telnet到端口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.
Run Code Online (Sandbox Code Playgroud)

我非常希望在这篇文章中建议使用urllib2: 如何使用带有urllib2的SOCKS 4/5代理?

所以我在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()
Run Code Online (Sandbox Code Playgroud)

该脚本只是挂起而没有响应.

我认为,由于机械化似乎与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()
Run Code Online (Sandbox Code Playgroud)

我使用urllib2脚本得到与上面相同的结果.

我是python和网络的新手,所以我需要关于如何使python urllib2在非GUI Ubuntu服务器上使用tor作为SOCKS的第二意见.

我运行此脚本并收到预期的响应.我没有使用tor代理:

    In [1]: import urllib2

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

谢谢.

我找到了有用的东西!我不知道它为什么会起作用,但确实如此.我在这里找到了: 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()
Run Code Online (Sandbox Code Playgroud)

DMf*_*fll 8

见问题的结尾.

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()
Run Code Online (Sandbox Code Playgroud)