興味本位で実装してみたものの、日本語の文献が少なかったので書きます。
興味本位で試しただけなので特に深い意味や使用例はないです。いや、ほんまに。
自己責任でお願いします
不正利用等を推奨するものではありません。
ここで紹介した方法による如何なるトラブルに対しても、当方は一切の責任を負いかねます。
やること
環境
CentOS
CentOS Linux release 8.2.2004 (Core)
pip 20.2.4
Python 3.8.5
Tor 0.4.3.6
macOS
macOS Big Sur 11.0.1
Homebrew 2.5.12
pip 20.2.4
Python 3.8.5
Tor 0.4.4.6
Torのインストールとセットアップ
インストール
CentOS
# dnf -y install tor
macOS
$ brew install tor
セットアップ (スキップ可)
この手順はスキップ可能です。
詳細な設定を行う場合は、以下のファイルをお好みのエディタで編集します。
CentOS
# nano /etc/tor/torrc
macOS
$ cd /usr/local/etc/tor/
$ cp torrc.sample torrc
$ nano torrc
例えば、ノード/出口ノードで中国とロシアを経由しないように設定する場合は、以下を追加します。
torrc
ExcludeNodes {cn},{ru}
ExcludeExitNodes {cn},{ru}
日本国外からのアクセスであるように見せかけたい場合はExcludeExitNodes
に{jp}
を追加します。
Torの起動
CentOS
# # 起動
# systemctl start tor
# # 再起動または停止する場合
# systemctl restart tor
# systemctl stop tor
macOS
$ # 起動
$ 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を停止しておきましょう。
悪用ダメ、絶対。筆者も興味本位でちょっとやってみただけだし。いや、ほんまに。