Как я могу настроить «Проверка ошибок» для поиска DNS, используя Perl?

StackOverflow https://stackoverflow.com/questions/3801705

  •  25-09-2019
  •  | 
  •  

Вопрос

У меня есть сценарий, который позволяет мне посмотреть на имя хоста после ввода IP-адреса, который будет пересылаться на DNS-сервер.

Однако, хотя все работает нормально, программа не может распечатать ошибки, которые я хочу, если 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");

Может кто-нибудь, пожалуйста, дадите несколько советов по кодам?

Это было полезно?

Решение

Не злоупотребляйте | Оператор для выполнения последовательности действий. Это не делает то, что вы хотите, хотя то, что вы хотите мне не ясно. Когда должны быть вызваны две системные звонки? На успех или неудачу?

Если он должен быть сделан, когда умрет () будет вызван, вы можете сделать:

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, прежде чем вы сможете это позвонить.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top