كيف يمكنني تكوين "التحقق من الأخطاء" لبحث 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");

هل يمكن لأي شخص تقديم بعض النصائح على الرموز؟

هل كانت مفيدة؟

المحلول

لا تسيء استخدام | المشغل لأداء سلسلة من الإجراءات. إنه لا يفعل ما تريد ، على الرغم من أن ما تريده ليس واضحًا بالنسبة لي. متى من المفترض أن يتم استدعاء مكالمات النظام؟ على النجاح أو الفشل؟

إذا كان من المفترض أن يتم ذلك عندما يتم استدعاء 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 قبل أن تتمكن من الاتصال به.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top