使用nmap :: scanner的端口服务

时间:2013-10-31 00:10:23

标签: perl nmap

我在perl上使用nmap scanner模块在某些主机上执行nmap。我可以拔出开放端口,但我也希望能够为端口添加服务,例如tcp / 22 SSH。当我使用

在linux机器上运行nmap时
 nmap -sS -p 1-1024 -sV -O --max-rtt-timeout 200ms host.ip

我使用他们的服务打开了所有端口,但是我无法更改我的perl代码以打印出服务。 我目前的代码:

 my $scanner = new Nmap::Scanner;
  $scanner->register_scan_started_event(\&scan_started);
  $scanner->register_port_found_event(\&port_found);
  $scanner->scan('-sS -p 1-1024 -sV -O --max-rtt-timeout 200ms host.ip');

 sub scan_started {
  my $self     = shift;
  my $host     = shift;

  my $hostname = $host->hostname();
  my $addresses = join(',', map {$_->addr()} $host->addresses());
  my $status = $host->status();

  print "$hostname ($addresses) is $status\n";
  }

  sub port_found {
  my $self     = shift;
  my $host     = shift;
  my $port     = shift;

  my $name = $host->hostname();
  my $addresses = join(',', map {$_->addr()} $host->addresses());

  print "On host $name ($addresses), found ",
        $port->state()," port ",
        join('/',$port->protocol(),$port->portid()),"\n";

    }    

我得到的输出是

 (host.ip) is up
 On host  (host.ip), found open port tcp/22
 On host  (host.ip), found open port tcp/111

我真的很感激,如果我可以获得端口服务,就像我手动输入命令时出现的那样。

1 个答案:

答案 0 :(得分:1)

您可以使用Nmap::Scanner::Port对象的service()方法获取Nmap::Scanner::Service对象。该对象的访问者大致对应Nmap API中描述的port.version表的字段。