他の2つのIPの範囲内にあるIPに応じてtrue/falseを返すことができるようにしたい。
例えば:
ip 192.200.3.0
range from 192.200.0.0
range to 192.255.0.0
結果はtrueになります。
その他の例:
assert 192.200.1.0 == true
assert 192.199.1.1 == false
assert 197.200.1.0 == false
範囲を確認する最も簡単な方法は、おそらくIPアドレスを32ビット整数に変換してから、整数を比較することです。
_public class Example {
public static long ipToLong(InetAddress ip) {
byte[] octets = ip.getAddress();
long result = 0;
for (byte octet : octets) {
result <<= 8;
result |= octet & 0xff;
}
return result;
}
public static void main(String[] args) throws UnknownHostException {
long ipLo = ipToLong(InetAddress.getByName("192.200.0.0"));
long ipHi = ipToLong(InetAddress.getByName("192.255.0.0"));
long ipToTest = ipToLong(InetAddress.getByName("192.200.3.0"));
System.out.println(ipToTest >= ipLo && ipToTest <= ipHi);
}
}
_
InetAddress.getByName()
ではなく、DNSルックアップの可能性を回避する InetAddresses ヘルパークラスを含むGuavaライブラリを確認することをお勧めします。