[prev in list] [next in list] [prev in thread] [next in thread]
List: nmap-hackers
Subject: tcl script using nmap to verify services
From: Philip Ehrens <pehrens () ligo ! caltech ! edu>
Date: 2000-01-10 19:28:13
[Download RAW message or body]
Hi All,
I was asked to write this as a sys-admin tool. It is actually
an early version of the tool we are using, which is rather site
specific. I thought somebody might find it educational or even
useful.
~~~~snip~~~~
#!/ldcg/bin/tclsh
# This is a simple script which parses the output of
# the nmap program to determine whether required services
# are in fact running on a machine. Output is written as
# an html formatted log file with a sensible default name.
# Two arguments are accepted:
#
# service_check [ hostname ] [ polling interval ]
#
# where polling interval is given in seconds.
# Note that there is considerable time overhead when
# running nmap in "Polite mode, so times less than 100 sec
# may be significantly longer than they should be!
;## no checking is done for bad values.
if { [ llength $argv ] == 2 } {
set host [ lindex $argv 0 ]
set interval [ lindex $argv 1 ]
} else {
set host $::env(HOST)
set interval 10
}
;## if a single arg is given, if it is an integer, assume
;## it is an interval, else it is a hostname.
if { [ llength $argv ] == 1 } {
if { [ regexp {^\d+$} [ lindex $argv 0 ] ] } {
set interval [ lindex $argv 0 ]
} else {
set host [ lindex $argv 0 ]
}
}
set log [ file join ${host}_servicelog.html ]
array set services {
7 echo
9 discard
13 daytime
19 chargen
22 ssh
25 smtp
37 time
111 sunrpc
512 exec
514 shell
515 printer
540 uucp
6000 X11
6112 dtspc
7100 font-service
10000 LDAS-manager-operator-port
}
set ports [ join [ lsort -integer [ array names services ] ] , ]
set fid [ open $log a+ ]
proc run {} {
set msg "<b>$::host</b> [ clock format [ clock seconds ] ]<br><ul>\n"
set data [ exec nmap -T Polite -p $::ports $::host ]
foreach port [ array names ::services ] {
set name $::services($port)
if { ! [ regexp "$port\[a-z \]+$name" $data ] } {
append msg "<item><font color=red><b>$name</b></font> not running on $::host port $port<br>\n"
}
}
puts $::fid "$msg<br></ul>\n"
flush $::fid
after [ expr { $::interval * 1000 } ] run
}
run
vwait enter-mainloop
~~~~snip~~~~
--
Phil Ehrens <pehrens@ligo.caltech.edu>| Fun stuff:
The LIGO Laboratory, MS 18-34 | http://www.ralphmag.org
California Institute of Technology | http://www.yellow5.com
1200 East California Blvd. | ftp://ftp.no.pgpi.com/pub/pgp
Pasadena, CA 91125 USA | http://slashdot.org
Phone:(626)395-8518 Fax:(626)793-9744 | http://freshmeat.net
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic