我试图找出使用PHP从一系列IP地址中获取单个/24 IP块的最佳/最有效的方法。
我有一个MySQL数据库中的IP地址范围(我不能改变这是如何呈现的),必须有单独的范围的 /24块保存,也以特定的方式(我不能改变MySQL条目,也不能改变软件如何处理列表)。
例如,我有各种范围的IPv4 IP地址在这种格式:
86.111.160.0 - 86.111.175.255
我需要将其保存为此特定格式,以表示给定地址范围内的每个/24块:
86.111.160.0
86.111.161.0
86.111.162.0
...
86.111.175.0
我对如何在不写非常复杂的东西来处理每行的情况下做到这一点有一点障碍。
PHP中有什么函数可以帮助我解决这个问题吗?
提前谢谢。
您可以使用以下库:https://github.com/S1lentium/IPTools
看起来这和你想要的很相似。此库中还有许多其他方法可供您使用。
在网络IP地址上迭代:
$network = Network::parse('192.168.1.0/24');
foreach($network as $ip) {
echo (string)$ip . '<br>';
}
// Output
192.168.1.0
...
192.168.1.255
迭代范围IP地址:
$range = Range::parse('192.168.1.1-192.168.1.254');
foreach($range as $ip) {
echo (string)$ip . '<br>';
}
// Output
192.168.1.1
...
192.168.1.254
下面是一个例子https://www.php.net/manual/en/ref.network.php#74656
一个简单且非常快速的功能来检查CIDR。
这个例子考虑了你的范围参数
这里是(仅使用算术运算符,并且仅调用ip2long()和split()):
<?php
function ipCIDRCheck ($IP, $CIDR) {
list ($net, $mask) = explode("/", $CIDR);
$ip_net = ip2long ($net);
$ip_mask = ~((1 << (32 - $mask)) - 1);
$ip_ip = ip2long ($IP);
$ip_ip_net = $ip_ip & $ip_mask;
return long2ip($ip_ip_net);
}
$range = "86.111.160.0 - 86.111.175.255";
list($lower,$upper) = explode('-',$range);
$lowerIp = ip2long(trim($lower));
$upperIp = ip2long(trim($upper));
while($lowerIp <= $upperIp){
echo ipCIDRCheck(long2ip($lowerIp),long2ip($lowerIp) .'/24') . "\n\r";
$lowerIp += 255;
}
我有来自Microsoft Azure数据中心(http://www.microsoft.com/en-us/download/confirmation.aspx?id=41653)的900个IP地址范围,我想知道IP地址是否来自其中一个地址。我已经把它转换成一个列表,可以存储在文本文件中。 所以:循环遍历每个地址并使用ip2long()如这里的第3点是否成本更高(https://mebsd.co
我想展示一个IP的两个第一范围。例如,我127.0.0.1。我想得到127.0并使用这个例子: show show 我怎么能那样做? 我尝试了,但它显示了整个IP地址。
问题内容: 我在将IP地址范围转换为CIDR块列表时遇到一些逻辑上的麻烦。我确实相信这个网站做对了:http : //ip2cidr.com/ 我想输入一个起始IP地址和一个结束IP地址,并让Java吐出CIDR块的最小列表,以仅覆盖传入的范围,仅此而已。 例如,如果我传入的起始地址为1.1.1.111,终止地址为1.1.1.120,则我希望得到回报:1.1.1.111/32 1.1.1.112/
本文向大家介绍Android 获取IP地址的实现方法,包括了Android 获取IP地址的实现方法的使用技巧和注意事项,需要的朋友参考一下 Android 获取IP地址 最近做项目,有一个需求是Android设备获取当前IP的功能,经过一番查询资料解决了,记录下实现方法。 1.使用WIFI 首先设置用户权限 其次,代码如下 2.使用GPRS 首先,设置用户上网权限 <uses-permission
问题内容: 我试图通过C#中的代码找到最佳的(快速与最简单)访问SQL Server代码的方法。 当我从书本上学习时,我遇到了很多建议,通常都建议我通过拖放来完成。但是,由于我想在代码中做到这一点,所以第一种方法是按列号获取数据,但是SQL Query中的任何重新排序(如添加/删除列)都让我难以解决。 例如(别笑,有些代码大约有2年历史了),我什至编写了特殊的函数来传递sqlQueryResult
问题内容: 我正在尝试从IP地址解析主机名,这显然比我想象的要困难得多。 我试过使用一些函数,包括方法,但是所有这些函数似乎都只是返回我输入的IP地址。 这是我正在使用的代码: 问题答案: 例如, 输出: