【问题标题】:How Can I get Full IP Range of an IP List in PHP如何在 PHP 中获取 IP 列表的完整 IP 范围
【发布时间】:2021-09-14 21:21:38
【问题描述】:

我有一些在文本文件 ips.txt 中。我想从该列表中获取每个 IP 的完整 IP 范围。

   The following is included in ips.txt
    37.123.206.198
    115.84.182.49
    154.16.116.35
    115.84.182.49
    142.250.192.14
    112.78.2.75

如何获取每个 ip 的完整 IP 范围? 1-255

Example (with first IP)
37.123.206.198

37.123.1.1
37.123.2.1
37.123.3.1
37.123.4.1
.
.
.
37.123.255.1
37.123.1.2
37.123.2.2
37.123.3.2
37.123.4.2

【问题讨论】:

  • 这些是单独的 IP 地址。他们没有范围。你想用这个列表完成什么?
  • 我已经解释的更清楚了,请看一下。
  • 到目前为止你尝试过什么?你被困在哪里了?单个 IP 地址与您要查找的范围有何关系?
  • 这能回答你的问题吗? Getting list IPs from CIDR notation in PHP
  • 您在处理文件中的多少个 IP?最简单的方法:使用explode() 函数分解“.”并将每个数字分开,然后手动遍历每个数字,然后将它们组合在一起。但如果您要处理大量数据,请考虑使用ip2long()

标签: php ip-address


【解决方案1】:

读取文件并将 ips 存储在数组中。那么:

<?php
$ips = [
    "37.123.206.198",
    "115.84.182.49",
    "154.16.116.35",
    "115.84.182.49",
    "142.250.192.14",
    "112.78.2.75"
];

$result = [];

foreach ($ips as $ip) {
    $ip_arr = explode('.', $ip);
    for ($i = 0; $i <= 255; $i++) {
        for ($j = 0; $j <= 255; $j++) {
            $new_ip = $ip_arr[0] . '.' . $ip_arr[1] . '.' . $i . '.' . $j;
            $result[$ip][] .= $new_ip;
        }
    }
}

print_r($result["37.123.206.198"][0]);


?>

输出:37.123.0.0

【讨论】:

    【解决方案2】:

    您可以尝试使用ip2long将IP地址转换为整数。

    /* Generate a list of all IP addresses between $start and $end (inclusive). */
    function ip_range($start, $end) {
      return array_map('long2ip', range(ip2long($start), ip2long($end)) );
    }
    $ip_range = ip_range("1.1.1.1", "1.1.255.255");
    foreach ($ip_range as $ip){
      echo $ip."<br>";
    }
    

    尝试运行上面的代码,看看是不是你想要的。

    注意:这也将包括 x.x.x.0(例如:1.1.2.0)

    参考文献:查看这些12

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-07
      • 2021-12-15
      • 2020-05-05
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      相关资源
      最近更新 更多