0

サーバーのポートをスキャンしてレポートを生成するスクリプトを作成する必要があります。このスクリプトは次のことを行う必要があります。

ファイルから 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;

今、私がやるべきことは1つあります::

開いているすべてのポートをスキャンします。

現在、ポート%port_hashをスキャンしていますが、すべてのポートをスキャンし、開いているポートを一覧表示する必要があります。これを行う方法?

4

1 に答える 1

0

これにより、%porthash がすべてのポートで埋められます。

my %port_hash = ( tcp => {} );
for my $port (1 .. 65535) {
  $port_hash{'tcp'}{$port} = {};
}

check_ports次に、この %port_hash で呼び出すことができます。

于 2012-12-06T09:19:41.943 に答える