File Coverage

lib/Nmap/Scanner/Host.pm
Criterion Covered Total %
statement 4 6 66.6
branch n/a
condition n/a
subroutine 2 2 100.0
pod n/a
total 6 8 75.0


line stmt bran cond sub pod time code
1              
2 3     3   14 use strict;
  3         4  
  3         97  
3              
4 3     3   4467 use Class::Generate qw(class);
  0            
  0            
5              
6             class 'Nmap::Scanner::Host' => {qw(
7             addresses @Nmap::Scanner::Address
8             ports %
9             hostnames @Nmap::Scanner::Host
10             smurf $
11             status $
12             extra_ports Nmap::Scanner::ExtraPorts
13             distance Nmap::Scanner::Distance
14             os Nmap::Scanner::OS
15             ),
16             '&add_address' => q!push(@{$self->{'addresses'}}, $_[0]) if $_[0];!,
17             '&hostname' => q!
18             # this returns the first hostname
19             return $self->hostnames(0)->name() if $self->hostnames(0);
20             return "";
21             !,
22             '&add_hostname' => q!push(@{ $self->{'hostnames'} }, $_[0]) if $_[0];!,
23             '&add_port' => q!
24              
25             my $port = shift;
26              
27             return unless defined $port;
28              
29             Nmap::Scanner::debug("Adding port with proto: " . $port->protocol());
30             $self->{'ports'}->{lc $port->protocol()}->{$port->portid()} = $port;
31             !,
32             '&get_port' => q!
33             return $self->ports(lc $_[0])->{$_[1]}
34             if $self->ports(lc $_[0])->{$_[1]};
35             !,
36              
37             '&get_udp_port' => q!
38             return $self->ports('udp')->{$_[0]}
39             if $self->ports('udp')->{$_[0]};
40             !,
41             '&get_tcp_port' => q!
42             return $self->ports('tcp')->{$_[0]}
43             if $self->ports('tcp')->{$_[0]};
44             !,
45             '&get_port_list' => q!
46             return Nmap::Scanner::PortList->new(
47             $self->ports('tcp'), $self->ports('udp')
48             );
49             !,
50             '&get_ip_port_list' => q!
51             return Nmap::Scanner::PortList->new(undef, $self->ports('ip'));
52             !,
53             '&get_tcp_port_list' => q!
54             return Nmap::Scanner::PortList->new($self->ports('tcp'));
55             !,
56             '&get_udp_port_list' => q!
57             return Nmap::Scanner::PortList->new(undef, $self->ports('udp'));
58             !,
59             '&as_xml' => q!
60              
61             my $xml = qq(\n);
62            
63             for my $a ($self->addresses()) {
64             $xml .= $a->as_xml() . "\n";
65             }
66              
67             $xml .= qq(\n)
68             if $self->{smurf} > 0;
69              
70             my $hxml = '';
71              
72             foreach my $h ($self->hostnames()) {
73             $hxml .= $h->as_xml() if (keys %$h);
74             }
75              
76             $xml .= "$hxml\n" if $hxml;
77            
78             $xml .= $self->os()->as_xml() . "\n" if $self->os();
79            
80             my $pxml .= $self->extra_ports()->as_xml() ."\n"
81             if $self->extra_ports();
82              
83             $pxml .= $self->get_tcp_port_list()->as_xml();
84             $pxml .= $self->get_udp_port_list()->as_xml();
85             $pxml .= $self->get_ip_port_list()->as_xml();
86              
87             $xml .= "$pxml\n" if $pxml;
88             $xml .= $self->distance()->as_xml() . "\n" if $self->distance();
89             $xml .= "\n";
90            
91             return $xml;
92              
93             !
94             };
95              
96             =pod
97              
98             =head1 DESCRIPTION
99              
100             This class represents a host as repsented by the output
101             of an nmap scan.
102              
103             =head1 PROPERTIES
104              
105             =head2 status()
106              
107             Whether the host is reachable or not: `up' or `down'
108              
109             =head2 addresses()
110              
111             Addresses of the host as determined by nmap (Nmap::Scanner::Address references).
112              
113             =head2 add_address()
114              
115             Add an address to the list of addresses for this host
116              
117             =head2 hostname()
118              
119             First hostname of the host as determined by nmap (single hostname string).
120              
121             =head2 hostnames()
122              
123             Hostnames of the host as determined by nmap (Array of Address references).
124              
125             =head2 add_hostname()
126              
127             Add a hostname to the list of hostnames for this host
128              
129             =head2 smurf()
130              
131             True (1) if the host responded to a ping of a broadcast address and
132             is therefore vulnerable to a Smurf-style attack.
133              
134             =head2 extra_ports()
135              
136             Nmap::Scanner::ExtraPorts instance associated with this host.
137              
138             =head2 os()
139              
140             holds a reference to an Nmap::Scanner::OS object that
141             describes the operating system and TCP fingerprint for this
142             host, as determined by nmap. Only present if guess_os()
143             is called on the Nmap::Scanner::Scanner object AND nmap is
144             able to determine the OS type via TCP fingerprinting. See the
145             nmap manual for more details.
146              
147             =head2 add_port($port_object_reference)
148              
149             =head2 get_port($proto, $number)
150              
151             Returns reference to requested port object.
152              
153             =head2 get_udp_port($number)
154              
155             Returns reference to requested UDP port object.
156              
157             =head2 get_tcp_port($number)
158              
159             Returns reference to requested TCP port object.
160              
161             =head2 ENUMERATION METHODS
162              
163             All these methods return lists of objects that
164             can be enumration through using a while loop.
165              
166             my $ports = $host->get_port_list();
167              
168             while (my $p = $ports->get_next()) {
169             # Do something with port reference here.
170             }
171              
172             =head2 get_port_list()
173              
174             =head2 get_ip_port_list()
175              
176             =head2 get_tcp_port_list()
177              
178             =head2 get_udp_port_list()
179              
180             =head2 distance()
181              
182             The distance in hops this host is from the scanning host as
183             estimated by nmap.
184              
185             =cut
186              
187             1;