0

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");

誰かがコードについてアドバイスをいただけますか?

4

1 に答える 1

1

|一連のアクションを実行するためにオペレーターを誤用しないでください。あなたが望むことは私には明らかではありませんが、それはあなたが望むことをしていません。2つのシステムコールはいつ呼び出されることになっていますか?成功か失敗か?

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が成功したことを確認する必要があります。)

于 2010-09-27T07:31:25.310 に答える