Как найти слеш формат IP-адреса?
Например, в этом IP-адресе: 145.32.59.24
формат слеша должен быть /16 в ответе.
Но я понятия не имею, как это определить.
Я понимаю, что это IP-адрес класса B.
Пожалуйста, помогите мне.. Я так старался понять это.
2 ответа
С тех пор как в 1993 году была введена бесклассовая маршрутизация в домене (CIDR), "классы" сети / хоста ABC стали все менее и менее полезными и им следовали. Не существует надежного способа определения разделения IPv4-адреса на его сеть и компоненты хоста по одному адресу. Формат / n для указания маски сети предполагает непрерывную сетевую маску из такого количества битов, причем самый правый остаток является частью хоста.
Таким образом, старый класс A будет выражаться как /8, B как /16, а C как /24. Однако с помощью CIDR вы не ограничены этими разделами, но можете произвольно разделить 32-битный адрес. Вам нужна сетевая маска, чтобы определить правильное значение / n. И наоборот, учитывая / n, можно определить маску сети. Например, /16 будет иметь маску 255.255.0.0.
Это называется "маска сети"; не "формат слеша". Во всяком случае, вы можете назвать это "нотация CIDR". Формат вообще не имеет значения. Это вернет маску в dot-notation
формат:
#!/bin/sh
ifconfig "$1" | sed -rn '2s/ .*:(.*)$/\1/p'
Просто назовите это как: script.sh eth0
, Если вы хотите, вы можете проанализировать это, чтобы создать нотацию CIDR, или вы можете попытаться проанализировать это из вывода ip addr
который отображается в нотации CIDR уже. Я не имею этот код под рукой, хотя.
Возможно, вы заметили, что ни одно из этих решений на самом деле не берет IP-адрес и не выдает сетевую маску. Сделать это невозможно. Причина, по которой мы должны указать маску сети при настройке нашего IP-адреса, заключается в том, что он не может автоматически определяться IP-адресом. Маска сети - это фильтр, который применяется к IP-адресу. Он содержит информацию, не присущую IP-адресу. Оба эти решения на самом деле просто возвращают маску сети, используемую для настройки интерфейса.