Список IP-сетей провайдера
avatar

Бывают ситуации, когда требуется получить список всех IP-сетей, принадлежащих определённому провайдеру (чтобы забанить его на фаерволе, например). Столь нужную информацию можно отыскать в базе данных региональных регистратур, например, в RIPE:

ftp://ftp.ripe.net/ripe/dbase/split/

Но информация в этой базе представлена не в самом оптимальном виде и скорее всего потребует обработки как минимум двух файлов с занесением в CSV или в СУБД в подходящем формате.

Можно решить задачу с помощью консольных утилит.

1. whois — утилита, входящая в состав bind. Позволяет получать информацию из баз данных региональных регистратур.

2. bgpq — утилита, позволяющая вывести список сетей, анонсируемых от имени определённой автономной системы.

3. aggregate — утилита, объединяющая несколько мелких IP-сетей в одну более крупную. Часто провайдеры делят свои сети на более мелкие, чтобы анонсировать их через разных магистральных провайдеров, но для фаервола такие подробности не нужны, ему чем меньше записей — тем лучше :).

4. awk — это, я думаю, у всех есть.

Алгоритм прост. Берём любой IP-адрес провайдера и применяем к нему whois. В строке Origin находим автономную систему этого провайдера. Затем запускаем bgpq с уже известной нам AS. Полученный список сетей отдаём на вход утилите aggregate. Окончательный результат выводим на консоль или в удобное место.

C:\>whois 217.150.32.50 | awk '/^origin/{print "bgpq -qP "$2}' | sh | \
    awk '/^ip/{print $5}' | aggregate -q

Скрипт на PHP будет выглядеть примерно так:

<html><head></head><body>
<?php
$ip = $_SERVER["REMOTE_ADDR"];
$s = "/usr/bin/whois $ip | ".
     "/usr/bin/awk '/^origin/{print \"/usr/local/bin/bgpq -qP \" $2}' | ".
     "/bin/sh | ".
     "/usr/bin/awk '/^ip/{print $5}' | ".
     "/usr/local/bin/aggregate -q 2>&1";
exec($s, $w);
foreach ($w as $addr) { echo $addr."<br>"; }
?>
</body></html>

This entry was posted in Железо / сети, Софт. Bookmark the permalink.

Добавить комментарий