我目前有一个DNS反向查找脚本,但是有一个小问题,该脚本能够输出DNS系统错误。
问题是这样的:
所以现在的主要问题是步骤3,脚本只显示“无法解析DNS。错误是由于: BLANK ”假设 BLANK 显示错误,如“Socket :: inet_ntoa的错误arg长度,长度为0,应该是./showdns.pl第28行,<>第1行”。并且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 $hostname = $userchoice;
my $i_addr = scalar(gethostbyname($hostname || 'localhost'));
if ( ! defined $i_addr ) {
my $err = $!;
my $herr = int herror(const char *s);
system('clear');
print("Can't resolve $hostname: $herr, try again");
exec("/root/Desktop/showdns.pl");
exit();
}
my $name = inet_ntoa($i_addr);
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 = <>;
chomp ($userinput2);
system("clear");
system("/root/Desktop/simpleip.pl");
有人可以就代码提出建议吗?谢谢!
答案 0 :(得分:2)
my $i_addr = scalar(gethostbyname($hostname || 'localhost'));
if ( ! defined $i_addr ) {
my $err = $!;
system("clear");
print("Can't resolve $hostname: $err, try again");
system("/root/Desktop/showdns.pl");
exit();
}
虽然据我所知,gethostbyname返回的特定错误不是很有意义。
您可能希望考虑在脚本中放置一个循环,而不是让它重新开始使用system()。如果出现故障,你肯定不想继续使用inet_ntoa。请注意,inet_ntoa与DNS查找没有任何关系;这是由gethostbyname完成的。 inet_ntoa只是将一个4字节的字符串更改为正常的123.123.123.123
可打印的ipaddress形式。 sprintf("%vd", $i_addr)
做同样的事情。
答案 1 :(得分:0)
另外两个问题:
如果您将通话移除
system('clear')
错误
从gethostbyname得到显示
然后
你为什么用?
system('/root/Desktop/showdns.pl')
要递归调用相同的脚本?
使用exec
不是更好吗
而不是system
? exec
终止
目前的过程。而system
一个完整的新过程的分叉和
等待该进程退出。所以
如果您的用户输入,例如,20
无效的主机名,你最终会
有20个进程等待
最近的那个
创建
GR, LDX
答案 2 :(得分:-2)
请检查以下内容以解决perl脚本中的上述“dns”问题。
由于DNS服务器未运行,perl将无法解析该地址。所以它返回一个空字符串,inet_ntoa将为该空字符串抛出错误。
如果您使用的是Linux系统,请验证以下内容:
a)检查文件/etc/resolv.conf
nameserver 172.19.1.11 (IP address of your internet or survice provider)
b)在/etc/nsswitch.conf文件中添加“dns”,如下所示:
hosts: files dns