使用 perl 和 Net::DNS 检查 DNS

2024-01-01

所以,在,有一个小脚本(参见第 173 页),其目的是迭代检查 DNS 服务器以查看它们是否为给定主机名返回相同的地址。然而,书中给出的解决方案仅当主机具有静态IP地址时才有效。如果我希望该脚本能够与具有多个关联地址的主机一起使用,我该如何编写该脚本?

这是代码:

#!/usr/bin/perl
use Data::Dumper;
use Net::DNS;

my $hostname = $ARGV[0];
# servers to check
my @servers = qw(8.8.8.8 208.67.220.220 8.8.4.4);

my %results;
foreach my $server (@servers) {
    $results{$server} 
        = lookup( $hostname, $server );
}

my %inv = reverse %results; # invert results - it should have one key if all
                           # are the same
if (scalar keys %inv > 1) { # if it has more than one key
    print "The results are different:\n";
    print Data::Dumper->Dump( [ \%results ], ['results'] ), "\n";
}

sub lookup {
    my ( $hostname, $server ) = @_;

    my $res = new Net::DNS::Resolver;
    $res->nameservers($server);
    my $packet = $res->query($hostname);

    if ( !$packet ) {
        warn "$server not returning any data for $hostname!\n";
        return;
    }
    my (@results);
    foreach my $rr ( $packet->answer ) {
        push ( @results, $rr->address );
    }
    return join( ', ', sort @results );
}

我遇到的问题是,我在返回多个地址的主机名上调用代码时遇到此错误,例如 www.google.com:

***  WARNING!!!  The program has attempted to call the method
***  "address" for the following RR object:
***
***  www.google.com.    86399   IN  CNAME   www.l.google.com.
***
***  This object does not have a method "address".  THIS IS A BUG
***  IN THE CALLING SOFTWARE, which has incorrectly assumed that
***  the object would be of a particular type.  The calling
***  software should check the type of each RR object before
***  calling any of its methods.
***
***  Net::DNS has returned undef to the caller.

这个错误意味着我试图在 CNAME 类型的 rr 对象上调用 address 方法。我只想对“A”类型的 rr 对象调用 address 方法。在上面的代码中,我没有进行检查来确保我正在调用“A”类型的对象上的地址。我添加了这行代码(除非是下一行),并且它有效:

my (@results);
foreach my $rr ( $packet->answer ) {
    next unless $rr->type eq "A";
    push ( @results, $rr->address );
}

