转换网络掩码 php


Converting netmasks php

如何将网络掩码转换为特定的网络掩码。

示例:127.0.0.0/16 转换为/24 网络掩码。

它应该输出如下内容:

127.0.0.0/24
127.0.1.0/24
127.0.2.0/24
127.0.2.0/24

等等一直到 127.0.255.0/24。

如何通过PHP实现这一点? 我找到了这个工具:http://jodies.de/ipcalc 它是用PERL编码的。 如何使用 PHP 获得类似的功能?

我发现这个:http://jasonkolpin.com/classes/ipcalc/demo.php 虽然它看起来坏了..可能会尝试修复它。

更新已解决:我基本上运行:$exec = shell_exec("/usr/local/bin/ipcalc 127.0.0.0/16 24 -b -n");并解析出网络:字段。这基本上将 127.0.0.0/16 转换为所有/24。

确保主机上安装了 ipcalc 才能完成此操作。 你可以通过在 CentOS 中使用 yum install ipcalc、在 Ubuntu 中使用apt-get install ipcalc、在 FreeBSD 上使用cd /usr/ports/net-mgmt/ipcalc/ && make install clean来做到这一点:)

我已经构建了一个库来在纯PHP中进行IP地址操作。

您必须这样做:

<?php
use Leth'IPAddress'IP;
$current_cidr = 16;
$desired_cidr = 24;
$net = IP'NetworkAddress::factory('127.0.0.0', $current_cidr);
$subnets = $net->split($desired_cidr - $current_cidr);