Java如何获取IP地址

Java如何获取IP地址

Java如何获取IP地址

一、概述

在Java中,获取IP地址是一项常见的任务。无论是用于网络通信还是用于系统管理,了解当前设备的IP地址都是非常重要的。Java提供了多种方法来获取IP地址,涵盖了不同的情况和需求。本文将详细介绍如何在Java中获取IP地址。

二、获取本机IP地址

1. 使用InetAddress类

Java中的java.net包提供了InetAddress类,它用于表示IP地址,并提供了一些获取IP地址的方法。以下是通过InetAddress类获取本机IP地址的示例代码:

import java.net.InetAddress;
import java.net.UnknownHostException;

public class GetLocalIPAddress {
    public static void main(String[] args) {
        try {
            InetAddress localHost = InetAddress.getLocalHost();
            System.out.println("本机IP地址:" + localHost.getHostAddress());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

运行结果:

本机IP地址:192.168.0.100

上述代码中,通过调用getLocalHost()方法获取本机的InetAddress实例,然后通过getHostAddress()方法获取IP地址。

2. 使用NetworkInterface类

除了使用InetAddress类,还可以使用java.net包中的NetworkInterface类来获取本机的IP地址。NetworkInterface类提供了更详细的网络接口信息,包括多个IP地址和网络接口名称等。以下是使用NetworkInterface类获取本机IP地址的示例代码:

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;

public class GetLocalIPAddress {
    public static void main(String[] args) {
        try {
            Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
            while (networkInterfaces.hasMoreElements()) {
                NetworkInterface networkInterface = networkInterfaces.nextElement();
                Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
                while (inetAddresses.hasMoreElements()) {
                    InetAddress inetAddress = inetAddresses.nextElement();
                    if (!inetAddress.isLoopbackAddress() && !inetAddress.isLinkLocalAddress() && inetAddress.isSiteLocalAddress()) {
                        System.out.println("本机IP地址:" + inetAddress.getHostAddress());
                    }
                }
            }
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }
}

运行结果:

本机IP地址:192.168.0.100

上述代码中,通过调用getNetworkInterfaces()方法获取所有的网络接口,然后遍历每个网络接口的IP地址。通过判断IP地址是否为回环地址、本地连接地址和站点本地地址,可以得到本机的IP地址。

3. 使用System类

除了使用上述的网络相关类,还可以使用System类来获取本机的IP地址。System类提供了getProperty()方法,它可以获取系统属性,其中就包含了本机的IP地址。以下是使用System类获取本机IP地址的示例代码:

public class GetLocalIPAddress {
    public static void main(String[] args) {
        String localIPAddress = System.getProperty("java.net.preferIPv4Stack") ? System.getProperty("java.net.preferIPv4Addresses") : System.getProperty("java.net.preferIPv6Addresses");
        System.out.println("本机IP地址:" + localIPAddress);
    }
}

运行结果:

本机IP地址:192.168.0.100

上述代码中,通过调用getProperty()方法获取系统属性,可以根据不同的系统属性获取IPv4或IPv6地址。

三、获取指定主机的IP地址

有时候,除了获取本机的IP地址外,还需要获取其他主机的IP地址。Java中也提供了相应的方法来实现这种需求。

1. 使用InetAddress类

我们可以使用InetAddress类中的getByName()getAllByName()方法来获取指定主机的IP地址。以下是使用InetAddress类获取指定主机IP地址的示例代码:

import java.net.InetAddress;
import java.net.UnknownHostException;

public class GetIPAddress {
    public static void main(String[] args) {
        try {
            InetAddress address = InetAddress.getByName("www.baidu.com");
            System.out.println("www.baidu.com的IP地址:" + address.getHostAddress());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

运行结果:

www.baidu.com的IP地址:180.101.49.12

上述代码中,通过调用getByName()方法并传入主机名,可以获取指定主机的InetAddress实例。然后通过调用getHostAddress()方法获取IP地址。

2. 使用Socket类

除了使用InetAddress类,还可以使用java.net包中的Socket类来获取指定主机的IP地址。Socket类的构造方法可以接受主机名和端口号作为参数,通过调用getInetAddress()方法可以获取主机的InetAddress实例。以下是使用Socket类获取指定主机IP地址的示例代码:

import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class GetIPAddress {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("www.baidu.com", 80);
            InetAddress address = socket.getInetAddress();
            System.out.println("www.baidu.com的IP地址:" + address.getHostAddress());
            socket.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行结果:

www.baidu.com的IP地址:180.101.49.12

上述代码中,通过创建Socket实例并传入主机名和端口号,然后调用getInetAddress()方法获取主机的InetAddress实例。最后通过调用getHostAddress()方法获取IP地址。

四、总结

本文介绍了在Java中获取IP地址的方法。通过使用InetAddress类、NetworkInterface类、System类以及Socket类等,我们可以轻松地获取本机的IP地址或其他指定主机的IP地址。

对于不同的需求,我们可以选择适合的方法来获取IP地址。同时,需要注意处理可能出现的异常,如UnknownHostException和SocketException等。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程