Jump to content

Recommended Posts

Posted

Когда я был моложе и студентом. Мой зафкаф говорил: "Главное понять что Вы хотите и где взять информацию". Имно bgp.he.net для общего оперативного представления, а детально и более точно можно покопаться и на RIPE.

Posted

Для автоматизации только первоисточник.

 

for as in AS47542 AS47541 AS28709; do whois -T route -i origin $as|grep route|grep -Po "\d+\.\d+\.\d+\.\d+\/\d+"; done;
95.142.192.0/20
95.142.200.0/21
185.32.248.0/22
87.240.128.0/18
93.186.224.0/21
93.186.232.0/21
95.142.192.0/21
95.213.0.0/18
185.32.248.0/24
185.32.249.0/24
185.32.250.0/24
185.32.251.0/24
95.142.201.0/24
95.142.201.0/26
95.142.201.128/26
95.142.201.192/26
95.142.201.64/26
95.142.202.0/24
95.142.202.128/26
95.142.202.192/26
95.142.202.64/26
95.142.203.0/24
95.142.204.0/24
95.142.206.0/24

Posted

что-то тут развели изза пустяка)

вот тебе сети вконтакта:

 

95.213.0.0/18

87.240.128.0/18

185.32.248.0/22

93.186.224.0/20

95.142.192.0/20

 

взято от сюда:

https://stat.ripe.net/widget/announced-prefixes#w.resource=47541

https://stat.ripe.net/widget/announced-prefixes#w.resource=47542

https://stat.ripe.net/widget/announced-prefixes#w.resource=28709

 

+некоторые подсети сложил в одну (например из двух /21 сделал одну /20)

Posted

что-то тут развели изза пустяка)

вот тебе сети вконтакта:

 

95.213.0.0/18

87.240.128.0/18

185.32.248.0/22

93.186.224.0/20

95.142.192.0/20

 

взято от сюда:

https://stat.ripe.net/widget/announced-prefixes#w.resource=47541

https://stat.ripe.net/widget/announced-prefixes#w.resource=47542

https://stat.ripe.net/widget/announced-prefixes#w.resource=28709

 

+некоторые подсети сложил в одну (например из двух /21 сделал одну /20)

второй пост :)
Posted

whois -i mnt-by  VKONTAKTE-NET-MNT -T route | grep ^route | awk '{print $2}' | ./mergenets
87.240.128.0/18
95.213.0.0/18
95.142.192.0/20
93.186.224.0/20
185.32.248.0/22

 

Скрипт mergenets написан коллегой, распространяется под лицензией GPL ;)

#!/usr/bin/perl
#
# Принимает на стандартном вводе адреса сетей в формате xx.xx.xx.xx/yy по
# одному в строке, и выводит модифицированный список в том же формате.
# Полученный список не содержит сети, которые подпадают под более крупные сети в
# исходном списке.
#
# Пустые строки и строки, начинающиеся со знака #, игнорируются.
#
# Например, если исходный список
#
#       192.168.136.0/23
#       192.168.0.0/8
#
# то в результате получится список из одного адреса 192.168.0.0/8
#
# 22.03.2013 ddo

use Socket;
use Data::Dumper;

# Принимает строку в формате xx.xx.xx.xx/yy и возвращает указатель на хэш,
# представляющий адрес сети.
sub strtonet($) {
       my ($str) = @_;
       my %result = ();

       my ($addr, $mask) = ($str =~ /^\s*([0-9.]+)\/([0-9]+)\s*$/);
       my $binaddr = inet_aton($addr) or die('Invalid address ' . $addr);
       $result{'addr'} = unpack('N', $binaddr);
       $result{'mask'} = int($mask);

       return \%result;
}

# Принимает указатель на хэш, представляющий адрес сети, и возвращает строку в
# формате xx.xx.xx.xx/yy
sub net_to_str($) {
       my ($net) = @_;

       my $binaddr = pack('N', $net->{'addr'});

       return sprintf("%s/%d", inet_ntoa($binaddr), $net->{'mask'});
}

