Linux 用perl检查是否只有开放端口
我需要写一个脚本来扫描服务器上的端口并生成一个报告。此脚本应: 从文件中读取IP列表; 扫描每个IP,并将结果写入一个文件 我正在为此使用以下脚本::Linux 用perl检查是否只有开放端口,linux,perl,Linux,Perl,我需要写一个脚本来扫描服务器上的端口并生成一个报告。此脚本应: 从文件中读取IP列表; 扫描每个IP,并将结果写入一个文件 我正在为此使用以下脚本:: #!/usr/bin/perl -w use strict; use IO::Socket::PortState qw(check_ports); my $hostfile = 'hosts.txt'; my %port_hash = ( tcp => { 22 => {},
#!/usr/bin/perl -w
use strict;
use IO::Socket::PortState qw(check_ports);
my $hostfile = 'hosts.txt';
my %port_hash = (
tcp => {
22 => {},
443 => {},
80 => {},
53 => {},
30032 => {},
13720 => {},
13782 => {},
}
);
my $timeout = 5;
open HOSTS, '<', $hostfile or die "Cannot open $hostfile:$!\n";
while (my $host = <HOSTS>) {
chomp($host);
my $host_hr = check_ports($host,$timeout,\%port_hash);
print "Host - $host\n";
for my $port (sort {$a <=> $b} keys %{$host_hr->{tcp}}) {
my $yesno = $host_hr->{tcp}{$port}{open} ? "yes" : "no";
print "$port - $yesno\n";
}
print "\n";
}
close HOSTS;
#/usr/bin/perl-w
严格使用;
使用IO::Socket::PortState qw(检查端口);
my$hostfile='hosts.txt';
我的%port\u哈希=(
tcp=>{
22 => {},
443 => {},
80 => {},
53 => {},
30032 => {},
13720 => {},
13782 => {},
}
);
我的$timeout=5;
打开主机,“这将用所有端口填充%porthash:
my %port_hash = ( tcp => {} );
for my $port (1 .. 65535) {
$port_hash{'tcp'}{$port} = {};
}
然后你可以用这个%port\u散列调用check\u ports
。可能是@sudo\O的重复项该问题已结束,因为它不是真正的问题。这看起来更好,它有代码要讨论。正如你在另一个问题中提到的,你为什么不使用nmap
?@barmar-我猜是因为这是一个家庭作业?我在$hostfile='hosts.txt'后面写了上面的代码;第行,它显示以下错误::“my”变量$hostfile在scanner.pl第21行的同一范围内屏蔽早期声明。“my”变量$hostfile屏蔽scanner.pl第21行同一语句中的早期声明。scanner.pl第16行靠近“%port_hash{”的语法错误无法在scanner.pl第21行靠近“$hostfile:$!”的“我的”中使用全局$由于编译错误,scanner.pl的执行被中止。感谢您的快速响应,但它仍然返回以下结果:Host-127.0.0.1开放端口是:Host-94.200.xx.xx0开放端口是:意味着它返回了所有空白。我键入了port\u hash
变量名,是否修复了它?是的,谢谢@barmer它现在可以工作了。您能请建议我如何将输出放入文件中?在shell中使用输出重定向:scriptname>file