Perl 使用nmap::scanner的端口服务

Perl 使用nmap::scanner的端口服务,perl,nmap,Perl,Nmap,我使用perl上的nmap扫描模块在一些主机上执行nmap。我可以拉出打开的端口,但我也希望能够向端口添加服务,例如tcp/22 SSH。当我在linux机器上使用 nmap -sS -p 1-1024 -sV -O --max-rtt-timeout 200ms host.ip 我使用它们的服务打开了所有端口,但是我无法更改perl代码来打印服务。 我当前的代码: my $scanner = new Nmap::Scanner; $scanner->register_scan_

我使用perl上的nmap扫描模块在一些主机上执行nmap。我可以拉出打开的端口,但我也希望能够向端口添加服务,例如tcp/22 SSH。当我在linux机器上使用

 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

如果我能像手动输入命令时那样获得端口服务,我将不胜感激。

您可以使用
Nmap::Scanner::Port
对象的方法来获取对象。该对象的访问器大致对应于.

Use hey Thank!中描述的
port.version
表的字段!我能够通过使用getservbyport获得服务
getservbyport
只会在系统的
/etc/services
文件中进行查找。Nmap扫描可能发现了更详细或不同的信息,因此请使用
$port->service()
获取包含该信息的对象。您能给我一个示例吗?如何将其合并到现有代码中?我对perl非常陌生。我使用了$port->service(),但结果不正确,Nmap::Scanner::service=HASH(0x2a1b8c0)/@LeRay
$port->service()->name()
$port->service()->product()
等等。嘿,我刚刚使用了你的方法,但仍然收到这些错误Nmap::Scanner::port=HASH(0x1973108)而不是服务的名称。另外,您是如何开始合并它们的,例如$port->service()->name(),您能解释一下吗?