一、解析域名
獲取本機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/zh-tw/n/140352.html
微信掃一掃
支付寶掃一掃