ウェブスクレイピング用のランダムIPを生成する方法

Pythonベースのランダムipジェネレーターの作成方法と、安全で匿名のオンライン活動においてプロキシが究極のソリューションである理由を発見してください。
2 分読
How to generate random IP address blog image

このガイドでは、以下の内容を学びます:

  • IPアドレスの定義とその用途
  • プログラム的にランダムなIPアドレスを生成することが可能かどうか
  • ランダムIPジェネレーターを構築する方法
  • ランダムなIPアドレスを使用して自分の身元を隠す方法

さっそく見ていきましょう!

IPアドレスとは?

IPアドレスとは、インターネットプロトコルで通信するコンピューターネットワークに接続されたデバイスに一意に割り当てられる数字の文字列です。インターネットまたはローカルネットワーク上のデバイスを識別するのに役立つデジタルアドレスと考えることができます。

つまり、IPアドレスはデバイスの識別、データルーティング、さらには位置情報サービスに不可欠です。執筆時点で最も広く使用されているバージョンはIPv4です。IPv4アドレスは、ピリオドで区切られた4つの数字のグループ(オクテットと呼ばれる)で構成されており、以下のようになります:

192.168.1.1

各オクテットは 0 から 255 までの範囲の数字であり、43億通りの一意のアドレスの空間を可能にしています。

新しい規格であるIPv6は、異なるフォーマットを利用し、はるかに大きなアドレスプールを提供します。ただし、この記事ではIPv4に焦点を当てます。詳しくはIPv4とIPv6の比較ガイドをご覧ください。

自分の公開IPアドレスを確認する最も簡単な方法は、「What is my IP address」のようなサイトにアクセスすることです。あるいは、Windowsでは、ターミナルで以下のコマンドを実行することでIPアドレスを確認できます:

ipconfig

素晴らしい!それでは、ランダムIPジェネレーターを構築できるかどうかを確認していきましょう。

ランダムIPアドレスジェネレーターの作成は可能か?

要約: はい、ランダムIPアドレスジェネレーターを作成することは完全に可能です!

前述の通り、IPアドレスは特定の範囲内の数字を持つ明確に定義された構造に従っています。そのため、有効なランダムIPを生成することは可能であるだけでなく、比較的簡単です。
一方で、無意味な数字の羅列になってしまうアドレスの生成を避けるために、IPがどのように割り当てられ、予約されているかを理解する必要があります。

IPアドレスはIANA(Internet Assigned Numbers Authority)によって管理され、RIR(地域インターネットレジストリ)によって分配されます。IANAの基準に従うことで、プログラム的に有効なアドレス形式を生成できます。

ランダムIP生成ツールを構築する際には、特定のIP範囲を無視する必要もあります。これは、一部のIPが予約されており、公共のインターネットトラフィックには使用されないためです。

予約済みのIPv4範囲は以下の表で確認できます:

アドレスブロック アドレス範囲 説明
0.0.0.0/8 0.0.0.0 – 0.255.255.255 現在の(ローカル、「この」)ネットワーク
10.0.0.0/8 10.0.0.0 – 10.255.255.255 プライベートネットワーク内のローカル通信に使用
100.64.0.0/10 100.64.0.0 – 100.127.255.255 キャリアグレードNATを用いたサービスプロバイダーと加入者間の通信のための共有アドレス空間
127.0.0.0/8 127.0.0.0 – 127.255.255.255 ローカルホストへのループバックアドレスに使用
169.254.0.0/16 169.254.0.0 – 169.254.255.255 IPが指定されていない場合(DHCP障害など)のリンクローカルアドレスに使用
172.16.0.0/12 172.16.0.0 – 172.31.255.255 プライベートネットワーク内のローカル通信に使用
192.0.0.0/24 192.0.0.0 – 192.0.0.255 IETFプロトコル割り当て、DS-Lite(/29)
192.0.2.0/24 192.0.2.0 – 192.0.2.255 TEST-NET-1として割り当て、ドキュメントと例に使用
192.88.99.0/24 192.88.99.0 – 192.88.99.255 予約済み。以前はIPv6からIPv4へのリレーに使用
192.168.0.0/16 192.168.0.0 – 192.168.255.255 プライベートネットワーク内のローカル通信に使用
198.18.0.0/15 198.18.0.0 – 198.19.255.255 別々のサブネット間のネットワーク間通信のベンチマークテストに使用
198.51.100.0/24 198.51.100.0 – 198.51.100.255 TEST-NET-2として割り当て、ドキュメントと例に使用
203.0.113.0/24 203.0.113.0 – 203.0.113.255 TEST-NET-3として割り当て、ドキュメントと例に使用
224.0.0.0/4 224.0.0.0 – 239.255.255.255 マルチキャストに使用中(旧クラスDネットワーク)
233.252.0.0/24 233.252.0.0 – 233.252.0.255 MCAST-TEST-NETとして割り当て、ドキュメントと例に使用(マルチキャスト空間の一部)
240.0.0.0/4 240.0.0.0 – 255.255.255.254 将来の使用のために予約済み(旧クラスEネットワーク)
255.255.255.255/32 255.255.255.255 「限定ブロードキャスト」宛先アドレス用に予約済み

