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

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

whois -i origin AS_VK1

whois -i origin AS_VK2

 

у них вроде бы 2 AS, номера не помню, сами легко найдёте

Share this post


Link to post
Share on other sites

disappointed, вот прям то что надо. Огромаднейшее спасибо.

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

иногда еще полезно с wiresharkом посмотреть.. если кэш какой-нить раздает статику.. с чужого блока.

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

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

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

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

Edited by Brainiac

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this