0%

ip存储

ip存储

ipv4

ipv4使用long类型进行存储即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public static long ipToLong(String ipString) throws NumberFormatException {
long result = 0;
String[] terms = ipString.split("\\.");
if (terms.length != 4) {
return -1;
}
result += Long.parseLong(terms[0]) << 24;
result += Long.parseLong(terms[1]) << 16;
result += Long.parseLong(terms[2]) << 8;
result += Long.parseLong(terms[3]);
return result;
}

public static String longToIp(long ipLong) {
return (ipLong >>> 24) + "." +
((ipLong >>> 16) & 0xFF) + "." +
((ipLong >>> 8) & 0xFF) + "." +
(ipLong & 0xFF);
}

public static void main(String[] args) {
long result = ipToLong("255.255.255.255");
System.out.println(result);
System.out.println(longToIp(result));
}

ipv6

ipv6使用long类型是存储不了的,需要使用BigInteger

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static BigInteger ip6ToNumber(String ipv6Address) throws NumberFormatException {
try{
InetAddress inetAddress = InetAddress.getByName(ipv6Address);
String hostAddress = inetAddress.getHostAddress();

StringBuilder decimalString = new StringBuilder();
String[] split = hostAddress.split(":");
for(String s : split){
// 十六进制转为十进制
int i = Integer.parseInt(s, 16);
// 不足五位拿0补齐
decimalString.append(String.format("%05d",i));
}

return new BigInteger(decimalString.toString());
} catch (UnknownHostException exception){
LOGGER.error("ipv6转换失败 {}", ipv6Address, exception);
return BigInteger.ZERO;
}

}

欢迎关注我的其它发布渠道