|
ウェブスクレイピング、脆弱性発見、ペネトレーションテストなどを行う際に、リクエストの傍受によってタスクが中断されるというフラストレーションに遭遇することがよくあります。この問題に対処するために登場したのが、プロキシプール技術です。これは魔法の「プール」のように機能し、プールにリクエストするだけでプロキシIPアドレスを提供します。IPがブロックされても心配はいりません。別のプロキシIPアドレスにランダムに切り替えて、簡単にアクセスリクエストを続行できます。今日は、IPプロキシプールのインストールと使用方法を簡単に確認し、IPアドレスを隠すためのヒントを習得しましょう。 最近、GitHubでproxy_pool[1]という素晴らしいプロジェクトを発見しました。これは無料のプロキシプールツールです。このプロジェクトは完全にオープンソースで、開発者によって積極的にメンテナンスされており、非常に活発に活動しています。 プロジェクト紹介proxy_pool プロジェクトは Python 言語を使用して開発され、主に次の機能を実装します。 - 無料のプロキシ Web サイトを定期的にクロールでき、シンプルでスケーラブルです。
- Redis を使用してプロキシを保存し、可用性によって並べ替えます。
- 定期的にテストとフィルタリングを実行して、使用できないプロキシを削除し、使用可能なプロキシを保持します。
- テスト済みで使用可能なプロキシをランダムに生成できるプロキシ API を提供します。
現在、このプロジェクトは 5.3K 個のスター (GitHub スター) を獲得しており、幅広い注目と認知を得ています。 展開方法プロキシプールは2つの方法で実行できます。1つはDockerを使用する方法(推奨)で、もう1つは従来の方法で実行する方法です。具体的な要件は次のとおりです。 1. ドッカーDocker を使用する場合は、次の環境をインストールする必要があります。 インストール手順はご自身で検索できます。公式Docker Hubイメージ: germey/proxypool[2] 2. 従来の方法標準的なアプローチでは、Python 環境と Redis 環境が必要であり、具体的な要件は次のとおりです。 Dockerの実行Docker と Docker-Compose がすでにインストールされている場合は、コマンド 1 つで簡単に実行できます。 docker-compose up 結果は次のようになります。 redis | 1:M 19 Feb 2020 17:09:43.940 * DB loaded from disk: 0.000 seconds redis | 1:M 19 Feb 2020 17:09:43.940 * Ready to accept connections proxypool | 2020-02-19 17:09:44,200 CRIT Supervisor is running as root. Privileges were not dropped because no user is specified in the config file. If you intend to run as root, you can set user=root in the config file to avoid this message. proxypool | 2020-02-19 17:09:44,203 INFO supervisord started with pid 1 proxypool | 2020-02-19 17:09:45,209 INFO spawned: 'getter' with pid 10 proxypool | 2020-02-19 17:09:45,212 INFO spawned: 'server' with pid 11 proxypool | 2020-02-19 17:09:45,216 INFO spawned: 'tester' with pid 12 proxypool | 2020-02-19 17:09:46,596 INFO success: getter entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) proxypool | 2020-02-19 17:09:46,596 INFO success: server entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) proxypool | 2020-02-19 17:09:46,596 INFO success: tester entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) ご覧の通り、Redis、Getter、Server、Tester はすべて正常に起動しています。これで、http://localhost:5555/random にアクセスすると、ランダムに選択されたプロキシが提供されます。 もちろん、次のコマンドを実行するだけで自分でビルドすることもできます。 docker-compose -f build.yaml up 使用実行が成功すると、http://localhost:5555/random 経由でランダムで使用可能なプロキシを取得できます。 これはプログラムによる統合によって実現できます。次の例は、プロキシを取得してWebページをクロールするプロセスを示しています。 import requests proxypool_url = 'http://127.0.0.1:5555/random' target_url = 'http://httpbin.org/get' def get_random_proxy(): """ get random proxy from proxypool :return: proxy """ return requests.get(proxypool_url).text.strip() def crawl(url, proxy): """ use proxy to crawl page :param url: page url :param proxy: proxy, such as 8.8.8.8:8888 :return: html """ proxies = {'http': 'http://' + proxy} return requests.get(url, proxies=proxies).text def main(): """ main method, entry point :return: none """ proxy = get_random_proxy() print('get random proxy', proxy) html = crawl(target_url, proxy) print(html) if __name__ == '__main__': main() 結果は次のとおりです。 get random proxy 116.196.115.209:8080 { "args": {}, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Host": "httpbin.org", "User-Agent": "python-requests/2.22.0", "X-Amzn-Trace-Id": "Root=1-5e4d7140-662d9053c0a2e513c7278364" }, "origin": "116.196.115.209", "url": "https://httpbin.org/get" } ご覧のとおり、プロキシは正常に取得され、プロキシの可用性を確認するために httpbin.org に要求されました。 最後にネットワークデータの取得とセキュリティテストにおいて、プロキシプールは非常に有用なツールです。プロキシリソースを効果的に管理・活用し、作業効率を向上させることができます。この記事では、プロキシプールの原理と使用方法をより深く理解していただくことを目的としています。開発者であれセキュリティエンジニアであれ、プロキシプールの使用スキルを習得することは、仕事において貴重な資産となるでしょう。 参照: - [1]proxy_pool:https://github.com/Python3WebSpider/ProxyPool
- [2]germey/proxypool:https://hub.docker.com/r/germey/proxypool
|