シンプルなPythonスクリプトを使用してランダムIPアドレスを生成する方法を見てみましょう!

Pythonでランダムなipを生成する方法

このステップバイステップのチュートリアルに従って、Pythonのランダムipジェネレーター関数を作成する方法を学びましょう!

ステップ1: IPv4アドレスを生成する関数を定義する

IPv4アドレスは、それぞれ 0 から 255 までの範囲の4つのオクテットからなる文字列に過ぎません。IP形式でこれらのランダムな数字を生成するには、以下のロジックを使用できます:

def generate_random_ipv4():
    return f"{random.randint(0, 255)}.{random.randint(0, 255)}.{random.randint(0, 255)}.{random.randint(0, 255)}"

random の randint() は、 0 から 255 の間のランダムな数字を生成します。したがって、 generate_random_ipv4() 関数は以下の形式の文字列を返します:

X.Y.Z.A 

ここで、 X、 Y、 Z、 A は 0 から 255 までの数字です。

Python標準ライブラリから random をインポートするのを忘れないでください:

import random

ステップ2: 予約済みIPのフィルタリングロジックを追加する

Python標準ライブラリの ipaddress ライブラリは IPv4Address クラスを提供しています。これはIPアドレスが予約済みかどうかを確認するための is_reserved 属性を公開しています。

まず、 ipaddress ライブラリをインポートします:

import ipaddress

次に、予約されていないランダムなIPアドレスが生成されるまで繰り返し生成するロジックを作成するために使用します:

while True:
    # Generate a random IP address
    ip = f"{random.randint(0, 255)}.{random.randint(0, 255)}.{random.randint(0, 255)}.{random.randint(0, 255)}"
    
    # Check if the generated IP is within the reserved blocks
    if not ipaddress.IPv4Address(ip).is_reserved:
        return ip

素晴らしい!ランダムIPアドレスジェネレーターのPython関数が完成しました。

ステップ3: 関数をテストする

ランダムIP生成関数は以下のようになります:

import random
import ipaddress


def generate_random_ipv4():
    while True:
        # Generate a random IP address
        ip = f"{random.randint(0, 255)}.{random.randint(0, 255)}.{random.randint(0, 255)}.{random.randint(0, 255)}"
        
        # Check if the generated IP is within the reserved blocks
        if not ipaddress.IPv4Address(ip).is_reserved:
            return ip

ランダムipジェネレーター関数を呼び出し、結果を表示します:

ip = generate_random_ipv4()
print(ip)

結果は以下のようになります:

61.18.2.4

素晴らしい!ミッション完了です。

おまけ: IPv6ランダムジェネレーターの構築

IPv4ジェネレーターと同様に、IPv6ジェネレーターは以下のように作成できます:

import random
import ipaddress


def generate_random_ipv6():
    while True:
        # Generate a random IPv6 address
        ip = ":".join(f"{random.randint(0, 0xFFFF):04x}" for _ in range(8))
        
        # Check if the generated IP is within the reserved blocks
        if not ipaddress.IPv6Address(ip).is_reserved:
            return ip

ランダムipを使用して身元を保護する

本当の問題は、なぜランダムipジェネレーターが必要なのかということです。以下にいくつかの可能な答えを示します:

  • 学習: IPアドレスがどのように構造化され、管理されているかを理解するためのツールとして使用します。
  • テスト: 入力としてIPアドレスを必要とするプロセス、またはネットワーク設定、ファイアウォール、その他のシステムの検証など、特定のタスクにIPを使用する処理で活用します。

さて、IPアドレスは一意の識別子であることを思い出してください。ランダムなIPを生成し、それを使って自分の身元を隠すことができたら、魔法のようではないでしょうか?例えば、ウェブスクレイピングの際には、以下の点で役立ちます:

  1. 対象サイトが自動化されたリクエストを検出するのを防ぐ。
  2. レート制限などのアンチスクレイピング対策を回避するために、事実上無限のIPプールを提供する。

それは素晴らしいことでしょう!しかし、単にランダムipジェネレーターを作成して自分のマシンで直接使用することはできません。代わりにできることは、プロキシサーバーのプールを経由してリクエストをルーティングすることです。

このメカニズムは、マシンによって行われる各リクエストが異なるIPアドレスから来ているように見せるのに役立ちます。詳しくはIPアドレスをローテーションする方法のチュートリアルをご覧ください。

