Torとは?
Tor(トーア、英語: The Onion Router)とは、TCP/IPにおける接続経路の匿名化を実現するための規格、及びそのリファレンス実装であるソフトウェアの名称である。通常、ユーザはローカルにSOCKSプロキシ (オニオンプロキシ) を立て、そのプロキシ経由で通信を行うことになる。Torという名称は、オリジナルのソフトウェア開発プロジェクトの名称である「The Onion Router」の頭文字を取ったものである。
https://ja.wikipedia.org/wiki/Tor
要約すると、Torを使うと、自分の現在使っているIP以外からWEBにアクセスすることができます。
Torで検索するとTorブラウザが出てきて、一般的にみんなが使っているのはブラウザとしてのTorの方だと思いますが、Torブラウザ自体はFierFoxブラウザをカスタムしたもので、Torの本体はSocksプロキシです。
__追記__
PythonでTorを扱いやすくするモジュールを作成しました。ソースコードはnoteで公開していて、機能は以下の記事で紹介しています。
興味がある方は覗いてみてください。
Torを使ったWebスクレイピング
Webスクレイピングに、そのSocksプロキシを流用することで、簡単にIPアドレスを変更することが可能になります。
つまり自分のIPではないIPを使って色んなWEBサイトにBOTアクセスすることが可能になります。
Torを使ったスクレイピングはどういった場合に便利なのか?
WEBアクセスの自動化、スクレイピングやBOTアクセスというのは年々、制限が厳しくなっているサイトが増えています。
例えばブックオフオンラインというサイトで、20回ほど連続でF5ボタンを押してみてください。
ブックオフオンラインは割と昔からですが、短期間にアクセスを集中させてしまうと上記写真のような、アクセス制限ページが表示されるようになります。
複合的な条件(クッキーなど)でアクセスを制限してくるサイトなどもありますが主にIPを使って制限してくることがほとんどです。
Torを使えば、そのようなアクセス制限を簡単に回避することが可能になります。
IPアドレスを変えるだけなら公開プロキシを使う手もありますが、全く安定性がないですし、都度、接続先の公開プロキシ情報を取得して差し替える必要があるのも難点です。
制限しているサイトにその制限を回避してアクセスするのは如何なものか、という意見もあるかとは思いますが、ここではあくまで技術的な話をしていきますので、倫理的な話は棚に上げておきます。
Torを準備する
Torのダウンロード
Tor公式サイトより各自OSにあったものをダウンロードしてください。
Linuxの場合ならパッケージ管理モジュールコマンドで一発でインストール可能です。
sudo yum install tor
Windowsなどで公式からダウンロードしてきた場合はZipファイルの状態だと思いますので、解凍してください。
解凍後は特にインストーラなどはありませんので中に入っているtor.exeがソフトの本体となります。
Torを起動する
起動はコマンドラインで行います。
Windowsの場合はコマンドプロンプトを立ち上げてtor.exeがあるディレクトリまで移動した後、以下のコマンド。
tor
そのままtor.exeを起動するだけですね。
Linuxでパッケージソフトで入れた場合はPathが通っていると思いますので、以下のコマンドでどこからでも起動できます。
sudo service tor start
基本的にこれだけでSocksプロキシが立ち上がり、そのプロキシ越しに接続すると、Torネットワークを使ってWebにアクセスすることができます。
特に何もいじっていないディフォルトの状態だと9050ポートがSocksのポートになります。
PythonのrequestsでTor越しにWebアクセスしてみる
ここでは例としてPythonのrequestsでTorを使ってHttpリクエストを送ってみます。
以下ではAmazonのAWSを使っています。
import requests proxies = { 'http':'socks5://127.0.0.1:9050', 'https':'socks5://127.0.0.1:9050' }
まずはプロキシを刺さずに。
res = requests.get('https://ipinfo.io').json() print(res) >>>{'ip': '13.58.36.108', 'hostname': 'ec2-13-58-36-108.us-east-2.compute.amazonaws.com', 'city': 'Ashley', 'region': 'Ohio', 'country': 'US', 'loc': '40.4089,-82.9555', 'postal': '43003', 'phone': '740', 'org': 'AS16509 Amazon.com, Inc.'}
printされているのはAWSのLinuxOSからWebアクセスしたときの情報です。
次にプロキシ越しにアクセスしてみます。
res = requests.get('https://ipinfo.io', proxies=proxies).json() print(res) >>>{'ip': '109.70.100.22', 'hostname': '22.0-25.100.70.109.in-addr.arpa', 'city': 'Vienna', 'region': 'Vienna', 'country': 'AT', 'loc': '48.2402,16.3773', 'postal': '1200', 'org': 'AS1764 Next Layer Telekommunikationsdienstleistungs- und Beratungs GmbH'}
requestsのgetメソッドの第二引数にproxiesプロパティを設定して先ほど格納した変数を渡しています。
しっかりIPアドレスが変わっています。Torは再起動のたびにIPアドレスが変わります。
ちなみにPythonだとsubprocessモジュールを使うと簡単にtorを再起動してIPアドレスを変更することができます。
import subprocess args = ['sudo', 'service', 'tor','restart'] subprocess.call(args) res = requests.get('https://ipinfo.io',proxies=proxies).json() print(res) >>>{'ip': '185.220.101.35', 'city': 'Berlin', 'region': 'Berlin', 'country': 'DE', 'loc': '52.4947,13.2852', 'postal': '14193', 'org': 'AS200052 Joshua Peter McQuistan'}
更にIPアドレスが変更できました。
Torを使ったスクレイピングまとめ
Torを使うとプロキシを指すだけで簡単にIPアドレスを変更できます。
ちなみにブラウザ自動操作系のスクレイピングライブラリでもプロキシの設定さえすれば同じように使うことができます。Pythonで言えばseleniumのChrome操作とかですね。
試してませんが、VBAスクレイピングなんかもIEの自動操作なのでIE側にプロキシの設定さえすれば同じくTor越しにIPアドレスを変更してアクセスできると思います。
以下はPythonを使ったスクレイピングに関する記事一覧です。
Pythonはスクレイピングをするには便利なライブラリが豊富に揃っていて一度なれると他の言語で同じことするのが億劫になります。
更に踏み込んだテクニックとしてTorを複数起動させて、同時に複数のIPアドレスを使用するテクニックもあります。それはまたの機会に。
コメント
コメント一覧 (2件)
同時に複数のIPアドレスを使用する方法を知りたいのですが、ご教授願えないでしょうか?
Torは起動したプロセス毎にIPが変わるので、複数同時に立ち上げて各ポートの経由で接続すれば、それぞれのIPで接続できるようになりますよ!
スレッドの並列化などもこの方法で対応できます。