这行代码跳到下一个地址$packet->answer除非 rr 对象的类型是“A”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 perl 和 Net::DNS 检查 DNS 的相关文章

  • 是否有用于 AES 的纯 Perl 模块?

    是否有用于 AES 的纯 Perl 模块 地穴 Rijndael PP http search cpan org dist Crypt Rijndael PP Rijndael 是底层算法AES https secure wikimedia
  • 我应该使用哪个 Linux 发行版作为 Xen 主机? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我为家庭办公室订购了一台服务器 我想用 Xen 对其进行分区 我认为这将使事情保持干净并且更容易维护 我将运行 MySQL PostgreSQL
  • 从日志尾部提取匹配行后退出

    我使用范围运算符来提取日志文件的一部分 例如 tail F logfile perl ne print if b d 现在 一旦提取的部分匹配 我就尝试退出该过程 我尝试过 tail F logfile perl ne print if b
  • 如何在 BEGIN 块之外正确声明哈希?

    考虑这个简单的程序 您能解释一下为什么在取消注释前两行后输出会有所不同吗 我的哈希发生了什么use strict 如何修复程序以供使用use strict echo e key1 nkey2 nkey3 perl lne use stric
  • 如何将文本转换为标题大小写?

    我有一个文本文件 其中包含需要更改为标题大小写的标题列表 单词应以大写字母开头 但大多数冠词 连词和介词除外 例如 这个书名列表 barbarians at the gate hot flat and crowded A DAY LATE
  • Moose:属性值更改时缓存的计算结果会过期吗?

    在我们的类中 我们有一个模式 我们创建一个属性来表示 计算值 出于显而易见的原因 我们想要缓存计算值 然后当基础值之一发生变化时使缓存失效 所以我们目前有这个 package FooBar use Moose has foo gt acce
  • Docker 中的 NGINX 缓存 IP 地址并提供错误的 Content-Type

    Summary 我想让NGINX 不是NGINX Plus 通过使用变量从DNS名称重新解析IP地址proxy pass 如建议的这篇 Nginx 官方文章 在变量中设置域名 部分 https www nginx com blog dns
  • 如何构建 Perl Web 服务基础设施

    我有许多用于管理多服务器基础设施的脚本 其中一些脚本需要 root 访问权限 一些需要访问数据库 并且大多数脚本都是基于 perl 的 我想将所有这些脚本转换为非常简单的 Web 服务 可以从不同的应用程序执行 这些 Web 服务将接受常规
  • Perl 中的全局变量、子程序变量问题

    如何将子程序变量值转移到另一个子程序变量中 我可以使用全局变量吗 sub foo my myvar Hello sub foo1 my myvar1 myvar how can I get the Hello from myvar 我尝试使
  • Amazon S3:静态网站:自定义域或子域

    Amazon com 刚刚宣布可以在 S3 存储桶中托管静态网站 我访问了他们的设置页面http docs amazonwebservices com AmazonS3 latest dev index html WebsiteHostin
  • 如何使用 Perl 正则表达式匹配字符串末尾/开头处的空格或单词?

    我想找到与我的正则表达式匹配的序列 它们应该位于由空格包围的字符串中间 末尾或开头或者是字符串中唯一的东西 Example 我们假设序列 qwe45rty 就是我们正在寻找的 我希望能够对所有这些因素都抱有积极的态度 qwe45rty qw
  • Perl 是否有相当于 Python 的 `if __name__ == '__main__'` 的功能?

    有没有一种方法可以确定当前文件是否是 Perl 源中正在执行的文件 在 Python 中 我们使用以下结构来做到这一点 if name main This file is being executed raise NotImplemente
  • 我怎样才能挂钩 Perl 的 use/require 以便抛出异常?

    如果文件已经加载 是否可以挂载到use require所以我可以抛出异常 在我即将到来的nextgen blacklist http github com EvanCarroll nextgen blob blacklist lib nex
  • Perl 的反引号、system 和 exec 有什么区别?

    有人可以帮帮我吗 在 Perl 中 以下之间有什么区别 exec command and system command and print command 还有其他方法可以运行 shell 命令吗 exec 执行命令并一去不复返 这就像一个
  • 如何将 Perl 转换为 C?

    有没有可用的工具可以将 Perl 源代码转换为 C 源代码 什么平台都可以 对此的规范答案是MJD 的 为什么不将 Perl 翻译成 C http www perl com pub a 2001 06 27 ctoperl html
  • 在 qx 运算符中将 perl 数组拆分为单独的参数

    我试图将一组参数传递给qx操作员 考虑 my files qw A txt B txt print qx ls files 这给出了错误 ls cannot access A txt B txt No such file or direct
  • Perl:HTTP::微小删除留下损坏的锚标记

    我编写了一个脚本 该脚本收集从数据库读取的缓冲区内的所有 URL 检查该页面是否仍然存在 并使用 HTTP Tiny 从缓冲区中删除 URL 如果该 URL 无法访问或返回无效 问题是 HTTP Tiny 删除左锚标记 例如此处无效的文本
  • Perl:测试输入阅读器?

    有没有一种方法可以使用标准 Test 等模块自动测试 Perl 程序是否正在读取输入 例如标准输入正确吗 例如 测试一个从 STDIN 读取两个整数并打印它们之和的程序 这不是 100 清楚你的意思 我会回答假设你想编写一个测试脚本来测试你
  • 为什么我的 Github 托管网站响应 HTTP 302 而不是 200?

    我拥有该域名penkov id au http penkov id au 我主持一个blog http michael penkov id au blog 2014 01 02 reinventing the wheel html usin
  • Text::平衡和多行 xml

    看来我有点失落了 我需要解析一个大的 大约 100 mb 且相当难看的 xml 文件 如果我使用parsefile 它返回错误 文档元素后的垃圾 但它会很乐意解析文件的较小元素 所以我决定将文件分解为元素并解析它们 由于不鼓励使用正则表达式

