一、解析域名
获取本机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代码如下:
Enumeration allNetInterfaces = 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地址。
原创文章,作者:WVJS,如若转载,请注明出处:https://www.506064.com/n/140352.html
微信扫一扫
支付宝扫一扫