一、解析域名
獲取本機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-hant/n/140352.html