summaryrefslogtreecommitdiff
path: root/ping-he-tb
blob: 4ef0dd98fd3acb095a64c43f2c7a8193f2ef9a8b (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
51
#!/bin/bash
main () {
	cd "$TMPDIR"

	set +e
	LIST=$(curl -sSL 'https://tunnelbroker.net/status.php' |
		grep -Eo 'title="[0-9.]+"' |
		grep -Eo '([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})')
	set -e

	for addr in $LIST
	do
		ping -qnc4 "$addr" > "$addr" &
	done

	set +e # ignore non-zero exit code from ping command
	for addr in $LIST
	do
		wait
	done
	set -e

	for addr in $LIST
	do
		avg=$(echo $(cat "$addr" |
			grep -Eo 'rtt min/avg/max/mdev = [0-9.]+/[0-9.]+/[0-9.]+/[0-9.]+' |
			grep -Eo '[0-9.]+') |
				awk '{print $2}')
		if [ -z "$avg" ]; then
			avg="inf"
		fi

		echo "$avg	$addr"
	done | sort -g
}

which ping > /dev/null 2> /dev/null
if [ $? -ne 0 ]; then
	echo "ping not found." >&2
	exit 1
fi

set -e
TMPDIR=$(mktemp -d)
set +e

main & wait
ec="$?"

rm -rf "$TMPDIR"
exit "$ec"