# Возвращает true, если первая сеть содержит вторую сеть.
sub net_contains($$) {
       my ($net, $subnet) = @_;
       my $result = 0;

       die("Unsorted nets") if $net->{'mask'} > $subnet->{'mask'};

       my $cmpmask = 0xffffffff << (32 - $net->{'mask'});
       $result = 1 if ($net->{'addr'} == ($subnet->{'addr'} & $cmpmask));

       return $result;
}

# Возвращает родительскую сеть, если указанные сети являются соседними. Соседние
# сети имеют одинаковую маску и могут быть совмещены в единую сеть с маской,
# меньшей на единицу. Если указанные сети не являются соседними, возвращает
# undef.
sub get_parent($$) {
       my ($net1, $net2) = @_;
       my $result = undef;

       # if (net_to_str($net1) =~ /^176.212.48.0\/2[01]$/ &&
                       # net_to_str($net2) =~ /^176.212.48.0\/2[01]$/) {
               # printf(">>> %s %s\n", net_to_str($net1), net_to_str($net2));
       # }
       if ($net1->{'mask'} == $net2->{'mask'}) {
               my $parent_mask = $net1->{'mask'} - 1;
               my $cmpmask = 0xffffffff << (32 - $parent_mask);
               my $parent_addr = $net1->{'addr'} & $cmpmask;
               if (($net2->{'addr'} & $cmpmask) == $parent_addr) {
                       $result = { 'addr' => $parent_addr, 'mask' => $parent_mask };
               }
       }

       return $result;
}

# Принимает в аргументе массив сетей, отсортированных по размеру маски, и
# устанавливает в undef его элементы с сетями, входящими в состав других сетей
# этого массива.
sub merge_subnets($) {
       my ($nets) = @_;
       my $result = 0;

       my $array_len = scalar(@{$nets});
       for (my $i = 0; $i < $array_len; $i++) {
               next if not defined($nets->[$i]->{'addr'});
               for (my $j = $i + 1; $j <= $array_len; $j++) {
                       next if not defined($nets->[$j]->{'addr'});
                       if (net_contains($nets->[$i], $nets->[$j])) {
                               $nets->[$j] = undef;
                               $result ++;
                       }
               }
       }

       # printf(">> merge_subnets: %d\n", $result);
       return $result;
}

# Принимает в аргументе массив сетей, отсортированных по размеру маски, и
# заменяет в нём сосдение сети более крупными сетями, содержащими их. Возвращает
# количество добавленных сетей (это значение равно количеству удалённых пар
# соседних сетей).
sub merge_neighbours($) {
       my ($nets) = @_;
       my $result = 0;

       my $array_len = scalar(@{$nets});
       for (my $i = 0; $i < $array_len; $i++) {
               next if not defined($nets->[$i]->{'addr'});
               for (my $j = $i + 1; $j <= $array_len; $j++) {
                       next if not defined($nets->[$j]->{'addr'});
                       my $parent_net = get_parent($nets->[$i], $nets->[$j]);
                       if (defined($parent_net)) {
                               $nets->[$i] = $parent_net;
                               $nets->[$j] = undef;
                               $result ++;
                               break;
                       }
               }
       }

       # printf(">> merge_neighbours: %d\n", $result);
       return $result;
}

sub test_num($) {
       my ($arr) = @_;
       my $result = 0;

       foreach my $net (@{$arr}) {
               $result++ if defined($net->{'addr'});
       }

       return $result;
}

sub main() {
       my @nets = ();

       while (<>) {
               chomp;
               next if /^\s*$/;
               next if /^\s*#/;
               push(@nets, strtonet($_));
       }

       my $modifications = 0;
       do {
               $modifications = 0;
               @nets = sort({ $a->{'mask'} <=> $b->{'mask'} } @nets);
               $modifications += merge_subnets(\@nets);
               $modifications += merge_neighbours(\@nets);
               # printf(">> nets number: %d\n", test_num(\@nets));
       } while ($modifications > 0);

       foreach my $net (@nets) {
               next if not defined($net->{'addr'});
               printf("%s\n", net_to_str($net));
       }
}

main();

Posted

А нужно ли при нынешних скоростях на тарифах, делать вообще приоритеты по скорости?

В поселках/селах/деревнях. Городские подключения - смысла нет.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...