Skip to content

Commit

Permalink
nmap inventory plugin, add use_arp_ping option (#7119)
Browse files Browse the repository at this point in the history
* nmap inventory plugin, add use_arp_ping option

* Apply suggestions from code review

Co-authored-by: Felix Fontein <[email protected]>

* Update plugins/inventory/nmap.py

Co-authored-by: Felix Fontein <[email protected]>

---------

Co-authored-by: Felix Fontein <[email protected]>
  • Loading branch information
bcoca and felixfontein authored Aug 20, 2023
1 parent 33998a5 commit eaf3926
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 14 deletions.
4 changes: 4 additions & 0 deletions changelogs/fragments/7118-nmap_inv_plugin_no_arp_option.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
minor_changes:
- nmap inventory plugin - now has a ``use_arp_ping`` option to allow the user to disable the default ARP ping query for a more reliable form (https://github.com/ansible-collections/community.general/pull/7119).
bugfixes:
- nmap inventory plugin - now uses ``get_option`` in all cases to get its configuration information (https://github.com/ansible-collections/community.general/pull/7119).
36 changes: 22 additions & 14 deletions plugins/inventory/nmap.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,11 @@
type: boolean
default: false
version_added: 6.1.0
use_arp_ping:
description: Whether to always (V(true)) use the quick ARP ping or (V(false)) a slower but more reliable method.
type: boolean
default: true
version_added: 7.4.0
notes:
- At least one of ipv4 or ipv6 is required to be True, both can be True, but they cannot both be False.
- 'TODO: add OS fingerprinting'
Expand Down Expand Up @@ -196,40 +201,43 @@ def parse(self, inventory, loader, path, cache=True):
# setup command
cmd = [self._nmap]

if self._options['sudo']:
if self.get_option['sudo']:
cmd.insert(0, 'sudo')

if self._options['port']:
if self.get_option['port']:
cmd.append('-p')
cmd.append(self._options['port'])
cmd.append(self.get_option['port'])

if not self._options['ports']:
if not self.get_option['ports']:
cmd.append('-sP')

if self._options['ipv4'] and not self._options['ipv6']:
if self.get_option['ipv4'] and not self.get_option['ipv6']:
cmd.append('-4')
elif self._options['ipv6'] and not self._options['ipv4']:
elif self.get_option['ipv6'] and not self.get_option['ipv4']:
cmd.append('-6')
elif not self._options['ipv6'] and not self._options['ipv4']:
elif not self.get_option['ipv6'] and not self.get_option['ipv4']:
raise AnsibleParserError('One of ipv4 or ipv6 must be enabled for this plugin')

if self._options['exclude']:
if self.get_option['exclude']:
cmd.append('--exclude')
cmd.append(','.join(self._options['exclude']))
cmd.append(','.join(self.get_option['exclude']))

if self._options['dns_resolve']:
if self.get_option['dns_resolve']:
cmd.append('-n')

if self._options['udp_scan']:
if self.get_option['udp_scan']:
cmd.append('-sU')

if self._options['icmp_timestamp']:
if self.get_option['icmp_timestamp']:
cmd.append('-PP')

if self._options['open']:
if self.get_option['open']:
cmd.append('--open')

cmd.append(self._options['address'])
if not self.get_option['use_arp_ping']:
cmd.append('--disable-arp-ping')

cmd.append(self.get_option['address'])
try:
# execute
p = Popen(cmd, stdout=PIPE, stderr=PIPE)
Expand Down

0 comments on commit eaf3926

Please sign in to comment.