51 lines
1.3 KiB
Bash
Executable File
51 lines
1.3 KiB
Bash
Executable File
#!/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
|