https://dev.kronoz.win/r/awesome-scripts.git
| 1 |
735f165 |
KronoZ |
1mo ago |
#!/bin/bash |
| 2 |
735f165 |
KronoZ |
1mo ago |
DNS_SERVER="127.0.0.1" |
| 3 |
735f165 |
KronoZ |
1mo ago |
LOG_FILE="/tmp/dnsleak-guard.log" |
| 4 |
735f165 |
KronoZ |
1mo ago |
|
| 5 |
735f165 |
KronoZ |
1mo ago |
exec 2>>"$LOG_FILE" |
| 6 |
735f165 |
KronoZ |
1mo ago |
|
| 7 |
735f165 |
KronoZ |
1mo ago |
if [ "$EUID" -ne 0 ]; then |
| 8 |
735f165 |
KronoZ |
1mo ago |
echo "[$(date)] ERROR: must run as root" >> "$LOG_FILE" |
| 9 |
735f165 |
KronoZ |
1mo ago |
exit 1 |
| 10 |
735f165 |
KronoZ |
1mo ago |
fi |
| 11 |
735f165 |
KronoZ |
1mo ago |
|
| 12 |
735f165 |
KronoZ |
1mo ago |
log() { |
| 13 |
735f165 |
KronoZ |
1mo ago |
echo "[$(date)] $1" >> "$LOG_FILE" |
| 14 |
735f165 |
KronoZ |
1mo ago |
} |
| 15 |
735f165 |
KronoZ |
1mo ago |
|
| 16 |
735f165 |
KronoZ |
1mo ago |
log "dnsleak-guard started" |
| 17 |
735f165 |
KronoZ |
1mo ago |
|
| 18 |
735f165 |
KronoZ |
1mo ago |
while true; do |
| 19 |
735f165 |
KronoZ |
1mo ago |
CHANGED=0 |
| 20 |
735f165 |
KronoZ |
1mo ago |
|
| 21 |
735f165 |
KronoZ |
1mo ago |
while IFS= read -r service; do |
| 22 |
735f165 |
KronoZ |
1mo ago |
[[ "$service" == "An asterisk"* ]] && continue |
| 23 |
735f165 |
KronoZ |
1mo ago |
[[ -z "$service" ]] && continue |
| 24 |
735f165 |
KronoZ |
1mo ago |
[[ "$service" == "*"* ]] && continue |
| 25 |
735f165 |
KronoZ |
1mo ago |
|
| 26 |
735f165 |
KronoZ |
1mo ago |
current=$(networksetup -getdnsservers "$service" 2>/dev/null) |
| 27 |
735f165 |
KronoZ |
1mo ago |
[ -z "$current" ] && continue |
| 28 |
735f165 |
KronoZ |
1mo ago |
[[ "$current" == *"aren't any"* ]] && continue |
| 29 |
735f165 |
KronoZ |
1mo ago |
|
| 30 |
735f165 |
KronoZ |
1mo ago |
current_flat=$(echo "$current" | tr '\n' ' ' | sed 's/[[:space:]]*$//') |
| 31 |
735f165 |
KronoZ |
1mo ago |
|
| 32 |
735f165 |
KronoZ |
1mo ago |
if [ "$current_flat" != "$DNS_SERVER" ]; then |
| 33 |
735f165 |
KronoZ |
1mo ago |
if networksetup -setdnsservers "$service" "$DNS_SERVER" 2>/dev/null; then |
| 34 |
735f165 |
KronoZ |
1mo ago |
CHANGED=1 |
| 35 |
735f165 |
KronoZ |
1mo ago |
log "[$service] DNS reset: '$current_flat' -> $DNS_SERVER" |
| 36 |
735f165 |
KronoZ |
1mo ago |
fi |
| 37 |
735f165 |
KronoZ |
1mo ago |
fi |
| 38 |
735f165 |
KronoZ |
1mo ago |
done < <(networksetup -listallnetworkservices 2>/dev/null) |
| 39 |
735f165 |
KronoZ |
1mo ago |
|
| 40 |
735f165 |
KronoZ |
1mo ago |
if [ "$CHANGED" -eq 1 ]; then |
| 41 |
735f165 |
KronoZ |
1mo ago |
dscacheutil -flushcache 2>/dev/null |
| 42 |
735f165 |
KronoZ |
1mo ago |
killall -HUP mDNSResponder 2>/dev/null |
| 43 |
735f165 |
KronoZ |
1mo ago |
log "DNS cache flushed" |
| 44 |
735f165 |
KronoZ |
1mo ago |
fi |
| 45 |
735f165 |
KronoZ |
1mo ago |
|
| 46 |
735f165 |
KronoZ |
1mo ago |
sleep 10 |
| 47 |
735f165 |
KronoZ |
1mo ago |
done |