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

PythonベースのランダムIPジェネレーターの作成方法や、プロキシがいかに安全かつ匿名なオンラインアクティビティのための究極ソリューションであるかについて学びましょう。
2 min read
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(インターネット番号割り当て機関)によって管理され、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アドレスを生成するまでランダム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を生成し、それを使用することで身元を隠すことができたら素晴らしくありませんか?例としてこれは、 Webスクレイピングにおいて次のことを実現するのに役立ちます。

  1. ターゲットサイトによる自動リクエストの検出を防止する。
  2.  レート制限などのスクレイピング対策を回避するため、事実上無限のIPプールを提供する。

なんと素晴らしい考えでしょうか?ただし、ランダムIPジェネレーターを作成し、マシンで直接使用することはできません。代わりに、 プロキシサーバーのプールを介してリクエストをルーティングすることができます。

このメカニズムにより、マシンによる各リクエストが異なるIPアドレスから送信されたように見せることができます。詳細は、 IPアドレスをローテーションする方法のチュートリアルをご覧ください。

プロキシを使用することで、セキュリティおよびオンライン匿名性のためにランダムIPジェネレーターを最大限に活用することができます。 トップクラスの住宅用プロキシプロバイダー は、有効IPの大規模なプールを提供しており、その数は数百万件に上ることも珍しくありません。これは、プロキシの使用がランダムIPへのアクセスとほぼ変わらないことを意味します。

ランダムIPローテーションのテクニック

ここまで、シンプルなIP生成と比較した際のIPローテーションの利点を学びました。それでは、ランダムIP使用のさまざまなメソッドを見てみましょう!

VPN

VPN(バーチャルプライベートネットワークの略)では、さまざまな場所にあるサーバー経由で接続をルーティングすることにより、IPアドレスを隠します。これにより、世界中のランダムIPにアクセスできるようになります。

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

👍メリット

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

👎デメリット

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

プロキシ

プロキシは、デバイスとターゲットサーバー間の仲介役として機能します。このメカニズムにより、自分のIPアドレスの代わりにプロキシサーバーのIPアドレスを使用することが可能となります。これにより、「ランダム」IPのプールにアクセスできるようになり、匿名性が向上するため、制限を回避することができるようになります。

ほとんどのHTTPクライアントはプロキシ設定をサポートしているため、プロキシではVPNより簡単にコードとの直接の統合を行うことができます。 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プール
  • 高速接続
  • カスタマイズ可能なローテーション周波数

👎デメリット

  • テクニカルセットアップが必要

WebスクレイピングAPI

WebスクレイピングAPIは、Web スクレイピングプロセスを簡素化するために必要なすべてのツールを提供します。プロキシやユーザーエージェント、CAPTCHA、アンチボット対策、再試行などの複雑な処理を行う代わりに、ターゲットURLでAPIを呼び出すことができます。これにより、ページのHTMLコンテンツが返されるか、構造化されたJSON形式にてデータが自動的に抽出されます。

高度なアンチボット管理やIPローテーション、データスケジューリング、その他多数の機能を提供する Bright DataのスクレイパーAPI が、世界で最も優れたWebスクレイピングソリューションの1つである理由を学びましょう。

👍メリット

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

👎デメリット

  • サードパーティサービスへの依存が必須

まとめ

このガイドでは、IPアドレスやその構成要素、およびPythonにおけるランダムIPアドレスジェネレーターの構築方法について学ぶことができます。ランダムIPの生成は簡単に行えますが、これ自体は特に有用ではありません。そのままではマシンIDの上書きに使用することができないためです。

これは、プロキシサーバーという別のメカニズムにより実現することができます。プロキシサーバーは、ユーザーからのリクエストをターゲットサーバーに中継し、ターゲットからユーザーへのレスポンスを管理することで、仲介者の役割を果たします。これにより、ターゲットサーバーにはプロキシのIPアドレスのみが認識され、実際のIPアドレスは認識されません。

ここでは、信頼性が高いプロキシプロバイダーを選択することが課題となります。多数のプロバイダーが同様のサービスを提供していますが、信頼性が低かったり、効果的でなかったりするものも少なくありません。信頼性の高いサーバーや大規模のIPプール、強力なプライバシーポリシーを備えたプロバイダーが必要となります。すべてのプロバイダーをテストするために時間を割かずに、市場で最も優れたオプション、 Bright Dataを選択しましょう。

Bright Dataは、世界最高水準のプロキシサーバーを管理しており、フォーチュン500企業を含む2万以上のお客様にサービスを提供しています。その世界規模のプロキシネットワークには、次の内容が含まれます。

  • データセンタープロキシ  — 77万件を超えるデータセンターIP
  • 住宅用プロキシ  — 195ヵ国以上、7200万件を超える住宅用IP
  • ISPプロキシ — 70万件を超えるISP用IP
  • モバイルプロキシ — 700万件を超えるモバイル用IP

総合的に見て、Bright Dataはプロキシ業界で最大かつ最も信頼性の高いスクレイピング用プロキシネットワークの1つであると言えるでしょう。

Bright Dataアカウントを作成し、無料トライアルでこれらのスクレイピングサービスをテストしてみましょう!

クレジットカードは必要ありません