使用php生成和使用所有IP地址

时间:2011-06-06 12:51:10

标签: php list for-loop ip

对Java一无所知(我认为这是关于java的同一主题的一个主题)和一点关于php,我想知道如何生成,用php ,一个完整的列表可能的IP(0.0.0.0到255.255.255.255),然后我如何使用PHP脚本中的每一个来测试我试图设置的IP验证工具(拿走它们中的每一个并使用它)

对于问题的第二部分,我正在考虑使用foreach语句或使用循环内部的“测试代码”部分来生成每个IP组合,以便在生成IP时对其进行测试。

然后对于第一部分,我不得不承认我被困住了,我的基本知识无法让我找到满意的解决方案 到目前为止,我已经来了:

function gen() {
    $n1 = 0;
    $n2 = 0;
    $n3 = 0;
    $n4 = 0;

    while ($n4 <= 255 && $n3 <= 255) {
        echo $n1.'.'.$n2.'.'.$n3.'.'.$n4++.'<br>';
        echo $n1.'.'.$n2.'.'.$n3++.'.'.$n4.'<br>';
    }
}
gen();

只是部分地做我想要的。

2 个答案:

答案 0 :(得分:3)

而不是为大约40亿个IP4地址生成可能的数据库/存储(假设您只关注IPv4忽略所有IPv6地址),这不是更容易,更实际的是生成随机IP地址组合来测试,您可以使用RegEx轻松验证吗?

以下正则表达式允许您验证从0.0.0.0到255.255.255.255的任何特定IPv4地址

\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

您需要记住的是,即使语法正确,并非所有地址组合都被归类为“有效”。

另一个替代方法(也由@binaryLV提到)使用PHP filter_var($ ip,FILTER_VALIDATE_IP);功能很好,干净。检查标记以帮助过滤http://php.net/manual/en/function.filter-var.php

<强>更新

对于基于IP位置的服务,我建议使用IPInfoDB等服务。它们提供API (see here)使用,允许您调用其服务,从而减少将信息存储在数据库中的需要。否则,它们提供database of IP addresses (see here)到xxx.xxx.xxx的精度,也可以下载。

答案 1 :(得分:0)

您需要嵌套循环:

for($n1=0; $n1 < 256; $n1++) {
    for($n2=0; $n2 < 256; $n2++) {
        for($n3=0; $n3 < 256; $n3++) {
            for($n4=0; $n4 < 256; $n4++) {
                echo $n1 . "." . $n2 . "." . $n3 . "." . $n4 . "\n";
            }
        }       
    }
}