about summary refs log tree commit diff
path: root/sh/mrt
blob: b39aeacadf6e002442e98d232cd641c61c975868 (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/sh
# Mullvad Relay Test

# Possible reasons for not reaching baidu.com and baomitu.com:
# https://github.com/mullvad/dns-blocklists/issues/86#issuecomment-1479102157
# https://www.reddit.com/r/mullvadvpn/comments/10sht67/open_chinese_search_machines

location="Los Angeles"
# about 2 to 3 seconds for fast connection, 5 to 7 seconds for slow connection, to specified website
curl_maxtime=7
website=www.baidu.com

while getopts l:m:w: opt; do
	case $opt in
		l)location="$OPTARG";;
		m)curl_maxtime="$OPTARG";;
		w)website="$OPTARG";;
		\?)exit 1;;
	esac
done

mullvad relay update
# info gawk Node: Ranges, 7.1.3 Specifying Record Ranges with Patterns
# https://www.baeldung.com/linux/print-lines-between-two-patterns
# https://stackoverflow.com/q/39384283/9008720
# https://stackoverflow.com/a/38972737/9008720
# https://stackoverflow.com/a/17988834/9008720
# https://unix.stackexchange.com/q/63891/459013
# https://stackoverflow.com/a/17914105/9008720
for relay in $(mullvad relay list | awk -v location="$location" '
$0 ~ location {f=1;next} 
/^\t[[:alpha:]]/ {f=0}
f {
	if($5 == "WireGuard,")
		print $1
}'); do
	mullvad relay set hostname "$relay" 
	t=0
	while [ $t -lt 30 ]; do
		if mullvad status | grep -q "Connected to $relay"; then
			if curl -Ism"$curl_maxtime" "$website"; then
				good_relays="$(printf '%s\n' "$good_relays" "$relay")"
			fi
			break
		fi
		sleep 0.1
		t=$((t+1))
	done
done

echo "$good_relays" | tee "$XDG_DOCUMENTS_DIR/logs/mrt_$(printf '%s' "$location" | tr '[:upper:] ' '[:lower:]_')_$website.log"