ネットワーク

Java – IPv4形式のIPアドレスを取得する方法

JavaでIPv4形式のIPアドレスを取得するには、InetAddressクラスを使用します。

InetAddress.getLocalHost()メソッドでローカルホストのIPアドレスを取得し、getHostAddress()メソッドで文字列形式のIPアドレスを取得できます。

ただし、IPv6アドレスが返される場合もあるため、IPv4アドレスのみを取得したい場合は、NetworkInterfaceクラスを使用してネットワークインターフェースを列挙し、各インターフェースのアドレスをフィルタリングする必要があります。

JavaでIPアドレスを取得する基本的な方法

Javaでは、InetAddressクラスを使用してIPアドレスを取得することができます。

このクラスは、ホスト名やIPアドレスに関連する情報を提供します。

以下に、基本的な使用方法を示します。

import java.net.InetAddress;
import java.net.UnknownHostException;
public class App {
    public static void main(String[] args) {
        try {
            // ホスト名からIPアドレスを取得
            InetAddress inetAddress = InetAddress.getByName("localhost");
            
            // IPアドレスを表示
            System.out.println("IPアドレス: " + inetAddress.getHostAddress());
        } catch (UnknownHostException e) {
            // ホストが見つからない場合のエラーメッセージ
            System.out.println("ホストが見つかりません: " + e.getMessage());
        }
    }
}
IPアドレス: 127.0.0.1

このコードでは、InetAddress.getByName("localhost")を使用してローカルホストのIPアドレスを取得しています。

取得したIPアドレスは、getHostAddress()メソッドを使って表示されます。

エラーが発生した場合は、UnknownHostExceptionをキャッチしてエラーメッセージを表示します。

IPv4アドレスのみを取得する方法

Javaで取得できるIPアドレスには、IPv4とIPv6の両方がありますが、特定の条件下でIPv4アドレスのみを取得することができます。

以下の方法では、すべてのネットワークインターフェースを調べ、IPv4アドレスをフィルタリングして取得します。

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
public class App {
    public static void main(String[] args) {
        try {
            // ネットワークインターフェースの列挙
            Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
            
            while (networkInterfaces.hasMoreElements()) {
                NetworkInterface networkInterface = networkInterfaces.nextElement();
                
                // 有効なインターフェースのみを対象
                if (networkInterface.isUp()) {
                    // インターフェースに関連するIPアドレスの列挙
                    Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
                    
                    while (inetAddresses.hasMoreElements()) {
                        InetAddress inetAddress = inetAddresses.nextElement();
                        
                        // IPv4アドレスのみを表示
                        if (inetAddress.getAddress().length == 4) {
                            System.out.println("IPv4アドレス: " + inetAddress.getHostAddress());
                        }
                    }
                }
            }
        } catch (SocketException e) {
            // ソケットエラーが発生した場合のエラーメッセージ
            System.out.println("ソケットエラー: " + e.getMessage());
        }
    }
}
IPv4アドレス: 192.168.1.2
IPv4アドレス: 127.0.0.1

このコードでは、NetworkInterface.getNetworkInterfaces()を使用して、すべてのネットワークインターフェースを取得しています。

各インターフェースが有効であるかを確認し、関連するIPアドレスを取得します。

IPv4アドレスは、inetAddress.getAddress().lengthが4であることを確認することでフィルタリングされ、表示されます。

実践例:ローカルホストのIPv4アドレスを取得する

ローカルホストのIPv4アドレスを取得するのは、ネットワークプログラミングやデバッグの際に非常に便利です。

以下のサンプルコードでは、InetAddressクラスを使用してローカルホストのIPv4アドレスを取得し、表示します。

import java.net.InetAddress;
import java.net.UnknownHostException;
public class App {
    public static void main(String[] args) {
        try {
            // ローカルホストのIPアドレスを取得
            InetAddress inetAddress = InetAddress.getLocalHost();
            
            // IPv4アドレスを表示
            if (inetAddress.getAddress().length == 4) {
                System.out.println("ローカルホストのIPv4アドレス: " + inetAddress.getHostAddress());
            } else {
                System.out.println("ローカルホストはIPv4アドレスを持っていません。");
            }
        } catch (UnknownHostException e) {
            // ホストが見つからない場合のエラーメッセージ
            System.out.println("ホストが見つかりません: " + e.getMessage());
        }
    }
}
ローカルホストのIPv4アドレス: 192.168.1.1

このコードでは、InetAddress.getLocalHost()を使用してローカルホストの情報を取得しています。

取得したIPアドレスがIPv4であるかを確認し、表示します。

もしIPv4アドレスが存在しない場合は、その旨のメッセージを表示します。

この方法は、ローカル環境でのネットワーク設定を確認する際に役立ちます。

応用:特定のネットワークインターフェースのIPv4アドレスを取得する

特定のネットワークインターフェースのIPv4アドレスを取得することで、複数のネットワーク接続がある環境でのプログラムの動作を制御できます。

以下のサンプルコードでは、指定したネットワークインターフェースのIPv4アドレスを取得する方法を示します。

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
public class App {
    public static void main(String[] args) {
        String interfaceName = "eth0"; // 取得したいネットワークインターフェース名を指定
        
        try {
            // 指定したネットワークインターフェースを取得
            NetworkInterface networkInterface = NetworkInterface.getByName(interfaceName);
            
            if (networkInterface != null && networkInterface.isUp()) {
                // インターフェースに関連するIPアドレスの列挙
                Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
                
                while (inetAddresses.hasMoreElements()) {
                    InetAddress inetAddress = inetAddresses.nextElement();
                    
                    // IPv4アドレスのみを表示
                    if (inetAddress.getAddress().length == 4) {
                        System.out.println(interfaceName + "のIPv4アドレス: " + inetAddress.getHostAddress());
                    }
                }
            } else {
                System.out.println("指定したネットワークインターフェースは存在しないか、無効です。");
            }
        } catch (SocketException e) {
            // ソケットエラーが発生した場合のエラーメッセージ
            System.out.println("ソケットエラー: " + e.getMessage());
        }
    }
}
eth0のIPv4アドレス: 192.168.1.10

このコードでは、NetworkInterface.getByName(interfaceName)を使用して、指定したネットワークインターフェースの情報を取得しています。

インターフェースが有効であるかを確認し、関連するIPアドレスを取得します。

IPv4アドレスは、inetAddress.getAddress().lengthが4であることを確認することでフィルタリングされ、表示されます。

指定するインターフェース名は、実際の環境に合わせて変更してください。

まとめ

この記事では、Javaを使用してIPアドレスを取得する方法について詳しく解説しました。

特に、IPv4アドレスを取得するための基本的な方法から、特定のネットワークインターフェースに焦点を当てた応用例までを紹介しました。

これを機に、実際のプログラムにおいてネットワーク関連の機能を活用してみてください。

関連記事

Back to top button