興味本位で実装してみたものの、日本語の文献が少なかったので書きます。
興味本位で試しただけなので特に深い意味や使用例はないです。いや、ほんまに。
自己責任でお願いします
不正利用等を推奨するものではありません。
ここで紹介した方法による如何なるトラブルに対しても、当方は一切の責任を負いかねます。
やること
環境
CentOS Linux release 8.2.2004 (Core)
pip 20.2.4
Python 3.8.5
Tor 0.4.3.6
macOS Big Sur 11.0.1
Homebrew 2.5.12
pip 20.2.4
Python 3.8.5
Tor 0.4.4.6
Torのインストールとセットアップ
インストール
# dnf -y install tor
$ brew install tor
セットアップ (スキップ可)
この手順はスキップ可能です。
詳細な設定を行う場合は、以下のファイルをお好みのエディタで編集します。
# nano /etc/tor/torrc
$ cd /usr/local/etc/tor/
$ cp torrc.sample torrc
$ nano torrc
例えば、ノード/出口ノードで中国とロシアを経由しないように設定する場合は、以下を追加します。
ExcludeNodes {cn},{ru}
ExcludeExitNodes {cn},{ru}
日本国外からのアクセスであるように見せかけたい場合はExcludeExitNodes
に{jp}
を追加します。
Torの起動
# # 起動
# systemctl start tor
# # 再起動または停止する場合
# systemctl restart tor
# systemctl stop tor
$ # 起動
$ brew services start tor
$ # 再起動または停止する場合
$ brew services restart tor
$ brew services stop tor
Torを用いた実装と実行
ライブラリとか
- PySocks
$ pip install PySocks
ソースと結果
Torのプロキシを利用して接続し、IPアドレスとTorの利用状態の変化を確認します。
import json
import socks
import socket
import urllib.request
# IPとTorの利用状態を取得して表示
def check():
req = urllib.request.Request("https://check.torproject.org/api/ip")
with urllib.request.urlopen(req) as res:
json_res = json.load(res)
print(f"IP: {json_res['IP']}, Tor: {json_res['IsTor']}")
# 設定前の状態を確認
check()
# Torのプロキシを利用するように設定
socks.set_default_proxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
socket.socket = socks.socksocket
# 設定後の状態を確認
check()
実行結果
IP: XXX.XXX.XXX.XXX, Tor: False
IP: YYY.YYY.YYY.YYY, Tor: True
結果から分かる通り、設定後のインターネットアクセスはTor経由となるため、IPが変わっています。ぐへへ。
実行時にエラーが出る場合は、Torが起動していないかもれません。ここの手順を確認して起動(または再起動)してみてください。
終了
起動したままだとアレなので、使わない時はTorを停止しておきましょう。
悪用ダメ、絶対。筆者も興味本位でちょっとやってみただけだし。いや、ほんまに。