【发布时间】:2012-05-03 08:35:40
【问题描述】:
我想生成一个随机 IP 地址。
【问题讨论】:
-
你为什么接受更复杂的答案?
我想生成一个随机 IP 地址。
【问题讨论】:
在 64 位 PHP 上:
long2ip(rand(0, 4294967295));
在 2021 年使用任何受支持的 PHP 版本(7.4 和 8.0)。
注意:由于现在几乎所有机器都是 x64 并且正在放弃开发 32 位操作系统,如果这不起作用,您可能需要下载 x64 版本的 PHP。
【讨论】:
检查mt_rand func。
你可能想要运行这个:
<?php
$randIP = mt_rand(0, 255) . "." . mt_rand(0, 255) . "." . mt_rand(0, 255) . "." . mt_rand(0, 255);
?>
【讨论】:
$ip = long2ip(mt_rand());
这种方式可读性稍强。
【讨论】:
127.255.255.255,因为mt_rands 最大值是 2147483647。如果您通过更高的值,它返回false。
根据这里的一些答案,我决定添加一个答案来纠正一些错误...
mt_rand(int $min, int $max);
一些样本使用此函数,最大值为 4294967295。但是这个函数只支持2147483647的最大值,实际上是一半。传递更大的数字将返回 false。在不传递任何内容的情况下使用此函数也只会给出所需值的一半。所以
long2ip(mt_rand());
将返回127.255.255.255的最大ip
要拥有完整的系列,您需要一些类似的东西:
long2ip(mt_rand()+mt_rand());
但即使在此示例中,您最多也将获得255.255.255.254。因此,要拥有完整的范围,您需要第三个mt_rand()。
用简写代码获取总范围的正确方法是:
$ip = long2ip(mt_rand()+mt_rand()+mt_rand(0,1));
注意使用 + 而不是 *。因为max value * max value 会按预期返回255.255.255.255,但获得较低IP 的机会不再那么好。为了保持使用 * 的好机会,您可以执行以下操作:
$ip = long2ip((mt_rand()*mt_rand(1,2))+mt_rand(0,1));
【讨论】:
如果有的话,您还可以从自己的网络服务器日志中获取有效 IP 池:
cat /var/log/apache2/access_log |cut -d' ' -f1|egrep -v '[a-z]'|sort|uniq > 大量的.txt
然后在php中:
$ips = file('lotsofip.txt');
echo $ips[array_rand($ips)];
【讨论】:
$ip = intval(rand()%255).'.'.intval(rand()%255).'.'.intval(rand()%255).'.'.intval(rand()%255);
【讨论】: