ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 

  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: Inet-Admins
Inet-Admins mailing list archive (inet-admins@info.east.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[inet-admins] ru-networks



Привет.

Наткнулся на ftp://ftp.lexa.ru/pub/domestic/lexa/runetworks.tar.gz
и не понял зачем так мучаться?

65Mb база данных для простой операции?

Приклеил к письму альтернативный скрипт, который делает нечто подобное,
но требует ресурсов (канал и процессор) гораздо меньше.

Пример вывода:

[vulcan:/tmp]:1012$ perl ru-lirs 
ru.2com 195.98.160.0/19
ru.agtel 212.111.64.0/19
ru.astelit 195.96.64.0/19
ru.bcl 195.144.224.0/19
ru.burnet 212.0.64.0/19
ru.ccl 195.222.128.0/19
ru.cis 212.109.192.0/19
ru.cityline 195.46.160.0/19 212.46.192.0/18
ru.combellga 195.16.32.0/19
ru.comcor 212.45.0.0/19

...

Всевозможные проверки на ошибки, к сожалению, слишком привязаны
к нашему серверу статистики - пришлось вырезать.

Используйте, как хотите. Ссылки - обязательны :)

-- 
Игорь Винокуров
Российская Торговая Система
#!/usr/local/bin/perl

# RIPE DB location
$ripedb = "ftp://ftp.ripe.net/ripe/local-ir/allocations";

# get RIPE data
open(DATA, "/usr/bin/fetch -a -o - -p -q $ripedb 2>/dev/null |")
  or die "can't execute fetch: $!\n";

# loop
while (<DATA>) {

  # russian LIRs
  if ($_ =~ /^ru/) {

    # LIR's name
    printf "%s", split;

    # LIR's allocations
    while (<DATA>) {

      # next LIR?
      last if ($_ =~ /^$/);

      # extract block
      s/^\t\S*\t(\S*)\t.*\n$/$1/;

      # parse and expand
      @fields = split(/\//); @addr = (split(/\./, $fields[0]), (0) x 4);

      # results
      printf " %s.%s.%s.%s/%s",
        $addr[0], $addr[1], $addr[2], $addr[3], $fields[1];

    }
    printf "\n";
  }
}


 




Copyright © Lexa Software, 1996-2009.