首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有多行IP地址的无效IP地址

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

Stack Overflow用户
提问于 2016-07-27 18:35:29
回答 1查看 2.4K关注 0票数 0

在试图读取一个包含IP地址的文件时,我遇到了这个错误,该文件由一个新行分隔。我想做的是,读取我的文件,持有一堆IP,并检查他们是否有适当的记录。这是我的密码:

代码语言:javascript
运行
复制
$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的

代码语言:javascript
运行
复制
180.1.1.1
181.1.1.2

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

由所使用的非常独特的方法引起的错误:

警告: gethostbyaddr():Address不是有效的IPv4或IPv6

解决了。

我的代码是工作的,我没有得到正确的rdns记录,因为这些IP不存在,我用主机185.1.1.1检查了它,它返回了实际的IP非域。然后查一下IP,我确定他们有PTR记录,结果成功了。但我不确定错误究竟是如何修正的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-27 18:48:54

老实说,我认为爆炸原始文件数据,并希望最好的可能不是最好的方式来实现这一点。相反,您应该尝试使用正则表达式提取所需的确切数据,以便确定您正在提取正确的值。

试着做这样的事情:

代码语言:javascript
运行
复制
$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);

        }

    }

}

注意:此处使用的regex是@alex:Regex to match an IP address编写的。

如果这没有帮助,那么它可能是一个配置问题。需要检查的其他一些可能有助于故障排除的事情是:

  • gethostbyaddr('127.0.0.1');会抛出相同的错误吗?
  • 您有阻止DNS请求通过的防火墙吗?
  • 您能使用来自服务器的dig命令对IP发出查找吗?
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38620727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档