Как найти все российские IP-адреса?

Задача: как найти список всех российских IP-адресов?

Цель

Полный список российских IP-адресов (а также список адресов другой страны – аналогично) требуется в случаях:

  1. выполнение требований российского законодательства по ограничению доступа к ресурсам (например, VoIP в России может работать только от российских сетей)
  2. допуск нужной аудитории к ресурсу
  3. Категоризация аудитории

И так далее.

Источник данных

Данные о принадлежности IP-адресов разным странам собирают различные сервисы. Например тут перечислено более 50 сайтов/сервисов, предоставляющих такие услуги.

Однако, алгоритмы сбора данных о принадлежности адресов в подавляющем большинстве случаев закрыты, не всегда понятно на основании каких именно критериев адреса относят к тем или иным странам.

Наиболее популярный – GeoIP.

Однако, нужно понимать, что в случае соблюдения требований российского законодательства источник данных должен быть:

  1. достоверным
  2. признанным

Вряд ли вы сможете доказать, что GeoIP предоставляет действительно достоверные данные. И эта проблема касается как ложно-положительных, так и ложно-отрицательных случаев.

С точки зрения российского законодательства существует только три достоверных источника данных об IP-адресах: IANA, RIPE и РАНР.

IANA – управляет глобальным распределением крупных адресных блоков континентальным регистратурам. Принадлежность заданной сети конкретному пользователю тут не узнаешь, зато можно получить вообще представление о том, какой диапазон выделен какому континенту.

RIPE – региональная Европейская регистратора (если быть точным, то Europe, the Middle East, and Central Asia). При выделении сети конечному клиенту RIPE обязательно спрашивает в каком регионе будет использоваться заданная сеть.

РАНР (Реестр адресно-номерных ресурсов) – копия базы данных RIPE российских ресурсов. Реестр пока ещё только создаётся, поэтому пока нельзя сказать, что его база хоть сколько-нибудь полная. Да и вытащить оттуда список ресурсов (не один конкретный, а именно список) – та ещё задачка.

Таким образом, если список адресов нужен для целей, связанных с определением достоверности информации, стоит полагаться именно на RIPE

Как получить актуальный список адресов

#curl https://stat.ripe.net/data/country-resource-list/data.json?resource=RU | jq -r '.data.resources.ipv4 | .[]' > ru.txt

stat.ripe.net – ресурс предоставляет статистические данные об использовании интернет-ресурсов, в том числе в формате JSON

resource=RU – российские ресурсы

jq -r ‘.data.resources.ipv4 | .[]’ – извлекает IPv4 адреса из JSON, полученного от stat.ripe.net. Извлекает из строки JSON-а каждый IPv4-элемент.

> ru.txt – складываем полученные данные в файл ru.txt

В итоге у вас получается файл размером примерно 11тыс. строк.

ВАЖНО: НЕ ВСЕ строки в файле одинакового формата!

В подавляющем большинстве строки в файле выглядят как CIDR-подсеть:

2.56.24.0/23
2.56.26.0/23
2.56.88.0/22
2.56.112.0/22

Однако, если сделать поиск строк, в которых нет слеша, получим примерно 20 строк в формате диапазона:

$ cat ru.txt | grep -v "/"
31.135.244.0-31.135.251.255
46.149.66.0-46.149.71.255
62.122.208.0-62.122.212.255
78.31.178.0-78.31.183.255
81.162.48.0-81.162.53.255
87.239.32.0-87.239.34.255

Их можно либо игнорировать, либо поправить вручную – как вам больше нравится.

В итоге, получаем файл из которого можно далее собрать либо ACL, либо правило для firewall, либо использовать этот список ещё каким-либо образом.

Кроме того, вы всегда можете сослаться на достоверный источник данных – RIPE. Достовернее не бывает.

Ручная проверка принадлежности сети

На сайте RIPE.net в правом верхнем углу – строка поиска:

В выдаче вас будет интересовать объект inetnum (все остальные объекты создаются на его основе):

Может ли одна и та же сеть использоваться в разных странах одновременно?

Да, запросто. В случае честного оформления объекта в БД RIPE будет несколько строчек country: с разными идентификаторами стран, в которых сеть будет использоваться.

В выгрузку stat.ripe.net такая сеть попадёт несколько раз – по одному разу для каждой страны.

Share
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x