From 66e3a005d8d7c138423ebc367023735111e1e1e8 Mon Sep 17 00:00:00 2001 From: Daniel Fayette Date: Wed, 10 Feb 2016 21:18:46 -0600 Subject: [PATCH] Script to check functionality of pi-hole Script checks 1. Google public DNS nameservers, ensure they resolve to public IP's 2. Two random sites from the whitelist, ensure they are public IP's 3. Two random sites from the adlist, ensure they resolve to the Pi-Hole IP 4. Two random sites from the blacklist, ensure they resolve to the Pi-Hole IP --- advanced/Scripts/check-functionality.sh | 115 ++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100755 advanced/Scripts/check-functionality.sh diff --git a/advanced/Scripts/check-functionality.sh b/advanced/Scripts/check-functionality.sh new file mode 100755 index 00000000..a69a49c5 --- /dev/null +++ b/advanced/Scripts/check-functionality.sh @@ -0,0 +1,115 @@ +#!/usr/bin/env bash + + +IPv4dev=$(/sbin/ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)print $(i+1)}') +piholeIPCIDR=$(/sbin/ip -o -f inet addr show dev $IPv4dev | awk '{print $4}' | awk 'END {print}') +piholeIP=${piholeIPCIDR%/*} + +adList=/etc/pihole/gravity.list +blackList=/etc/pihole/blacklist.txt +whiteList=/etc/pihole/whitelist.txt +goodListNames="google-public-dns-a.google.com google-public-dns-b.google.com" + + +# Function to resolve hostname and determine if IP is RFC1918, pi-hole, or internet address for the host. +# Accepts 1 argument which is a host to resolve. +verifyHostAddress() { + status="" + ip=`nslookup $1 192.168.100.122 | grep ^"Address:" | tail -1 | cut -d: -f2 | sed 's/ //g'` + + if [[ $ip == $piholeIP ]]; then + status="pi-hole IP" + elif [[ $ip =~ (^127\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.) ]]; then + status="RFC1918" + else + status=$ip + fi +} + + +if [[ -r $adList ]];then + adListNames="" + numberOf=$(cat $adList | sed '/^\s*$/d' | wc -l) + for n in `shuf -i 1-$numberOf -n 2` + do + adListNames="$adListNames `sed -n ${n}p $adList | cut -d\ -f2`" + done +fi + + +if [[ -r $blackList ]];then + blackListNames="" + numberOf=$(cat $blackList | sed '/^\s*$/d' | wc -l) + for n in `shuf -i 1-$numberOf -n 2` + do + blackListNames="$blackListNames `sed -n ${n}p $blackList`" + done +fi + + +if [[ -r $whiteList ]];then + whiteListNames="" + numberOf=$(cat $whiteList | sed '/^\s*$/d' | wc -l) + for n in `shuf -i 1-$numberOf -n 2` + do + whiteListNames="$whiteListNames `sed -n ${n}p $whiteList`" + done +fi + + +echo -e "\nTesting known good websites." +for name in $goodListNames +do + verifyHostAddress "$name" + if [[ "$status" == "pi-hole IP" ]]; then + echo -e "\tFailed - $name resolves to your pi-hole ($piholeIP)" + elif [[ "$status" == "RFC1918" ]]; then + echo -e "\tFailed - $name resolves to a non-routable address ($ip)" + else + echo -e "\tSuccess - $name resolves to a public IP address ($ip)" + fi +done + + +echo -e "\nTesting websites from your $whiteList file." +for name in $whiteListNames +do + verifyHostAddress "$name" + if [[ "$status" == "pi-hole IP" ]]; then + echo -e "\tFailed - $name resolves to your pi-hole ($piholeIP)" + elif [[ "$status" == "RFC1918" ]]; then + echo -e "\tFailed - $name resolves to a non-routable address ($ip)" + else + echo -e "\tSuccess - $name resolves to a public IP address ($ip)" + fi +done + + +echo -e "\nTesting websites from your $adList file." +for name in $adListNames +do + verifyHostAddress "$name" + if [[ "$status" == "pi-hole IP" ]]; then + echo -e "\tSuccess - $name resolves to your pi-hole ($ip)" + elif [[ "$status" == "RFC1918" ]]; then + echo -e "\tVerify - $name resolves to a non-routable address that is not your pi-hole server ($ip)" + else + echo -e "\tFailed - $name resolves to a public IP address ($ip)" + fi +done + + +echo -e "\nTesting websites from your $blackList file." +for name in $blackListNames +do + verifyHostAddress "$name" + if [[ "$status" == "pi-hole IP" ]]; then + echo -e "\tSuccess - $name resolves to your pi-hole ($ip)" + elif [[ "$status" == "RFC1918" ]]; then + echo -e "\tVerify - $name resolves to a non-routable address that is not your pi-hole server ($ip)" + else + echo -e "\tFailed - $name resolves to a public IP address ($ip)" + fi +done + +