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

Ответы:

15

Это невозможно. Если бы это было возможно, не было бы никакой причины иметь сетевую маску вообще, поскольку это могло бы быть определено автоматически.

Маска сети используется для указания диапазона IP-адресов, в котором «сеть» запускается и останавливается. Этот диапазон является произвольным.

Например, с IP-адресом 192.168.0.140:
с сетевой маской 255.255.255.0( /24в нотации cidr) диапазон IP-адресов будет 192.168.0.1 - 192.168.0.254.
С сетевой маской 255.255.255.128( /25в нотации cidr) диапазон IP будет 192.168.0.129 - 192.168.0.254.

Патрик
источник
3

Вы не можете в большинстве случаев из-за бесклассовых сетей . Данный IPv4-адрес может иметь 30 различных сетевых масок.

SquareRootOfTwentyThree
источник
В каком случае в современных системах вы можете сделать это?
Карлсон
Я не до конца понимаю вопрос, но в основном все системы и устройства в настоящее время используют CIDR.
SquareRootOfTyentyThree
@ Карлсон: Как сказал Патрик, нет способа автоматически определить, когда у вас есть дело, которое попадает в исключение из этого правила. Вы можете посмотреть на первый октет адреса и вслепую по его старшим битам догадаться, что он является частью класса A, B, C ... или любой другой сети, но вы не можете точно знать , что адрес этого класса следовательно, вы знаете маску сети. На самом деле, с некоторыми адресами разумно поспорить, что «старый» класс адреса не имеет значения: адреса, начинающиеся с 10, почти никогда не относятся к классу А (/ 8), потому что они почти всегда находятся в подсетях.
Уоррен Янг
@SquareRootOfTwentyThree Вопрос заключается в том, существует ли способ, основанный на IP-адресе системы назначения, для определения используемой маски сети.
Карлсон
@WarrenYoung Я знаю о классах IP-адресов, но вы можете догадаться, что маска IP-класса имеет (и я предполагаю здесь) более 99% вероятности ошибочности.
Карлсон
2

Хотя вы не можете определить маску сети по IP-адресу непосредственно в centos 7, вы можете ввести «ip ad», который вернет IP-адрес с соответствующим номером подсети.

-bash-4.2 $ ip ad 1: lo: mtu 65536 qdisc noqueue state НЕИЗВЕСТНО qlen 1

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

   valid_lft forever preferred_lft forever

inet6 ::1/128 scope host 

   valid_lft forever preferred_lft forever

2: eth0: mtu 1500 qdisc pfifo_fast состояние UP qlen 1000

link/ether 00:16:3e:77:ca:e9 brd ff:ff:ff:ff:ff:ff

**inet 10.1.0.11/24** brd 10.1.0.255 scope global eth0

   valid_lft forever preferred_lft forever

inet6 fe80::216:3eff:fe77:cae9/64 scope link 

   valid_lft forever preferred_lft forever

Номер подсети также хранится в следующем файле

/ etc / sysconfig / network-scripts / ifcfg-eth0 (где eth0 зависит от типа вашей сетевой карты)

Ищите настройку PREFIX. Номер, который он предоставляет, является маской подсети.

например, PREFIX = 24

Если в приведенном выше файле нет номера PREFIX, тогда в настройках сети вашего сервера по умолчанию будет использоваться маска подсети, равная 8, которая снова будет отображаться в вашей команде «ip ad».

Если вы хотите изменить номер PREFIX, не забудьте перезапустить сетевую службу, используя systemctl restart network.

culzeanman
источник
1

Маска сети в основном используется для различения локальных адресов в той же подсети от адресов снаружи, которые доступны только через шлюз.

Таким образом, если вы знаете все (= используемые в настоящее время или в будущем) IP-адреса в одной подсети, вы можете создать сетевую маску, которая содержит их все. Например, если 192.168.2.4 и 192.168.2.253 должны находиться в одной подсети, работает маска сети 255.255.255.0 (соответствует диапазону ip 192.168.2.0-255 или в нотации cidr 192.168.2.0/24).

jofel
источник
@WarrenYoung Спасибо за указание на это. Я уточнил свой ответ.
Джофель
Извините, но «маска сети 255.255.255.0» означает не 192.168.2.1-255, а 192.168.2.0-255 (если мы включим сеть и широковещание) или 192.168.2.1-254 (если мы не включим)
Lazy Badger