Every system in a TCP/IP network is assigned a unique identifier known as IP address that helps to connect it with other system o the network and all over the internet. All the websites you access on the internet also have unique IP addresses. As it is difficult for everyone to remember the IP addresses of these websites, the DNS system comes which helps to translate these hard to remember IP addresses into human-readable names. With DNS, you no longer have to remember the IP addresses. Instead, you have to just have to remember the domain name and all done. Actually, on the backed, the DNS server takes the hostname and resolves it to an IP address which the browser or application then connects to.
In this article, we will explain how to resolve a hostname/domain name to an IPv4 and IPv6 address in a Bash script. However, before proceeding towards creating the script, let us review some of the commands that can be used to resolve the hostname/domain name to an IP address.
Ping
Ping is the most simple and built-in tool that is available on almost all operating systems. It is used to verify the reachability of a host in a network. However, we can also used it to find the IP address against any hostname/domain name. Use the following syntax to find the IP address of a targeted hostname/domain name:
Nslookup
Nslookup is widely used to resolve the hostname to an IP address. In order to use this command for an IP lookup, use the following syntax:
Host
Another command-line utility “host” can be used to find IP address against any hostname/domain name. In order to use this command, use the following syntax:
Dig
Dig is another useful command line tool that is used to query various DNS related records. It can be used to find IP address against any hostname/domain name. Use Dig command in the following way to find an IP address against a specific hostname/domain name.
Bash script to resolve a hostname to an IP address
In order to use the bash script for an IP lookup, follow the below steps:
- Create a bash file using any text editor. Here I will be using the Nano editor to create a script named “iplookup.sh”.
- Copy-paste the following lines in your script file. Note that, here in this script, I am specifying Google’s public DNS server for IP lookup. You can specify any other DNS server as per your environment.
# Specify DNS server
dnsserver=“8.8.8.8”
# function to get IP address
function get_ipaddr {
ip_address=“”
# A and AAA record for IPv4 and IPv6, respectively
# $1 stands for first argument
if [ -n “$1” ]; then
hostname=“${1}“
if [ -z “query_type” ]; then
query_type=“A”
fi
# use host command for DNS lookup operations
host -t ${query_type} ${hostname} &>/dev/null ${dnsserver}
if [ “$?” -eq “0” ]; then
# get ip address
ip_address=“$(host -t ${query_type} ${hostname} ${dnsserver}| awk ‘/has.*address/{print $NF; exit}’)“
else
exit 1
fi
else
exit 2
fi
# display ip
echo $ip_address
}
hostname=“${1}“
for query in “A-IPv4” “AAAA-IPv6”; do
query_type=“$(printf $query | cut -d- -f 1)“
ipversion=“$(printf $query | cut -d- -f 2)“
address=“$(get_ipaddr ${hostname})“
if [ “$?” -eq “0” ]; then
if [ -n “${address}“ ]; then
echo “The ${ipversion} adress of the Hostname ${hostname} is: $address“
fi
else
echo “An error occurred”
fi
done - Once done, use Ctrl O and Ctrl X to save and exit the file respectively.
- Now to find an IP address against a targeted hostname/domain name, run the script using the following syntax:
$ ./script.sh target-host
For instance, to resolve the IP address of “google.com”, the command would be:
$ ./iplookup.sh google.com
The output would be similar to this:
Similarly, to resolve the IP address of “yahoo.com”, the command would be:
$ ./iplookup.sh yahoo.com
The output would be similar to this:
That is all there is to it! In this article, we have learned to resolve the hostname to an IPv4 and IPv6 address using a bash script. We also learned some other command-line tools such as Ping, Nslookup, Host, and Dig that can be used to perform an IP lookup.
About the author
Karim Buzdar
Karim Buzdar holds a degree in telecommunication engineering and holds several sysadmin certifications. As an IT engineer and technical author, he writes for various web sites. You can reach Karim on LinkedIn.