一、解析域名
获取本机IP的第一种方法是通过解析本机的主机名(hostname)获取IP地址。这种方法通过获取主机名,然后通过域名解析获取IP地址。
Java代码如下:
InetAddress addr = InetAddress.getLocalHost(); String ip = addr.getHostAddress(); System.out.println("Local HostAddress:" + ip);
这段代码使用InetAddress的getLocalHost方法获取本机的IP地址,并进行输出。
二、NetworkInterface获取
获取本机IP的第二种方法是通过NetworkInterface获取。使用NetworkInterface可以获取本机所有的网络接口信息,遍历每个网络接口,再获取其对应IP地址。
Java代码如下:
EnumerationallNetInterfaces = NetworkInterface.getNetworkInterfaces(); InetAddress ip = null; while (allNetInterfaces.hasMoreElements()) { NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement(); System.out.println(netInterface.getName() + " interface:"); Enumeration addresses = netInterface.getInetAddresses(); while (addresses.hasMoreElements()) { ip = addresses.nextElement(); if (ip != null && ip instanceof Inet4Address) { System.out.println("IP:" + ip.getHostAddress()); } } }
这段代码使用NetworkInterface的getNetworkInterfaces方法获取本机的所有网络接口信息,遍历每个网络接口信息,再获取其对应的IP地址。
三、使用正则表达式
获取本机IP的第三种方法是通过Socket获取,但是这种方法需要依赖一个服务器,不够灵活方便。我们可以使用正则表达式提取本机IP地址。
Java代码如下:
public static String getLocalIPByRegex() throws SocketException { String ip = ""; //获取所有网络接口 Enumeration netInterfaces = NetworkInterface.getNetworkInterfaces(); while(netInterfaces.hasMoreElements()) { NetworkInterface ni = (NetworkInterface)netInterfaces.nextElement(); //获取对应的网络地址 Enumeration addressEnum = ni.getInetAddresses(); while(addressEnum.hasMoreElements()) { InetAddress inetAddress = (InetAddress)addressEnum.nextElement(); //正则表达式判断IP地址是否合法 if(inetAddress.getHostAddress().matches("^\\d{1,3}(\\.\\d{1,3}){3}$")) { //判断是否为127.0.0.1,如果是,继续循环 if(inetAddress.isLoopbackAddress()) { continue; } //获取IP地址 ip += inetAddress.getHostAddress() + ";"; } } } return ip.substring(0, ip.lastIndexOf(";")); }
这段代码使用正则表达式判断获取到的IP地址是否合法,判断是否为本机的回送地址127.0.0.1,如果是,则继续循环,否则获取IP地址。
四、总结
通过上述三种方法,我们可以轻松获取本机的IP地址。
通过解析域名的方式获取IP地址,代码更加简洁,但是需要保证主机名可解析。
通过NetworkInterface方式获取IP地址,可以获取本机所有的IP地址,包括IPv4、IPv6,但是需要循环遍历所有的网络接口。
通过正则表达式方式获取IP地址,使用简单方便,但是不够灵活,只能获取ipv4地址。