DNS queries from a file/list to CSV

It's not easy to perform bulk DNS resolution when you have many DNS/IPs to control. Here is a simple script allowing you to perform DNS resolution over a list of DNS entries or IPs.

Here is a list of DNS (names and IPs) that we put in a file called listDNS.txt

www.python.org
www.pyython.org
208.67.220.220
www.bing.com

Let's copy that script that will do the job in a file called resolverDNS.sh

#!/bin/bash
# Script file - resolverDNS.sh
# Checking existence of arg
if [ "$1" == "" ]
then
# Display help if wrong usage
echo "Usage: /bin/bash resolverDNS.sh /path/to/file"
exit 35
else
# Loop over dns and resolve
while IFS='' read -r line || [[ -n "$line" ]]; do
dns=''
# Resolve reverse DNS
if [[ $line =~ ^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$ ]]; then
dns=`dig +noall +answer -x $line +short|tr 'n' ' '`
# Resolve A record
else
dns=`dig a $line +short|tr 'n' ' '`
fi
echo -e "$linetis resolving intot${dns}"
done < "$1"
fi

And now, execute it by passing file path as an arg, and see the output:

$ bash /home/user/resolverDNS.sh /home/user/listDNS.txt
www.python.org is resolving into python.map.fastly.net. 151.101.60.223
www.pyython.org is resolving into
208.67.220.220 is resolving into resolver2.opendns.com.
www.bing.com is resolving into www-bing-com.a-0001.a-msedge.net. a-0001.a-msedge.net. 204.79.197.200 13.107.21.200

Resolution are done for every line, depending on if it's an IP or a name (and remain empty if it can't resolve).
Feel free to adjust the script according to your needs!