具有多行 IP 地址的无效 IP 地址

Invalid IP Address with multi-line IP Address

我在尝试读取一个包含由新行分隔的 IP 地址的文件时遇到此错误。我想做的是读取我的包含大量 IP 的文件并检查它们是否有正确的记录。这是我的代码:

$file = "test.sh";

if (is_file($file) && is_readable($file)) {
    $get_file_data = file_get_contents($file);

    $turn_to_array = explode("\n", $get_file_data);

    foreach ($turn_to_array as $key => $value) {

        if (filter_var($value, FILTER_VALIDATE_IP)) {
            echo gethostbyaddr(trim($value));
        } else {
            echo "IP invalid";
        }
    }
}

我的 test.sh 文件如下所示:

编辑: IP 示例

180.1.1.1
181.1.1.2

我需要添加一些特定的测试来解析文件还是存在其他问题?

使用的方法很独特导致的错误:

Warning: gethostbyaddr(): Address is not a valid IPv4 or IPv6 PHP

已解决。

我的代码可以正常工作,但我没有正确获取 rdns 记录,因为这些 IP 不存在它。我用 host 185.1.1.1 检查过它,它返回的是实际 IP 而不是域。然后检查 IP,我确定他们有 PTR 记录,然后它就醒了。但我不确定错误到底是如何修复的。

老实说,我认为分解原始文件数据并希望获得最佳结果可能不是实现此目标的最佳方法。相反,您应该尝试使用正则表达式提取所需的确切数据,以确保提取的是正确的值。

尝试这样的事情:

$data = file_get_contents($file);

// This regex matches things that resemble an IP4 address
if (preg_match_all("/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/", $data, $addresses)) {

    foreach ($addresses as $address) {

        // Need to verify it ACTUALLY is a valid IP address
        if (filter_var($address, FILTER_VALIDATE_IP)) { 

            echo gethostbyaddr($address);

        }

    }

}

注意:此处使用的正则表达式由@alex 编写:Regex to match an IP address

如果这没有帮助,则可能是配置问题。其他一些可能有助于故障排除的检查事项是:

  • gethostbyaddr('127.0.0.1'); 会抛出同样的错误吗?
  • 您是否有阻止 DNS 请求通过的防火墙?
  • 你能从服务器使用 dig 命令查询 IP 吗?