Jump to content
Калькуляторы

[решено] Узнать все подсети vkontakte

Как быстро узнать все подсети , например, vkontakte? Может ресурc какой есть под это? Ковырять вручную https://apps.db.ripe.net/search/query.html#resultsAnchor - долго.

Share this post


Link to post
Share on other sites

disappointed

saaremaa

 

зачем пользоваться леваком, когда можно делать прямые запросы к первоисточнику, а именно в базам RIR-ов?

Share this post


Link to post
Share on other sites

Мне тоже удобнее почему-то на bgp.he.net смотреть.

Вопрос лишь в скорости обновления данных на нём

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

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

 

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)

Share this post


Link to post
Share on other sites

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

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

 

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)

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

Share this post


Link to post
Share on other sites

ну тут вообще-то форум провайдеров... так что врятле цель закрывать доступ)

Share this post


Link to post
Share on other sites

Еще у самого VK есть страничка с инфой о сетях: https://vk.com/help.php?page=peering

Не знаю, актуальна ли она сейчас. Одно время информация от них и от RIPE расходилась.

Share this post


Link to post
Share on other sites

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();

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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.