验证IP地址(带掩码)

Jos*_*h K 11 java grails groovy

我有ip地址和一个掩码,如10.1.1.1/32.我想检查是否10.1.1.1在该范围内.是否有可以执行此操作的库或实用程序,或者我是否需要自己编写内容?

Joh*_*ica 28

首先,您需要将IP地址转换为平面int,这将更容易使用:

String       s = "10.1.1.99";
Inet4Address a = (Inet4Address) InetAddress.getByName(s);
byte[]       b = a.getAddress();
int          i = ((b[0] & 0xFF) << 24) |
                 ((b[1] & 0xFF) << 16) |
                 ((b[2] & 0xFF) << 8)  |
                 ((b[3] & 0xFF) << 0);
Run Code Online (Sandbox Code Playgroud)

一旦将IP地址作为普通ints,就可以执行一些算术来执行检查:

int subnet = 0x0A010100;   // 10.1.1.0/24
int bits   = 24;
int ip     = 0x0A010199;   // 10.1.1.99

// Create bitmask to clear out irrelevant bits. For 10.1.1.0/24 this is
// 0xFFFFFF00 -- the first 24 bits are 1's, the last 8 are 0's.
//
//     -1        == 0xFFFFFFFF
//     32 - bits == 8
//     -1 << 8   == 0xFFFFFF00
mask = -1 << (32 - bits)

if ((subnet & mask) == (ip & mask)) {
    // IP address is in the subnet.
}
Run Code Online (Sandbox Code Playgroud)