Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 用perl检查是否只有开放端口_Linux_Perl - Fatal编程技术网

Linux 用perl检查是否只有开放端口

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 => {},

我需要写一个脚本来扫描服务器上的端口并生成一个报告。此脚本应:

从文件中读取IP列表; 扫描每个IP,并将结果写入一个文件

我正在为此使用以下脚本::

#!/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