У меня есть этот список IP, показанный ниже. Как я могу рассчитать все IP-адреса из этого в Linux? Есть ли инструменты, которые могут рассчитать это для меня? Мне нужно, чтобы проверить, если я не заблокировал некоторые IP-адреса cloudflare. В качестве брандмауэра я использую shorewall, и я запрещаю с fail2ban одного IP. Как я знаю, тогда я не могу обнаружить скрытую маску по IP-адресу, верно?

204.93.240.0/24
204.93.177.0/24
199.27.128.0/21
173.245.48.0/20
103.22.200.0/22
141.101.64.0/18
108.162.192.0/18
190.93.240.0/20
188.114.96.0/20

2 ответа2

1

Я не уверен, что понял ваш вопрос, но если вы хотите расширить список диапазонов IP-адресов до всех указанных IP-адресов, попробуйте следующее:

$ perl -ne '/(.+)\.(\d+)\/(\d+)$/; print "$1.$_\n" foreach($2..$3)' iplist.txt > IPs

Это создаст файл с именем IPs содержащий:

204.93.240..0
204.93.240..1
204.93.240..2
204.93.240..3
 ...

188.114.96..18
188.114.96..19
188.114.96..20

Затем вы можете перебрать файл и применить любой нужный вам инструмент (например, ping) к каждому IP:

$ while read ip; do ping $ip; done < IPs

Вы также можете объединить две команды, если вы не хотите создавать файл со всеми IP-адресами:

$ perl -ne '/(.+)\.(\d+)\/(\d+)$/; print "$1.$_\n" foreach($2..$3)' iplist.txt | while read ip; do ping $ip; done
0

Нет, с момента появления CIDR вы не можете получить маску сети из IP-адреса. Вы можете вычислить широковещательный адрес (самый высокий адрес в подсети), преобразовав сетевой адрес в целое число, добавив 2 ^ (32-маска) и преобразовав результат обратно в десятичную запись с четырьмя точками .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .