我在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
我真的很感激,如果我可以获得端口服务,就像我手动输入命令时出现的那样。
答案 0 :(得分:1)
您可以使用Nmap::Scanner::Port
对象的service()
方法获取Nmap::Scanner::Service
对象。该对象的访问者大致对应Nmap API中描述的port.version
表的字段。