实现Java IP和子网掩码获取当前网段所有IP的步骤
流程图
flowchart TD
A(开始)
B(获取本机IP和子网掩码)
C(计算网段起始IP)
D(计算网段结束IP)
E(获取网段所有IP)
F(显示网段所有IP)
G(结束)
A-->B
B-->C
C-->D
D-->E
E-->F
F-->G
步骤说明
- 开始
- 获取本机IP和子网掩码
- 计算网段起始IP:通过将IP地址和子网掩码进行位运算,得到网段起始IP的数值表示。
- 计算网段结束IP:通过将网段起始IP的数值表示加上子网内可用IP数量减一,得到网段结束IP的数值表示。
- 获取网段所有IP:对于网段起始IP和结束IP之间的每一个IP地址数值表示,将其转换为IP地址字符串表示。
- 显示网段所有IP
- 结束
代码实现
import java.net.InetAddress;
import java.net.UnknownHostException;
public class IPUtil {
public static void main(String[] args) {
String ip = getLocalIP();
String subnetMask = getSubnetMask();
String[] segmentIPs = getAllIPsInSegment(ip, subnetMask);
System.out.println("当前网段所有IP地址:");
for (String segmentIP : segmentIPs) {
System.out.println(segmentIP);
}
}
/**
* 获取本机IP地址
*
* @return IP地址字符串
*/
public static String getLocalIP() {
try {
return InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
e.printStackTrace();
}
return null;
}
/**
* 获取子网掩码
*
* @return 子网掩码字符串
*/
public static String getSubnetMask() {
try {
return InetAddress.getLocalHost().getAddress().toString();
} catch (UnknownHostException e) {
e.printStackTrace();
}
return null;
}
/**
* 获取当前网段所有IP地址
*
* @param ip 本机IP地址
* @param subnetMask 子网掩码
* @return 网段所有IP地址数组
*/
public static String[] getAllIPsInSegment(String ip, String subnetMask) {
int ipInt = ipStrToInt(ip);
int maskInt = ipStrToInt(subnetMask);
int segmentStart = ipInt & maskInt;
int segmentEnd = segmentStart + (~maskInt) - 1;
String[] segmentIPs = new String[segmentEnd - segmentStart + 1];
for (int i = 0; i < segmentIPs.length; i++) {
segmentIPs[i] = intToIpStr(segmentStart + i);
}
return segmentIPs;
}
/**
* IP地址字符串转换为int表示
*
* @param ip IP地址字符串
* @return IP地址int表示
*/
public static int ipStrToInt(String ip) {
String[] ipArray = ip.split("\\.");
int[] ipIntArray = new int[4];
for (int i = 0; i < 4; i++) {
ipIntArray[i] = Integer.parseInt(ipArray[i]);
}
return (ipIntArray[0] << 24) | (ipIntArray[1] << 16) | (ipIntArray[2] << 8) | ipIntArray[3];
}
/**
* IP地址int表示转换为字符串
*
* @param ipInt IP地址int表示
* @return IP地址字符串
*/
public static String intToIpStr(int ipInt) {
StringBuilder ipBuilder = new StringBuilder();
ipBuilder.append((ipInt >>> 24) & 0xFF).append(".");
ipBuilder.append((ipInt >>> 16) & 0xFF).append(".");
ipBuilder.append((ipInt >>> 8) & 0xFF).append(".");
ipBuilder.append(ipInt & 0xFF);
return ipBuilder.toString();
}
}
代码说明
getLocalIP()
方法获取本机IP地址,通过InetAddress.getLocalHost().getHostAddress()
实现。
getSubnetMask()
方法获取子网掩码,通过InetAddress.getLocalHost().getAddress().toString()
实现。
ipStrToInt()
方法将IP地址字符串转换为int表示,通过将每个IP地址段转换为整数,然后进行位运算实现