¿Cómo puedo configurar "verificación de errores" para la búsqueda DNS usando Perl?

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

  •  25-09-2019
  •  | 
  •  

Pregunta

Tengo un script que me permite buscar un nombre de host después de ingresar una dirección IP que se reenviaría a un servidor DNS.

Sin embargo, aunque todo funciona bien, el programa no puede imprimir los errores que quiero ejemplo si el DNS no se puede encontrar.

Los códigos:

#!/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");

¿Alguien puede dar algunos consejos sobre los códigos?

¿Fue útil?

Solución

No use mal el mal | operador para realizar una secuencia de acciones. No está haciendo lo que quieres, aunque lo que quieres no es claro para mí. ¿Cuándo se supone que se invocan las dos llamadas del sistema? Sobre el éxito o el fracaso?

Si se supone que debe hacerse cuando se llame Die (), puede hacer:

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

(Se corrigieron los usos erróneos de inet_ntoa; debe verificar el éxito de GethostByName antes de poder llamarlo).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top