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:

How can I resolve a hostname to an IP address in a Bash script? BASH Programming Networking

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:

How can I resolve a hostname to an IP address in a Bash script? BASH Programming Networking

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:

How can I resolve a hostname to an IP address in a Bash script? BASH Programming Networking

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.

How can I resolve a hostname to an IP address in a Bash script? BASH Programming Networking

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:

  1. Create a bash file using any text editor. Here I will be using the Nano editor to create a script named “iplookup.sh”.
  1. 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

  2. Once done, use Ctrl O and Ctrl X to save and exit the file respectively.
  3. 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: How can I resolve a hostname to an IP address in a Bash script? BASH Programming Networking

    Similarly, to resolve the IP address of “yahoo.com”, the command would be:

    $ ./iplookup.sh yahoo.com

    The output would be similar to this:How can I resolve a hostname to an IP address in a Bash script? BASH Programming Networking

    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

How can I resolve a hostname to an IP address in a Bash script? BASH Programming Networking

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.