A program and Ruby library to generate lists of IP addresses from Nmap-style IP host specifications.
For example:
hostspec 1.0.0.1-3
Produces:
10.0.0.1
10.0.0.2
10.0.0.3
In addition to expanding host specs to a list, a command may be executed for each IP address. This enables execution of commands for all hosts on a network. See Program Usage below.
Install a current version of Ruby from https://www.ruby-lang.org/en/installation/
Iqeo::Hostspec is packaged as a Ruby gem. To install, execute:
gem install iqeo-hostspec
To use the library in your own applications:
require 'iqeo/hostspec'
For help with usage, execute:
hostspec --help
Usage: hostspec [ options ] specs... [ [ -c / --cmd ] command ]
Prints all IP addresses for IP host specifications (see Specs:).
If specified, a command is executed for each IP address, with related values in environment variables (see Command:).
Specs:
Nmap-style IP host specifications, multiple specs separated by spaces.
Single host : x.x.x.x or hostname
Multiple hosts:
- by mask length : x.x.x.x/m or hostname/m
- by octet values : x.x.x.a,b,c
- by octet ranges : x.x.x.d-e
Octet values and ranges may be combined or applied to any/multiple octets.
Examples:
hostname : localhost => 127.0.0.1
hostname w/mask : localhost/24 => 127.0.0.0 127.0.0.1 ... 127.0.0.254 127.0.0.255
address : 1.0.0.1 => 1.0.0.1
address w/mask : 2.0.0.1/24 => 2.0.0.0 2.0.0.1 ... 2.0.0.254 2.0.0.255
address w/values : 3.0.0.10,20,30 => 3.0.0.10 3.0.0.20 3.0.0.30
address w/ranges : 4.0.0.40-50 => 4.0.0.40 4.0.0.41 ... 4.0.0.49 4.0.0.50
address w/combo : 5.0.0.2,4-6,8 => 5.0.0.2 5.0.0.4 5.0.0.5 5.0.0.6 5.0.0.8
multiple octets : 6.1-2,3.4-5.6 => 6.1.4.6 6.1.5.6 6.2.4.6 6.2.5.6 6.3.4.6 6.3.5.6
Command:
A command to execute for each IP address may be specified following the command switch ( -c / --cmd ).
The command is executed in a separate shell for each IP address.
Environment variables are provided with values for each IP address command execution.
Quote these variables in the command to prevent substitution by the current shell.
$HOSTSPEC_IP : IP address
$HOSTSPEC_MASK : Mask (255.255.255.255 if a mask length was not specified)
$HOSTSPEC_MASKLEN : Mask length (32 if a mask length was not specified)
$HOSTSPEC_COUNT : Count of IP addresses
$HOSTSPEC_INDEX : Index of IP address (from 1 to Count)
Examples:
Print IP addresses and mask length with index and count:
hostspec 1.1.1.0/30 --cmd echo '$HOSTSPEC_INDEX' of '$HOSTSPECT_COUNT' : '$HOSTSPEC_IP/$HOSTSPEC_MASKLEN'
...
1 of 4 : 1.1.1.0/255.255.255.252
2 of 4 : 1.1.1.1/255.255.255.252
3 of 4 : 1.1.1.2/255.255.255.252
4 of 4 : 1.1.1.3/255.255.255.252
Collect routing tables of all hosts on a network via ssh:
hostspec 1.1.1.1-254 --cmd 'ssh me@$HOSTSPEC_IP route -n'
Collect default web pages from all servers on a network via curl:
hostspec 1.1.1.1-254 --cmd curl -o '$HOSTSPEC_IP.html' 'http://$HOSTSPEC_IP'
Collect IP configuration info from multiple windows systems (run from a windows system):
hostspec 1.1.1.1-254 --cmd psexec '\\%HOSTSPEC_IP%' ipconfig /all
Collect IP configuration info from multiple windows systems (run from a linux system with kerberos):
hostspec 1.1.1.1-254 --cmd winexe --kerberos yes //$(dig -x '$HOSTSPEC_IP' short) ipconfig /all
...or any task that you would have to execute individually on multiple systems.
Options:
-h / --help : Display this helpful information
-v / --version : Display program version
Licensed under GPLv3, see LICENSE.txt.