ランダム IP アドレスの生成方法とは?原理とコード例で詳しく解説
Web 開発、システムテスト、データシミュレーションといったシナリオでは、ランダムな IP アドレスを生成する必要があることがよくあります。多くの人が最初に思うのは、「適当に数字をいくつか書けばいいのでは?」ということです。しかし実際の運用では、ランダム IP は見た目以上に複雑であることがすぐに分かります。生成できるからといって妥当とは限らず、IP の形式に見えても利用可能とは限りません。
IP アドレスとは?
IPv4 を例にすると、IP アドレスは 0〜255 の範囲の 4 つの数字で構成されています。例えば次のような形式です:
192.168.1.1
8.8.8.8理論上、IPv4 には約 43 億個のアドレスが存在しますが、すべてを自由に使用できるわけではありません。
用途に応じて、IP アドレスは一般的に次の 3 つのカテゴリに分けられます:
· パブリック IP:インターネット上でルーティング可能かつアクセス可能
· プライベート IP:ローカルネットワーク内のみで使用
· 予約/特殊 IP:ループバック、ブロードキャスト、テスト用途
「ランダム IP」とは、通常 ランダムに生成されたパブリック IP アドレスを指します。
ランダム IP を生成する最も簡単な方法(基本版)
最も一般的で直感的な方法は次のとおりです:
0–255 の範囲で 4 つの整数をランダムに生成する
. を使って文字列として結合する
例(Python)
import random
def random_ip_basic():
return ".".join(str(random.randint(0, 255)) for _ in range(4))
for _ in range(5):
print(random_ip_basic())形式だけを見ると、生成された文字列は IPv4 の形式に完全に一致しています。
⚠️ 問題はどこにある?
この方法では、192.168.x.x のようなプライベート IP、127.x.x.x のようなローカルループバック IP、ルーティング不可のアドレス、あるいは実在しない・既にブロックされている IP が生成される可能性があります。
無効な IP を除外する
1. 除外すべき一般的な IPv4 アドレス範囲
| IP 範囲 | 用途 |
|---|---|
| 10.0.0.0 – 10.255.255.255 | プライベートネットワーク |
| 172.16.0.0 – 172.31.255.255 | プライベートネットワーク |
| 192.168.0.0 – 192.168.255.255 | プライベートネットワーク |
| 127.0.0.0 – 127.255.255.255 | ループバック |
| 0.0.0.0 | 特殊アドレス |
2. 除外すべき一般的な IPv6 アドレス範囲
| IPv6 プレフィックス | 用途 |
|---|---|
| ::1/128 | ループバックアドレス |
| ::/128 | 未指定アドレス |
| fe80::/10 | リンクローカルアドレス(ローカルネットワークのみ) |
| fc00::/7 | ユニークローカルアドレス(ULA、プライベート IP に類似) |
| ff00::/8 | マルチキャストアドレス |
| 2001:db8::/32 | ドキュメント/サンプル用アドレス(ルーティング不可) |
ランダム IP アドレスを生成する標準的な方法:ipaddress 標準ライブラリを使用する
IP アドレスの処理には、Python に標準搭載されている ipaddress ライブラリの使用を推奨します。
これは Python 公式でメンテナンスされている標準ライブラリで、IPv4 および IPv6 アドレスのさまざまな属性を判定する機能が組み込まれており、手作業でルールを書くよりもはるかに信頼性が高いです。
例:
IPv4:
import random
import ipaddress
def random_public_ipv4():
while True:
ip = ipaddress.IPv4Address(random.randint(0, 2**32 - 1))
if ip.is_global:
return str(ip)
for _ in range(5):
print(random_public_ipv4())IPv6:
import random
import ipaddress
def random_public_ipv6():
while True:
ip = ipaddress.IPv6Address(random.randint(0, 2**128 - 1))
if ip.is_global:
return str(ip)
for _ in range(5):
print(random_public_ipv6())ここでの重要なポイントは:
is_global == True
これは、その IP アドレスが:
プライベートアドレスでも、ループバックアドレスでも、予約アドレスでもなく、理論上はパブリックインターネット上でルーティング可能であることを意味します。
実際の利用シーン: プロキシ IP の利用
次のような目的がある場合:
🌍 国や地域の違いをシミュレーションしたい
🤖 Web スクレイピングやデータ収集
🔐 リスク管理/不正対策テスト
🧪 複数アカウント環境の分離
その場合に必要なのは、ランダムアルゴリズムで生成した IP ではなく:
実在し、接続可能な プロキシ IP
このような IP には、一般的に次の特徴があります:
· 実際にインターネット上に存在している
· 正常にネットワーク接続が可能
· 国、ISP、ASN などの属性を持つ
· システムから見て実際のユーザーネットワークに近い
まとめ
ランダム IP アドレスの生成は、単に数字をいくつか並べるだけではありません。本当に妥当なランダム IP を生成するには、IP アドレスの割り当てルールに従い、パブリック、プライベート、予約アドレスを明確に区別する必要があります。Python では、公式に提供されている ipaddress 標準ライブラリを使用することで、構造的に正しいパブリック IP を、より標準的かつ信頼性の高い方法で生成でき、テストやデータシミュレーションの用途に適しています。
IPDeep は、以下を含む高品質なプロキシ IP サービスを提供しています:
このほかにも多数のプロキシタイプを提供しており、IPDeep は世界 200 以上の国と地域をカバーする 1,000 万以上の高品質 IP リソースを保有し、複雑なネットワーク環境においても、さまざまなビジネス要件を効率的かつ安全に遂行することを支援します。



