LoginSignup
5
8

More than 1 year has passed since last update.

【Python】Tor経由で接続して、IPと利用状態を確認してみる

Last updated at Posted at 2020-11-28

興味本位で実装してみたものの、日本語の文献が少なかったので書きます。
興味本位で試しただけなので特に深い意味や使用例はないです。いや、ほんまに。

自己責任でお願いします

不正利用等を推奨するものではありません。
ここで紹介した方法による如何なるトラブルに対しても、当方は一切の責任を負いかねます。

やること

環境

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が起動していないかもれません。ここの手順を確認して起動(または再起動)してみてください。

確認用ページ
https://check.torproject.org/

終了

起動したままだとアレなので、使わない時はTorを停止しておきましょう。
悪用ダメ、絶対。筆者も興味本位でちょっとやってみただけだし。いや、ほんまに。

5
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8