15eebe6901f33f2ea47b43e43e3fa6a5abfa1a6b
[sahlberg/ctdb.git] / tests / eventscripts / stubs / nmap
1 #!/bin/bash
2
3 prog="nmap"
4
5 usage ()
6 {
7     cat >&2 <<EOF
8 Usage: $prog -n -oG - -PS 127.0.0.1 -p <port>[,<port> ...]
9
10 A fake nmap stub that prints items depending on the variable
11 FAKE_TCP_LISTEN and the ports specified.
12
13 Note that all options apart from -p are ignored.
14
15 EOF
16     exit 1
17 }
18
19 ports=""
20
21 parse_options ()
22 {
23     _temp=$(getopt -n "$prog" -a -o "np:" -l help -l PS: -l oG: -- "$@")
24
25     [ $? != 0 ] && usage
26
27     eval set -- "$_temp"
28
29     while true ; do
30         case "$1" in
31             -n) shift ;;
32             --oG|--PS) shift 2 ;;
33             -p) ports="${ports}${ports:+ }${2//,/ }" ; shift 2 ;;
34             --) shift ; break ;;
35             -h|--help|*) usage ;; # * shouldn't happen, so this is reasonable.
36         esac
37     done
38
39     [ $# -gt 0 ] && usage
40
41     [ -n "$ports" ] || usage
42 }
43
44 # For printing out...
45 args="$*"
46
47 parse_options "$@"
48
49 port_states=""
50
51 for p in $ports ; do
52     pn=$(getent services "$p" | sed -e 's@[[:space:]].*@@')
53     for i in $FAKE_TCP_LISTEN ; do
54         lp="${i##*:}"
55         if [ "$p" = "$lp" ] ; then
56             port_states="${port_states}${port_states:+, }${p}/open/tcp//${pn}///"
57             continue 2
58         fi
59     done
60     port_states="${port_states}${port_states:+, }${p}/closed/tcp//${pn}///"
61 done
62
63 cat <<EOF
64 # Nmap 5.21 scan initiated $(date) as: nmap $args
65 Host: 127.0.0.1 ()      Status: Up
66 Host: 127.0.0.1 ()      Ports: $port_states
67 # Nmap done at $(date) -- 1 IP address (1 host up) scanned in 0.04 seconds
68 EOF