私の目標は、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()