Как генерировать случайные IP-адреса? Объяснение принципов с примерами кода
В таких сценариях, как веб-разработка, системное тестирование и моделирование данных, часто возникает необходимость генерировать случайные IP-адреса. Первая реакция многих людей: разве нельзя просто наугад написать несколько чисел? Однако на практике быстро становится ясно, что случайные IP-адреса гораздо сложнее, чем кажется: возможность сгенерировать адрес не означает, что он корректен; то, что он выглядит как IP, не гарантирует его пригодность к использованию.
Что такое IP-адрес?
На примере IPv4 IP-адрес состоит из четырёх чисел в диапазоне от 0 до 255, например:
192.168.1.1
8.8.8.8Теоретически IPv4 содержит около 4,3 миллиарда адресов, но это не означает, что все они могут свободно использоваться.
В зависимости от назначения IP-адреса обычно делятся на три категории:
· Публичные IP: маршрутизируемые и доступные в интернете
· Частные IP: используются только внутри локальных сетей
· Зарезервированные / специальные IP: loopback, broadcast и тестовые адреса
«Случайный IP» обычно означает случайно сгенерированный публичный IP-адрес.
Самый простой способ сгенерировать случайный IP (базовая версия)
Наиболее распространённый и интуитивно понятный подход:
Случайным образом сгенерировать четыре целых числа в диапазоне 0–255
Объединить их в строку с помощью символа .
Пример (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.
⚠️ В чём проблема?
Такой подход может создавать частные IP-адреса (например, 192.168.x.x), локальные loopback-адреса (127.x.x.x), немаршрутизируемые адреса или 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 | Loopback (обратная петля) |
| 0.0.0.0 | Специальный адрес |
2. Распространённые IPv6 диапазоны адресов, которые следует исключить
| Префикс IPv6 | Назначение |
|---|---|
| ::1/128 | Loopback-адрес |
| ::/128 | Неуказанный адрес |
| fe80::/10 | Link-local адрес (только локальная сеть) |
| fc00::/7 | Уникальный локальный адрес (ULA, аналог частных IP) |
| ff00::/8 | Мультикаст-адрес |
| 2001:db8::/32 | Адрес для документации / примеров (немаршрутизируемый) |
Стандартный способ генерации случайных IP-адресов: использование стандартной библиотеки ipaddress
Рекомендуется использовать встроенную в Python библиотеку ipaddress для работы с IP-адресами.
Это официально поддерживаемая стандартная библиотека 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-адрес:
Не является частным адресом, не является loopback-адресом, не относится к зарезервированным адресам и теоретически может маршрутизироваться в публичном интернете.
Практические сценарии использования: использование прокси IP
Если ваши цели включают:
🌍 Эмуляцию разных стран или регионов
🤖 Веб-скрейпинг или сбор данных
🔐 Тестирование систем риск-контроля и антифрода
🧪 Изоляцию многопользовательских (multi-account) сред
Тогда вам нужен не IP, сгенерированный случайным алгоритмом, а:
Реальный и доступный прокси IP
Такие IP-адреса обычно обладают следующими характеристиками:
· Они реально существуют в интернете
· Могут нормально подключаться к сети
· Имеют атрибуты страны, провайдера (ISP) и ASN
· Для систем выглядят как реальные пользовательские сети
Итоги
Генерация случайных IP-адресов — это не просто объединение нескольких чисел. По-настоящему корректный случайный IP должен соответствовать правилам распределения IP-адресов и чётко различать публичные, частные и зарезервированные адреса. В Python использование официальной стандартной библиотеки ipaddress позволяет более стандартизированно и надёжно генерировать структурно корректные публичные IP-адреса, что подходит для тестирования и моделирования данных.
IPDeep предоставляет высококачественные прокси IP-сервисы, включая:
Помимо множества других типов прокси, IPDeep предлагает более 10 миллионов высококачественных IP-ресурсов, охватывающих более 200 стран и регионов по всему миру, помогая эффективно и безопасно выполнять различные бизнес-задачи в сложных сетевых средах.



