【问题标题】:How can I configure "Checking for Errors" for DNS Lookup using Perl?如何使用 Perl 为 DNS 查找配置“检查错误”?
【发布时间】:2011-04-17 15:11:43
【问题描述】:

我有一个脚本,允许我在输入将转发到 DNS 服务器的 IP 地址后查找主机名。

但是,即使一切正常,如果找不到 DNS,程序似乎也无法打印出我想要的错误示例。

密码:

#!/usr/bin/perl

use IO::Socket;
use warnings;
use strict;
use Term::ANSIColor;
use Socket;
use Sys::Hostname;

print "\nYou are now in Show DNS IP Address!\n\n";

print "*************\n";
print "|DNS Address|\n";
print "*************\n";

print "\nPlease enter a hostname that you wish to view\n\n";
print "\n\nEnter the hostname of Choice Here: ";
my $userchoice =  <>;
chomp ($userchoice);

my $host = hostname();

my $hostname = $userchoice;

my $packed_ip = gethostbyname("$hostname");

my $ip_address = inet_ntoa($packed_ip) or system("clear"), system("/root/Desktop 
/showdns.pl"), die("Can't resolve $hostname: $!\n ,try again");

my $coloredText = colored($name, 'bold underline blue');
print "\n\nThe hostname IP address is: $coloredText\n\n";

print "Press enter to go back to the main menu\n\n";
my $userinput2 = &lt;&gt;;
chomp ($userinput2);

system("clear");
system("/root/Desktop/simpleip.pl");

有人可以就代码提供一些建议吗?

【问题讨论】:

    标签: perl dns resolve


    【解决方案1】:

    不要滥用| 运算符来执行一系列操作。它没有做你想做的事,尽管我不清楚你想要什么。什么时候应该调用这两个系统调用?关于成功或失败?

    如果它应该在 die() 被调用时完成,你可以这样做:

    my $i_addr = scalar(gethostbyname($hostname || 'localhost'))
        or system("clear"), system("/root/Desktop/showdns.pl"), die("Can't resolve $hostname: $!\n ,try again");
    my $name = inet_ntoa($i_addr);
    
    my $i_addr = scalar(gethostbyname($hostname || 'localhost'));
    if ( $i_addr ) {
        system("clear");
        system("/root/Desktop/showdns.pl");
        die("Can't resolve $hostname: $!\n ,try again");
    }
    my $name = inet_ntoa($i_addr);
    

    (修正了inet_ntoa的误用;您需要验证gethostbyname成功后才能调用它。)

    【讨论】:

    • 澄清一下,| 是按位或运算符,|| 是逻辑或运算符。换句话说,您应该只在进行数学运算时看到|
    • 它只有在失败时才被激活,假设“或死”应该被激活。
    • 仍然无法工作....您在“无法解析...”处缺少一个括号显示的错误是“Socket::inet_ntoa 的参数长度错误,长度为 9,应该在 /root/Desktop/showdns.pl 第 25 行, 第 1 行为 4。"。
    • @JavaNoob:哦,那是因为你误用了 inet_ntoa。你想用它来完成什么?
    • 如上所述,我试图让用户输入等“www.google.com”,然后脚本将转换为输出 IP 地址等“168.*.*.*”。脚本的那部分可以正常工作。但是,当用户键入脚本应该能够输出“无法解析名称”而不是系统输出系统错误并退出脚本时,就会出现问题。
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多