2014-11-21 4 views
1

Достаточно просто, я хотел бы разделить данный IP-адрес на netid (как определено сетевой маской) и hostid на Perl. Пример:Perl: Разделить IP-адрес на hostid и netid

$network = NetAddr::IP->new('192.168.255.255/29') || die "invalid space $_"; 

Теперь $network->mask возвращается 255.255.255.248. Но нет методов в NetAddr::IP, чтобы применить маску для разбиения адреса на его части netid и hostid в пространстве /29.

NetAddr::IP::Util упоминает операторов, чтобы сделать это, но документация - это беспорядок.

По крайней мере NetID могут быть извлечены с помощью Net::NetMask:

$netid = Net::Netmask->new('192.168.255.255/29')->base; 

Это дает 192.168.255.248. Опять же, нет способа получить часть хоста 0.0.0.7. Лучше всего было бы упаковать/распаковать IP-адреса на 32-битный int, а затем просто & их. Тогда было бы проще печатать двоичные представления IP-адресов, которые, как я нашел, могут быть действительно полезны для целей отладки и документирования.

+0

Почему вы хотите '0.0.0.7'()? Похож на проблему XY – ikegami

+0

Это не так. Метод извлечения hostid просто отсутствует и может быть доступен где-то еще в Perl. 'NetAddr :: IP :: Util' выглядит многообещающим, но не знаю, как использовать его для этой цели. –

+0

Это не отвечает на мой вопрос. – ikegami

ответ

0

Используйте хостмаска метод

$host_wildcard = Net::Netmask->new('192.168.255.255/29')->hostmask; 
+0

Я так не думаю. 'hostmask' возвращает маску, а не значение. В моем примере они оказываются одинаковыми (0.0.0.7), однако в случае 192.168.255.254 и т. Д. Нет. Возможно, мой пример IP был немного обманчивым. Простите за это. –

 Смежные вопросы

  • Нет связанных вопросов^_^