ScanPBNJ - a program for running Nmap scans and storing the results ina PBNJ 2.0 database.
scanpbnj [Options] {target specification}
ScanPBNJ performs an Nmap scan and then stores the results ina database. The ScanPBNJ stores information about the machine that hasbeen scanned. ScanPBNJ stores the IP Address, Operating System,Hostname and a localhost bit. The localhost bit, is simply a singlebit which is 1 when the target machine is localhost, otherwise it is0. It also stores two timestamps for the machine table. The first isa human readable version and the second is the unix time. Both ofthese timestamp correspond to the first time that the machine wasscanned.
ScanPBNJ stores information about the services that are found to berunning on the target machine. ScanPBNJ stores typical informationabout the service, by storing the port and protocol. Also, ScanPBNJstores version, product and service state information about eachservice. The service state can either be up or down. Two timestampsare also inserted for each instance of every service. The first is ahuman readable version and the second is the unix time. Both ofthese timestamp correspond to the time that the service was scanned.
This tool can give an admin a clear network layout with ofall the machines with all the services they are running.
Apart of PBNJ 2.0 suite of tools to monitor changes on a network.
Usage: scanpbnj [Options] {target specification}
Target Specification:Can be a IP Address, hostname, network etc.Ex: microsoft.com, 10.0.0.0/24, 192.168.1.1, 10.0.0.0-100-i --iplist <iplist> Scan using a list of IPs from a file-x --xml <xml-file> Parse scan/info from Nmap XML file
Scan Options:-a --args <args> Execute Nmap with args (needs quotes)-e --extraargs <args> Add args to the default args (needs quotes)--inter <interface> Perform scan with non default interface-m --moreports <ports> Add ports to scan ex: 8080 or 3306,5900-5910-n --nmap <path> Path to Nmap executable-p --pingscan Ping Target then scan the alive host(s)--udp Add UDP to the scan arguments--rpc Add RPC to the scan arguments-r --range <range> Ports for scan [def 1-1025]
--diffbanner Parse changes of the banner
Config Options:-d --dbconfig <config> Config for results database [def config.yaml]--configdir <dir> Directory for the database config file
--data <file> SQLite Database override [def data.dbl]--dir <dir> Directory for SQLite or CSV files [def .]
General Options:--nocolors Don't Print Colors--test <level> Testing information--debug <level> Debug information-v --version Display version-h --help Display this information
Send Comments to Joshua D. Abraham ( [email protected] )
* ScanPBNJ requires root privileges to perform a scan.
* If you do not pass a specific ports range, 1-1025 is used.
* If there are configs in the current directory, they are usedinstead of those in the user's config directory.
* ScanPBNJ does not modify previous database entries. It simplyinserts new information when a change is found.
* One thing that should be done when performing scans is to makesure to use the same ports or you will get false positives.
1) Scan a class B network on ports 1-9000
sudo ./scanpbnj -r 1-9000 10.0.0.0/16
2) Scan an IP Address on ports 1-9000
sudo ./scanpbnj -r 1-9000 10.0.0.100
The following examples can be added to /etc/crontab
1) Scan a Class C network every 2 hours
30 */2 * * * root scanpbnj 10.0.0.\*
2) Scan a Class C network everyday at 2:30
30 2 * * * root scanpbnj 10.0.0.\*
The target specified is a typical method of probing the network.Therefore, any of the following can be used:(e.g. 10.0.0.1, 10.0.0.1-254, 10.0.0.0/24 or 10.0.0.\* ).The first example is simply an IP address. The second example isthe scanning of a range. The third is a range in CIDR notation.The fourth example is the IP with the star which specifies to scan255 hosts. This is the same format that Nmap uses with the onlyexception being the \* on the last octet. This is needed because itneeds to not interpret the star when it is being executed.
Another option, is to use a hostname or domain name. ScanPBNJ willthen resolve the name to the correct IP address. If you pass adebug flag with level 1 or greater, ScanPBNJ will display what IPaddress, the hostname resolved too.
-i <iplist> Scan using a list of IPs from a file
The iplist option is useful when you have a specific list of IPs toscan. This will perform a full scan of the IPs that are specified.This option is similar to using -sL with Nmap. The results ofthe scan are inserted into the database.
-x <xml-file> Parse scan/info from Nmap XML file
This option is useful when you can't perform the scan yourself oryou don't want ScanPBNJ to perform the scan. Another situation wherethis is useful, is if you have an XML file that was done in the pastand you want to extract information from it, possibly to comparewith what is currently being run on the target. ScanPBNJ parses theNmap XML file and extracts the information about the host(s) andservice(s) then inserts the results into the database.
-a --args <args>
** NOTE ** This option needs quotes around the passed arguments
This option will bypass the default arguments that are used inscanning with Nmap. This can be used to do a particular type of scanthat is not possible by simply adding extra arguments. For example,if you want to only scan UDP ports and still do versionidentification and OS detection, you would do so using the followingnotation:
sudo scapbnj -a "-A -O -sU" localhost
-e --extraargs <args>
** NOTE ** This option needs quotes around the passed arguments
This option will add additional arguments onto the default scanarguments. This is most useful in doing scans where time optimizationis needed. Therefore, these arguments will be added and then used inthe scan.
--inter <intface>
This option sets an alternative interface for performing the scan.This is useful when you have multiple interfaces on a machinewith restrictions on which devices can access certain IP or IP ranges.
-m --moreports <ports>
This options adds additional ports to the range of ports to scan.Individual port numbers are OK, as are ranges separated by ahyphen (e.g. 1-1023,5800,5900,8080).
For example:
sudo scanpbnj -m 7000-7500,8080 localhost
This scan would scan the default range as well 7000-7500 and 8080.
-n --nmap <alternative-nmap-path>
Use an alternative Nmap rather than Nmap located in the your path.This is useful if you have multiple version of Nmap installed ona system or if you are testing a new version of Nmap. Remember that ifyou are using a newly compiled version of Nmap that you need toexport NMAPDIR to the location that Nmap was compiled in. Thus, ifyou have compiled Nmap in your homedir, use the following notation:
export NMAPDIR=$HOME/nmap-VERSION/
sudo scanpbnj -n $HOME/nmap-VERISON/ localhost
-p Ping Target then scan the host(s) that are alive
The ping scan is a useful method of only scanning the host that areresponding to ICMP echo requests. This scan basically takes the hostthat respond to ICMP echo requests and then performs a scan only onthose hosts. Therefore, no time is wasted in scanning hosts that donot respond. The results of the scan are then inserted into thedatabase.
--udp Add UDP to the scan arguments
Perform a UDP scan, in addition to the default scan.
sudo scanpbnj --udp localhost
If you want to only perform a UDP scan you need to set the specificarguments for the scan.
sudo scanpbnj -a "-vv -O -P0 1-1025 -sVU" localhost
--rpc Add RPC to the scan arguments
Perform a RPC scan in addition to the default scan.
sudo scanpbnj --udp localhost
If you want to only perform a RPC scan you need to set the specificarguments for the scan.
sudo scanpbnj -a "-vv -O -P0 1-1025 -sVR" localhost
-r --range <ports>
Ports for scan [default 1-1025]
This option specifies which ports you want to scan and overrides thedefault. Individual port numbers are OK, as are ranges separated by ahyphen (e.g. 1-1023,5800,5900,8080 ).
Thus, a scan like this is ok.
sudo scanpbnj -r 22,25,80,100-200 localhost
Also, if you have leave off the number after the hyphen it will scanall from the start port to 65535.
For example:
sudo scanpbnj -r 22,25- localhost
--diffbanner
Parse changes of the banner
This options enables ScanPBNJ to do comparisons on the banner. Thereason this is not on by default is that it could show changes inservices that are not are important to the user. However, this optionis useful to a security professional who is looking for any changesthat occur so that they can be verified.
-d --dbconfig <file>
Config for results database [default config.yaml]
This option is used to specify an alternative config.yaml file.
--configdir <dir>
Directory for Config file [default . ]
This option is used to specify an alternative directory for theconfig.yaml file.
--data <file>
SQLite Database override [default data.dbl ]
This option is used when you want to change the name of the SQLitedatabase file that is generated.
--dir <dir>
Directory for SQLite or CSV files [default . ]
This option is used when you want the database to be generated in adifferent directory.
--nocolors
The default results from ScanPBNJ print the useful changes with colorsThis options will simply not print the colors.
--test <level>
Increases the Test level, causing ScanPBNJ to print testing informationabout the scan in progress. Using the Test level is mostly only usingfor testing. This will also print the debugging information so it canget rather lengthy. The greater the Test level the more output will begiven.
This option is also used for reporting bugs. All bug reports shouldbe submitted using --test 1 and an additional report may be neededdepending on the issue.
--debug <level>
Increases the Debug level, causing ScanPBNJ to print more informationabout the scan in progress. Nmap scanning arguments are shown as wellas the ip address if you are scanning a domain name. This option isused to give the user more information about what the scanner is doing.The higher the debug level the more output the user will receive.
-v --version
Prints the ScanPBNJ version number and exits.
-h --help
Prints a short help screen with the command flags. Running ScanPBNJwithout any arguments does the same thing.
Here are the default arguments that are used during a default scan:
-vv -O -P0 -sSV -p 1-1025
PBNJ's data files are stored in ScanPBNJ and OutputPBNJ. When eitherof these programs is run the configuration files will be generatedfor the user if they don't already exists and placed in the$HOME/.pbnj-2.0 directory. Again, if there is a configuration filein the current directory it is used instead of the version in theconfiguration directory.
$HOME/.pbnj-2.0/config.yaml - holds settings for connecting tothe database which store the information from PBNJ scans.
$HOME/.pbnj-2.0/query.yaml - lists all queries that can be used toretrieve information from the database. Also, includes the name anddescription for each query. This is only generated when you executedOutputPBNJ.
For Windows, the pbnj-2.0 config directory is in the APPDATAdirectory, which contains both config.yaml and query.yaml. Dependingon your environment, the APPDATA directory may be a different locationfrom other environments. Therefore, when the configs are executed forthe first time they will display the path where the configs weregenerated.
Any feature requests should be reported to the onlinefeature-request-tracking system available on the web at :http://sourceforge.net/tracker/?func=add&group_id=149390&atid=774489Before requesting a feature, please check to see if the features hasalready been requested.
Any bugs found should be reported to the online bug-tracking systemavailable on the web at :http://sourceforge.net/tracker/?func=add&group_id=149390&atid=774488.Before reporting a bug, please check to see if the bug has already beenreported.
When reporting PBNJ bugs, it is important to include a reliable way toreproduce the bug, version number of PBNJ and Nmap, OSname and version, and any relevant hardware specs. And of course,patches to rectify the bug are even better.
The following databases are supported:
* SQLite [default]* MySQL* Postgres* CSV
The following is the SQLite version of the database schema:
CREATE TABLE machines (mid INTEGER PRIMARY KEY AUTOINCREMENT,ip TEXT,host TEXT,localh INTEGER,os TEXT,machine_created TEXT,created_on TEXT);CREATE TABLE services (mid INTEGER,service TEXT,state TEXT,port INTEGER,protocol TEXT,version TEXT,banner TEXT,machine_updated TEXT,updated_on TEXT);
outputpbnj(1), genlist(1), nmap(1)
Joshua D. Abraham ( [email protected] )
This program is distributed in the hope that it will be useful, butWITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNUGeneral Public License for more details athttp://www.gnu.org/copyleft/gpl.html, or in the COPYING file includedwith PBNJ.
It should also be noted that PBNJ has occasionally been known tocrash poorly written applications, TCP/IP stacks, and even operatingsystems. While this is extremely rare, it is important to keep inmind. PBNJ should never be run against mission critical systemsunless you are prepared to suffer downtime. We acknowledge here thatPBNJ may crash your systems or networks and we disclaim all liabilityfor any damage or problems PBNJ could cause.