#!/usr/bin/env bash ADDR=$1 DNS_SERVER=$2 EXTRA_LINES_EXPR='(is an alias|has no|not found|^Using domain server:|^Name:|^Address:|^Aliases:|^$)' function print_host() { local port=$2 for ipv in A AAAA; do if [ "$ipv" = A ]; then local argn=4 local wl='' local wr='' else local argn=5 local wl='[' local wr=']' fi host -t $ipv $1 $DNS_SERVER | grep -Ev "$EXTRA_LINES_EXPR" | awk "{ print \$$argn }" | while read server; do echo -n "$wl$server$wr:$port (${3-$ipv}" local response response=$( (echo ''; sleep 0.1) | nc -nw 2 $server $port 2>/dev/null) if [ $? -eq 0 ]; then local introduced_as=$(echo "$response" | grep -Eo "from=.[^\'\"]+." | cut -d= -f2) [ -n "$introduced_as" ] && echo -n " $introduced_as" echo ')' else echo ', unavailable)' fi done done } for role in client server; do echo "--- $role ---------------------------------------------" HOST_ANSWER=$(host -t SRV "_xmpp-$role._tcp.$ADDR" $DNS_SERVER | grep -Ev "$EXTRA_LINES_EXPR") if echo $HOST_ANSWER | grep -q 'has SRV'; then echo "$HOST_ANSWER" | awk '{ print $7, $8 }' | while read port server; do print_host $server $port SRV done else if [ "$role" = "server" ]; then port=5269 else port=5222 fi print_host $ADDR $port fi done