blob: fdff4ca83892a654a6f70d2f81587ed15c4e4594 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
#!/usr/bin/env zsh
# load module to parse command line arguments
zmodload zsh/zutil
zparseopts -D -E -A opts -- h x
# load module to avoid use of GNU sleep
zmodload zsh/zselect
# enable XTRACE shell option for full debugging output of scripts
if (( ${+opts[-x]} )); then
set -x
fi
if [[ -z "${2}" ]] || (( ${+opts[-h]} )); then
echo "usage: ${0:t} [ -h ] [ -x ] host port [ knock_port ] .." >&2
echo -e '\n\t-h\tshow this help\n\t-x\tenable shell debugging' >&2
echo -e '\thost\tdestination host name' >&2
echo -e '\tport\tdestination service port\n' >&2
echo -e 'Specifying no knock_port(s) will use 12345 23456 34567 45678 by default.\n' >&2
exit 1
fi
host="${1}"
port="${2}"
shift 2
knock_ports="${@:-12345 23456 34567 45678}"
attempts=1
function check_service_port {
if nc -w1 ${host} ${port} &> /dev/null <& -; then
exit 0
fi
}
#check_service_port
while [[ ${attempts} -lt 9 ]]; do
for knock_port in ${=knock_ports}; do
nc -w1 ${host} ${knock_port} &> /dev/null <& - &
zselect -t ${attempts}0
done
check_service_port
((attempts+=1))
done
exit 1
|