1. Overview

The Internet Protocol address – IP – is a unique identifier assigned to each device connected to a computer network. It allows devices to communicate with each other over the Internet.

In this tutorial, we’ll explore how to find the IP address of a URL in Java.

2. Types of IP Address

IP addresses have two main versions: IPV4 and IPV6. IPv4 consists of 32 bits represented by four numbers separated by periods, like 192.168.1.1. IPv6 uses 128 bits and is shown as eight groups of hexadecimal digits separated by colons, such as 2001:0db8:85a3:0000:0000:8a2e:0370:7334.

We’ll focus on IPv4.

3. Common Methods of Finding an IP Address

Now, let’s dive into common methods to find the IP address of a URL.

3.1. Using the InetAddress Class

The InetAddress class provides a straightforward way to resolve hostnames into IP addresses. We’ll create a string for the URL and use the InetAddress.getByName() method to resolve it. Finally, we’ll retrieve the IP address using the getHostAddress() method.

Let’s dive into the code example:

String getByInetAddress(String urlString) throws UnknownHostException {

    InetAddress ip = InetAddress.getByName(urlString);

    return ip.getHostAddress();

}

The InetAddress.getByName(urlString) takes the URL as a parameter and resolves it to an IP address. The getHostAddress() retrieves the IP address in a readable format.

To ensure that our method works correctly, let’s write a simple unit test:

@Test
void givenValidURL_whenGetByInetAddress_thenReturnAValidIPAddress() throws UnknownHostException {
    URLIPAddress urlipAddress = new URLIPAddress();
    assertTrue(validate(urlipAddress.getByInetAddress("www.example.com")));
}

3.2. Using th****e Socket Connection

Next, let’s see how to find the local IP address using a socket connection. This method ensures we get the exact IP address our system uses when communicating with external servers. By creating a socket connection to an external server, we can determine exactly which IP address is being used for that specific connection.

Here’s a simple code example:

String getBySocketConnection(String urlString) throws IOException {
    try (Socket socket = new Socket()) {
        socket.connect(new InetSocketAddress(urlString, 80));
        return socket.getLocalAddress().getHostAddress();
    }
}

Assumption: the host URL exposes port 80 and is reachable via the Internet. Other ports can still be used as long as they’re exposed and reachable via the Internet. This connection helps us determine which local IP address our machine uses when accessing the internet.

The getLocalAddress() method from the Socket class fetches the IP address associated with this connection. Finally, we print the IP address using getHostAddress(), which gives us the IP as a simple string.

To ensure the getBySocketConnection() method works correctly, we can write a simple unit test that connects to google.com:

@Test
void givenValidURL_whenGetBySocketConnection_thenReturnAValidIPAddress() throws IOException {
    URLIPAddress urlipAddress = new URLIPAddress();
    assertTrue(validate(urlipAddress.getBySocketConnection("google.com")));
}

The instance of URLIPAddress contains our method. The test invokes the getBySocketConnection() method, passing “google.com” as the target URL. The method returns the local IP address. The validate() method checks if the returned string is in a valid IP address format (e.g., 192.168.1.1). The assertTrue() assertion ensures that the result is indeed valid.

3.3. Using Third-Party Libraries

Finally, let’s look at using third-party libraries. Sometimes, we might want additional flexibility or functionality beyond what Java’s standard library offers. Libraries like Apache Commons Lang, Google Guava, or OkHttp can be handy for more complex needs.

For example:

  • Apache Commons Lang: Provides utilities for working with various Java objects
  • Google Guava: Offers utility methods and collections that are highly optimized
  • OkHttp: A robust HTTP client for both Android and Java, often used for making network requests

These libraries can simplify various tasks, including network operations, making our code cleaner and more maintainable.

4. Conclusion

Finding the IP address of a URL in Java can be done in several ways. Whether we’re using the InetAddress or Socket connection, or leveraging third-party libraries, each method has its strengths. Understanding these options allows us to choose the most appropriate method for our specific needs.

All of the code snippets mentioned in the article are available over on GitHub.