diff --git a/pihole b/pihole index b0ba8473..d35a58c3 100755 --- a/pihole +++ b/pihole @@ -251,16 +251,47 @@ Options: echo -e "${OVER} ${TICK} ${str}" } +analyze_ports() { + # FTL is listening at least on at least one port when this + # function is getting called + echo -e " ${TICK} DNS service is listening" + # Check individual address family/protocol combinations + # For a healthy Pi-hole, they should all be up (nothing printed) + if grep -q "IPv4.*UDP" <<< "${1}"; then + echo -e " ${TICK} UDP (IPv4)" + else + echo -e " ${CROSS} UDP (IPv4)" + fi + if grep -q "IPv4.*TCP" <<< "${1}"; then + echo -e " ${TICK} TCP (IPv4)" + else + echo -e " ${CROSS} TCP (IPv4)" + fi + if grep -q "IPv6.*UDP" <<< "${1}"; then + echo -e " ${TICK} UDP (IPv6)" + else + echo -e " ${CROSS} UDP (IPv6)" + fi + if grep -q "IPv6.*TCP" <<< "${1}"; then + echo -e " ${TICK} TCP (IPv6)" + else + echo -e " ${CROSS} TCP (IPv6)" + fi + echo "" +} + statusFunc() { - # Determine if service is running on port 53 (Cr: https://superuser.com/a/806331) - if (echo > /dev/tcp/127.0.0.1/53) >/dev/null 2>&1; then + # Determine if there is a pihole service is listening on port 53 + local listening + listening="$(lsof -Pni:53)" + if grep -q "pihole" <<< "${listening}"; then if [[ "${1}" != "web" ]]; then - echo -e " ${TICK} DNS service is running" + analyze_ports "${listening}" fi else case "${1}" in "web") echo "-1";; - *) echo -e " ${CROSS} DNS service is NOT running";; + *) echo -e " ${CROSS} DNS service is NOT listening";; esac return 0 fi @@ -270,13 +301,13 @@ statusFunc() { # A config is commented out case "${1}" in "web") echo 0;; - *) echo -e " ${CROSS} Pi-hole blocking is Disabled";; + *) echo -e " ${CROSS} Pi-hole blocking is disabled";; esac elif grep -q "BLOCKING_ENABLED=true" /etc/pihole/setupVars.conf; then # Configs are set case "${1}" in "web") echo 1;; - *) echo -e " ${TICK} Pi-hole blocking is Enabled";; + *) echo -e " ${TICK} Pi-hole blocking is enabled";; esac else # No configs were found