Как отсортировать список IP-адресов и вычислить класс и маску сети для каждого?

У меня есть 2 варианта. Во-первых, у меня есть массив, который имеет список IP-адресов. Например

 my @Ip=();  # array that has the IPs below in it

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

108.0.0.30
108.0.0.30
108.0.0.30
192.168.1.1
192.168.1.2
10.0.0.1

Мне нужна программа, которая может отсортировать такой массив и сказать, какой это класс сети и маска подсети. Например, вывод должен быть как

10.1.1.1/25                          10.1.1.1 - это ip, а 25 - подмаска

1 ответ

Net::IP, Net::IP::Resolver, Net::IP::Match::Regexp и другие субмодули от Net::IP Вы делаете это хорошо для вас. Просто часть с сортировкой сложна. Но если вы гуглите, вы найдете несколько хороших методов. Например:

my @ips = qw(
    172.27.32.200
    172.19.32.100
    10.1.1.60
    192.20.30.133
);

@ips = map {s/\s+//g; $_} sort map {s/(\d+)/sprintf "%3s", $1/eg; $_} @ips;

print join "\n", @ips;

Нашел здесь

Другие вопросы по тегам