Java中获取IP地址的方法

IP地址是指互联网协议地址,是用于给连接在网络上的设备或计算机分配的一串数字标识符。在Java中,获取IP地址是一项非常常见且必需的任务。下面将会介绍3种获取IP地址的方法。

通过InetAddress类获取IP地址

Java中,可以通过InetAddress类获取IP地址。该类是Java中用于表示IP地址的类,提供了一些常用的获取IP地址的方法,例如getByName()方法和getLocalHost()方法。其中,getByName()方法接受一个主机名或一个IP地址的字符串,返回一个InetAddress对象。getLocalHost()方法返回一个表示本地主机的InetAddress对象。

示例代码:

```java import java.net.InetAddress; public class GetIPByInetAddress { public static void main(String[] args) throws Exception { InetAddress addr = InetAddress.getByName("www.baidu.com"); System.out.println("IP地址:" + addr.getHostAddress()); addr = InetAddress.getLocalHost(); System.out.println("本地IP地址:" + addr.getHostAddress()); } } ```

通过NetworkInterface类获取IP地址

另一个获取IP地址的方法是通过NetworkInterface类。该类代表一个网络接口,例如一个网卡。可以通过该类的getNetworkInterfaces()方法获取计算机上所有的网络接口。可以使用getInetAddresses()方法获取每个接口的IPv4和IPv6地址。接下来,我们可以通过筛选出IPv4地址并格式化返回一个IP地址。

示例代码:

```java import java.net.InetAddress; import java.net.NetworkInterface; import java.util.Enumeration; public class GetIPByNetworkInterface { public static void main(String[] args) throws Exception { Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces(); while (networkInterfaces.hasMoreElements()) { NetworkInterface ni = networkInterfaces.nextElement(); Enumeration inetAddresses = ni.getInetAddresses(); while (inetAddresses.hasMoreElements()) { InetAddress inetAddress = inetAddresses.nextElement(); if (!inetAddress.isLoopbackAddress() && inetAddress.getHostAddress().contains(":") == false) { System.out.println("IP地址:" + inetAddress.getHostAddress()); } } } } } ```

通过HttpServletRequest类获取IP地址

在Java Web应用程序中,可以通过HttpServletRequest类获取客户端的IP地址。我们可以先获取HttpServletRequest对象,然后使用getRemoteAddr()方法获取客户端IP地址。

示例代码:

```java import javax.servlet.http.HttpServletRequest; public class GetIPByHttpServletRequest { public String getIpAddress(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; } } ```

结论

在Java中,我们可以使用多种方法来获取IP地址。使用哪个方法取决于应用程序的类型和需求。如果应用程序是Web应用程序,那么使用HttpServletRequest类是最好的方法。如果应用程序是一个客户端程序,那么使用InetAddress类或NetworkInterface类可能更为适合。