Ipv4Util
Ipv4Util是Hutool中用于处理IPv4地址的核心工具类,提供了丰富的IPv4地址处理功能,包括IP地址的解析、转换、验证、CIDR处理等。
# 主要功能
- IP地址解析与转换:IP地址的点分十进制与long类型转换
- IP地址验证:验证IPv4地址的有效性
- CIDR处理:CIDR地址的解析、转换、验证等
- 本地IP地址获取:获取本地IPv4地址
- IP地址范围计算:计算IP地址区间
- 子网掩码处理:子网掩码的转换与验证
- MAC地址获取:获取本地MAC地址
# IP地址解析与转换
# ipv4ToLong(String ip)
将IPv4地址字符串转换为long类型。
long ipLong = Ipv4Util.ipv4ToLong("192.168.1.1");
// 输出: 3232235777
# longToIpv4(long ipLong)
将long类型的IP地址转换为IPv4地址字符串。
String ip = Ipv4Util.longToIpv4(3232235777L);
// 输出: 192.168.1.1
# ipToBytes(String ip)
将IPv4地址字符串转换为字节数组。
byte[] bytes = Ipv4Util.ipToBytes("192.168.1.1");
// 输出: [-64, -88, 1, 1]
# bytesToIp(byte[] bytes)
将字节数组转换为IPv4地址字符串。
byte[] bytes = {-64, -88, 1, 1};
String ip = Ipv4Util.bytesToIp(bytes);
// 输出: 192.168.1.1
# IP地址验证
# isValid(String ip)
验证IPv4地址是否有效。
boolean isValid = Ipv4Util.isValid("192.168.1.1");
// 输出: true
boolean isValid2 = Ipv4Util.isValid("256.168.1.1");
// 输出: false
# isLoopback(String ip)
判断是否为回环地址(127.0.0.1/8)。
boolean isLoopback = Ipv4Util.isLoopback("127.0.0.1");
// 输出: true
boolean isLoopback2 = Ipv4Util.isLoopback("127.100.200.30");
// 输出: true
# isPrivate(String ip)
判断是否为私有IP地址。
boolean isPrivate = Ipv4Util.isPrivate("192.168.1.1");
// 输出: true
boolean isPrivate2 = Ipv4Util.isPrivate("10.0.0.1");
// 输出: true
boolean isPrivate3 = Ipv4Util.isPrivate("172.16.0.1");
// 输出: true
# CIDR处理
# parseCidr(String cidr)
解析CIDR地址,返回包含IP地址和掩码位的数组。
String[] cidrParts = Ipv4Util.parseCidr("192.168.1.0/24");
// 输出: ["192.168.1.0", "24"]
# getCidrStartIp(String cidr)
获取CIDR地址的起始IP。
String startIp = Ipv4Util.getCidrStartIp("192.168.1.0/24");
// 输出: 192.168.1.0
# getCidrEndIp(String cidr)
获取CIDR地址的结束IP。
String endIp = Ipv4Util.getCidrEndIp("192.168.1.0/24");
// 输出: 192.168.1.255
# getCidrMask(String cidr)
获取CIDR地址的子网掩码。
String mask = Ipv4Util.getCidrMask("192.168.1.0/24");
// 输出: 255.255.255.0
# getCidrIps(String cidr)
获取CIDR地址包含的所有IP地址。
List<String> ips = Ipv4Util.getCidrIps("192.168.1.0/30");
// 输出: ["192.168.1.0", "192.168.1.1", "192.168.1.2", "192.168.1.3"]
# 本地IP地址获取
# getLocalhost()
获取本地IPv4地址对象。
Inet4Address localhost = Ipv4Util.getLocalhost();
// 输出: /192.168.1.100
# getLocalhostStr()
获取本地IPv4地址字符串。
String localIp = Ipv4Util.getLocalhostStr();
// 输出: 192.168.1.100
# getLocalHostName()
获取本地主机名称。
String localhostName = Ipv4Util.getLocalHostName();
// 输出: DESKTOP-ABC123
# IP地址范围计算
# getIpRange(String startIp, String endIp)
获取指定IP地址范围内的所有IP地址。
List<String> ips = Ipv4Util.getIpRange("192.168.1.1", "192.168.1.5");
// 输出: ["192.168.1.1", "192.168.1.2", "192.168.1.3", "192.168.1.4", "192.168.1.5"]
# isInRange(String ip, String startIp, String endIp)
判断IP地址是否在指定范围内。
boolean isInRange = Ipv4Util.isInRange("192.168.1.3", "192.168.1.1", "192.168.1.5");
// 输出: true
boolean isInRange2 = Ipv4Util.isInRange("192.168.1.6", "192.168.1.1", "192.168.1.5");
// 输出: false
# 子网掩码处理
# maskToMaskBit(String mask)
将子网掩码转换为掩码位。
int maskBit = Ipv4Util.maskToMaskBit("255.255.255.0");
// 输出: 24
# maskBitToMask(int maskBit)
将掩码位转换为子网掩码。
String mask = Ipv4Util.maskBitToMask(24);
// 输出: 255.255.255.0
# getNetmask(String ip, String mask)
获取网络地址。
String netmask = Ipv4Util.getNetmask("192.168.1.100", "255.255.255.0");
// 输出: 192.168.1.0
# getBroadcastAddress(String ip, String mask)
获取广播地址。
String broadcast = Ipv4Util.getBroadcastAddress("192.168.1.100", "255.255.255.0");
// 输出: 192.168.1.255
# MAC地址获取
# getLocalMacAddress()
获取本地MAC地址。
String mac = Ipv4Util.getLocalMacAddress();
// 输出: 00:00:00:00:00:00(示例)
# getLocalHardwareAddress()
获取本地物理地址(字节数组形式)。
byte[] hardwareAddress = Ipv4Util.getLocalHardwareAddress();
// 输出: [0, 0, 0, 0, 0, 0](示例)
# 注意事项
- IP地址格式:IPv4地址必须是点分十进制格式,如"192.168.1.1"
- CIDR格式:CIDR地址格式为"IP/掩码位",如"192.168.1.0/24"
- 掩码位范围:掩码位的有效范围是1~32
- 性能考虑:获取大量IP地址范围时,应考虑性能问题
- 主机名解析:获取主机名可能会触发反向DNS解析,导致阻塞
- 权限问题:获取MAC地址可能需要管理员权限
# 总结
Ipv4Util提供了丰富的IPv4地址处理功能,涵盖了IP地址的解析、转换、验证、CIDR处理、IP地址范围计算、子网掩码处理和MAC地址获取等多个方面。通过使用Ipv4Util,可以大大简化Java中的IPv4地址处理,提高开发效率。
无论是网络配置、IP地址管理还是网络诊断,Ipv4Util都能提供简洁高效的解决方案。