プロキシを使用することは、セキュリティとオンライン上の匿名性のためにランダムipジェネレーターを活用することに最も近い方法です。多くのトップクラスのレジデンシャルプロキシプロバイダーは、数百万単位の膨大な有効IPプールを提供しています。つまり、プロキシはランダムなIPにアクセスすることに非常に近いのです。

ランダムipローテーションの手法

単純なIP生成と比較した場合のIPローテーションの利点を理解したところで、ランダムなIPを使用するいくつかの方法を見ていきましょう!

VPN

VPN(Virtual Private Networkの略)は、異なる場所にあるサーバーを経由して接続をルーティングすることで、あなたのIPアドレスを隠します。これにより、世界中のランダムなIPセットにアクセスできるようになります。

プロキシサーバーとは異なり、VPNはデバイスとVPNネットワークの間に安全な暗号化トンネルも作成します。より詳しい比較については、VPNとプロキシの比較記事をご覧ください。

👍 メリット:

  • 世界中から多数のIPにアクセス可能
  • プライバシーのためにトラフィックを暗号化
  • 一般的なブラウジングに最適

👎 デメリット:

  • アプリケーションレベルでの統合が難しい
  • プロキシと比較してIPプールが限られている
  • データセンターからの検出可能なIP

プロキシ

プロキシは、あなたのデバイスと対象サーバーの間の仲介役として機能します。このメカニズムにより、あなた自身のIPアドレスの代わりにプロキシサーバーのIPアドレスを使用できます。これにより、より良い匿名性と制限の回避のために「ランダムな」IPのプールへのアクセスが提供されます。

VPNとは異なり、ほとんどのHTTPクライアントがプロキシ設定をサポートしているため、プロキシはコードに直接統合しやすくなっています。以下は requests を使用したプロキシによるIPローテーションの実装の例です:

import requests  
import random  

# Pool of proxies
proxies = [  
    "<PROXY_URL_1>",  
    "<PROXY_URL_2>",  
    "<PROXY_URL_3>"  
]  

# Get a random proxy config
def get_random_proxy():  
    return {"http": random.choice(proxies), "https": random.choice(proxies)}  

# Example usage   
proxy = get_random_proxy()
response = requests.get("https://example.com", proxies=proxy)

ローテーションプロキシをどこで見つければよいかわからない場合は、市場で最高のローテーションプロキシに関するガイドをご覧ください。

👍 メリット:

  • 大規模で信頼性の高いIPプール
  • 高速な接続
  • カスタマイズ可能なローテーション頻度

👎 デメリット:

  • 技術的なセットアップが必要

ウェブスクレイピングAPI

ウェブスクレイピングAPIは、ウェブスクレイピングプロセスを簡素化するために必要なすべてのツールを提供します。プロキシ、ユーザーエージェント、CAPTCHA、アンチボット対策、リトライの管理といった複雑な処理を扱う代わりに、対象URLを指定してAPIを呼び出すだけです。ページのHTMLコンテンツを返すか、自動的にデータを構造化されたJSON形式に抽出します。

Bright DataのScraper APIが、高度なアンチボット管理、IPローテーション、データスケジューリングなどを提供する最高のウェブスクレイピングソリューションの一つである理由をご覧ください。

👍 メリット:

  • オールインワンのスクレイピングソリューション
  • 設定不要でアプリケーション内から大規模なIPセットにアクセス可能
  • 大規模プロジェクトにも拡張可能

👎 デメリット:

  • サードパーティサービスへの依存を強いられる

まとめ

このガイドでは、IPアドレスとは何か、何で構成されているか、そしてPythonでランダムIPアドレスジェネレーターを構築する方法を学びました。ランダムなIPを生成するのは簡単ですが、それ自体は特に有用ではありません。マシンの識別情報を単純にそれで上書きすることはできません。

これは別のメカニズム、つまりプロキシサーバーによって実現できます。プロキシサーバーは仲介役として機能し、あなたから対象サーバーへのリクエストを中継し、対象からの応答をあなたに管理して返します。このようにして、対象サーバーにはプロキシのIPアドレスのみが見え、あなたの実際のIPアドレスは見えません。

課題は、信頼できるプロキシプロバイダーを選ぶことにあります。多数のプロバイダーが同様のサービスを提供していますが、すべてが信頼でき、効果的であるわけではありません。信頼性の高いサーバー、大規模なIPプール、強力なプライバシーポリシーを持つプロバイダーが必要です。すべてをテストして時間を無駄にする代わりに、市場で最高の選択肢であるBright Dataを直接選びましょう。

Bright Dataは世界最高のプロキシサーバーを管理し、フォーチュン500企業や50,000+の顧客にサービスを提供しています。その世界的なプロキシネットワークには以下が含まれます:

全体として、これは市場で最大かつ最も信頼性の高いスクレイピング向けプロキシネットワークの一つです。

Bright Dataアカウントを作成して、今すぐこれらのスクレイピングサービスをお試しください!