随机推荐

  • 使 div 自动向左而不是向右扩展宽度

    我的网站上有一个 div 其中包含充当菜单的项目列表 我已经设置了CSSwidth auto这样 如果菜单项太长 它会重新调整大小 但目前 这将扩展到右侧 并将我的其余内容 推 到右侧 这很难解释 所以举个例子 如果你去http redsq
  • C 中 _Bool 和 bool 类型之间的区别?

    谁能解释一下两者之间有什么区别 Bool and boolC 中的数据类型 例如 Bool x 1 bool y true printf d x printf d y 这些数据类型是在 C99 中添加的 自从bool在 C99 之前没有保留
  • 如何在 Sails js (nodejs MVC) 中使用外部 REST API

    我正在使用 sails js 作为 Node js 的 MVC 我仍在学习它 我设法从自己的数据库中获取数据并使用它 但现在我需要 想要从外部 REST API 获取数据 我在我的控制器中使用了这个 api controllers Some
  • C++ 的首选命名约定是什么?

    通过查看 boost 库和 stl 然后查看人们的示例 我感到非常困惑 看起来大写的类型名称都散布在所有小写字母中 并用下划线分隔 如今 事情到底应该怎样做呢 我知道 NET 世界有自己的一套约定 但它似乎与 C 领域完全不同 你打开了一个
  • 监听来自 Dart 的 javascript 事件

    Dart 有没有办法监听 javascript 库中的事件 例如 jqrangesliderhttp ghusse github io jQRangeSlider http ghusse github io jQRangeSlider 当有
  • 过滤字典内的数组 - Swift

    我正在尝试搜索索引字典以根据客户的姓氏返回特定客户 以下是我正在使用的数据结构 每个客户端对象都有一个名称属性 它是一个字符串 var clients Client loadAllClients Returns client array v
  • 滚动条触发的jquery mouseleave文档

    document ready function document mouseleave function desktop subscribe modal modal show 我试图在鼠标离开文档窗口时触发一个功能 上面的代码在 Firef
  • knitr 的 kable 将 2.29e-30 打印为“0”

    CODE some data dat lt data frame log2fc c 0 28 10 82 8 54 5 64 8 79 6 46 pvalue c 0 00e 00 2 29e 30 7 02e 30 4 14e 29 1
  • Firebase 流式 REST 连接是否计入并发连接限制?

    In a 最近的问题 https stackoverflow com q 28229543 209103有人指出Firebase 定价文档 https www firebase com pricing html states REST AP
  • 是否可以在 Eclipse 中从多个包运行 JUnit 测试?

    是否可以同时运行多个包的 JUnit 测试 而无需手动创建测试套件 例如 如果我有层次结构 代码 branchone代码 branchone aaa代码 branchone bbb代码 branchtwo代码 branchtwo aaa代码
  • 在整个 Webresource.axd 中使用嵌入式 WebResources

    问题很简单 如何在 ASP NET 应用程序中使用嵌入式资源 将资源包含在程序集中的步骤是什么 以及如何引用它 可能会遇到哪些问题 编辑 对于未引用 Page 和 ClientScript 的版本 请参阅在 Razor 视图上处理嵌入式资源
  • 正则表达式匹配星号和换行符之间的字符串

    例子 blah blah Match this text Match this text Match this text Match this text Match this text more text more text 如何从星号内部
  • Semantic-ui 与 Bootstrap [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 哪一种最好用 如果可能 请提供这两者的区别和优点 语义用户界面 http semantic ui com vs 引导程序 http getboo
  • 将 Rails 应用程序部署到 Heroku 不断崩溃

    这个答案似乎已经以多种方式得到了回答 但似乎没有一个适合我的确切问题 我正在使用 RailsApps 中的应用程序https github com RailsApps rails devise pundit https github com
  • 如何将git存储库的根设置为vi/vim查找路径?

    我想设置 vim 文件搜索路径以包括 git 存储库根 可以通过以下方式找到 git rev parse show toplevel 我不知道如何附加这个输出git命令 set path 在 vimrc 中 Thanks 您可以使用此命令
  • 在从 XAML 实例化的控件中使用 MEF

    我创建了一个 UserControl 它使用 Import 属性 public class MyUserControl UserControl IPartImportsSatisfiedNotification Import public
  • 使用正确的派生类型调用泛型方法

    我有以下场景 我有三个课程 我们称它们为A B and C 它们的共同点是它们继承自相同的接口 ISomeInterface它们是使用实体框架映射到实体的类 我有一个方法接收实现此接口的对象列表 但对象本身将是A B or C 方法外壳看起
  • 网格碰撞器在应该有孔的地方有墙壁并且变形了

    我的曲线水管模型需要一个曲线圆柱对撞机 以便我的玩家红色立方体可以轻松通过 我尝试了网格碰撞器 它不起作用 还尝试了另一种技巧 我在搅拌机中构建了 2 个模型 一个用于网格渲染 一个用于碰撞器 作为一个整体 九分之一导致网格碰撞器无法在整个
  • Gtest:“{”之前预期的类名

    我正在尝试将 Gtest 下的测试用例转换为使用测试夹具 以便在添加更多测试时可以有一个通用的设置 然而 这会导致错误 test integrate cc 4 47 error expected class name before toke
  • 使用 perl 和 Net::DNS 检查 DNS

    所以 在 有一个小脚本 参见第 173 页 其目的是迭代检查 DNS 服务器以查看它们是否为给定主机名返回相同的地址 然而 书中给出的解决方案仅当主机具有静态IP地址时才有效 如果我希望该脚本能够与具有多个关联地址的主机一起使用 我该如何编