#!/bin/bash # Generate voipgrid-ips.conf # Modify to suit your needs # Hosts, one per line HOSTS="sip.freedom.nl sip-tls.freedom.nl sipproxy.voipgrid.nl sip.encryptedsip.com" # Output file name FILE="voipgrid-ips.conf" # VOIP Provider name VOIPISP="freedom" # VOIP Template name VOIPTPL="voipgrid-in" IP4S="" IP6S="" IPS="" SRVS="" export LC_ALL=C.UTF-8 # Functions # Find IPv4 addresses find4addr() { IP4S=$( host "${1}" | grep "has address" | awk '{print $4}' ) } # Find IPv6 addresses find6addr() { IP6S=$( host "${1}" | grep "has IPv6 address" | awk '{print $5}' ) } # Find SRV record addresses findsrvadr() { while read SRV do #echo "Find IP addresses of ${SRV}" find4addr "${SRV}" if [ -n "${IP4S}" ] then #echo "${IP4S}" IPS=$( echo -e "${IPS}\n${IP4S}" ) fi find6addr "${SRV}" if [ -n "${IP6S}" ] then #echo "${IP6S}" IPS=$( echo -e "${IPS}\n${IP6S}" ) fi done <<< "${SRVS}" } # Find SRV records findsrv() { # Note: ${2} is a hostname SRVS="" SRVS=$( host -t SRV "${1}.${2}" | awk '{print $8}' ) } # Find all SRV record addresses findallsrvadr() { # Note: ${1} is a hostname #echo "Find SRV records of ${1}" findsrv "_sip._udp" "${1}" if [ -n "${SRVS}" ] then # Sort and remove duplicates SRVS=$( echo "${SRVS}" | sort -uV ) #echo -e "Udp-Sip\n${SRVS}" # Find addresses findsrvadr fi findsrv "_sip._tcp" "${1}" if [ -n "${SRVS}" ] then SRVS=$( echo "${SRVS}" | sort -uV ) #echo -e "Tcp-Sip\n${SRVS}" findsrvadr fi findsrv "_sips._tcp" "${1}" if [ -n "${SRVS}" ] then SRVS=$( echo "${SRVS}" | sort -uV ) #echo -e "Sip-Tls\n${SRVS}" findsrvadr fi } # Find IPv4 and IPv6 addresses findadr() { # Note: ${1} is a hostname #echo "Find IP addresses of ${1}" # Find IPv4 addresses find4addr "${1}" # Find IPv6 addresses find6addr "${1}" # Merge if [ -n "${IP4S}" ] then #echo "${IP4S}" if [ -z "${IPS}" ] then # First time IPS="${IP4S}" else # Join IPS=$( echo -e "${IPS}\n${IP4S}" ) fi fi if [ -n "${IP6S}" ] then #echo "${IP6S}" if [ -z "${IPS}" ] then # First time IPS="${IP6S}" else # Join IPS=$( echo -e "${IPS}\n${IP6S}" ) fi fi } while read HOST do # Find IP addresses findadr "${HOST}" # Add IP addresses of SRV records findallsrvadr "${HOST}" done <<< "${HOSTS}" # Sort and remove duplicates IPS=$( echo "${IPS}" | sort -uV ) #echo -e "IP Addresses are\n${IPS}" # Generate file CNT=1 echo "; Ip addresses used by ${VOIPTPL}" > "${FILE}" echo "" >> "${FILE}" while read IP do NUM=$( printf "%X" "${CNT}" ) echo "[${VOIPISP}_${NUM}](${VOIPTPL})" >> "${FILE}" echo "host=${IP}" >> "${FILE}" echo "" >> "${FILE}" let CNT+=1 done <<< "${IPS}"