Fixed bit masking for network range checks (this affected isPrivate). Added unit tests
parent
b3aea5960a
commit
6f54f881f5
|
@ -581,10 +581,6 @@ object IPv4 {
|
|||
return pairs
|
||||
}
|
||||
|
||||
|
||||
/* Mask to convert unsigned int to a long (i.e. keep 32 bits) */
|
||||
private const val UNSIGNED_INT_MASK = 0x0FFFFFFFFL
|
||||
|
||||
/**
|
||||
* Check if the IP address is in the range of a specific IP/CIDR
|
||||
*
|
||||
|
@ -596,6 +592,7 @@ object IPv4 {
|
|||
*
|
||||
* @return true if it is in range
|
||||
*/
|
||||
@ExperimentalUnsignedTypes
|
||||
fun isInRange(address: Int, networkAddress: Int, networkPrefix: Int): Boolean {
|
||||
// System.err.println(" ip: " + IP.toString(address));
|
||||
// System.err.println(" networkAddress: " + IP.toString(networkAddress));
|
||||
|
@ -607,15 +604,15 @@ object IPv4 {
|
|||
val netmask = ((1 shl 32 - networkPrefix) - 1).inv()
|
||||
|
||||
// Calculate base network address
|
||||
val network = (networkAddress and netmask and UNSIGNED_INT_MASK.toInt()).toLong()
|
||||
// System.err.println(" network " + IP.toString(network));
|
||||
val network = (networkAddress and netmask).toUInt()
|
||||
// System.err.println(" network " + IPv4.toString(network.toInt()))
|
||||
|
||||
// Calculate broadcast address
|
||||
val broadcast = network or netmask.inv().toLong() and UNSIGNED_INT_MASK
|
||||
// System.err.println(" broadcast " + IP.toString(broadcast));
|
||||
val broadcast = network or netmask.inv().toUInt()
|
||||
// System.err.println(" broadcast " + IPv4.toString(broadcast.toInt()))
|
||||
|
||||
val addressLong = (address and UNSIGNED_INT_MASK.toInt()).toLong()
|
||||
return addressLong in network..broadcast
|
||||
// val addressLong = (address.toLong() and UNSIGNED_INT_MASK)
|
||||
return address.toUInt() in network..broadcast
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -745,6 +745,14 @@ class NetUtilTest {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testIsPrivate() {
|
||||
assertTrue(IPv4.isPrivate("192.168.23.102"))
|
||||
assertTrue(IPv4.isPrivate("10.10.234.102"))
|
||||
assertTrue(IPv4.isPrivate("172.16.45.13"))
|
||||
assertFalse(IPv4.isPrivate("72.66.83.240"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testIp4Range() {
|
||||
assertTrue("", IPv4.isInRange(IPv4.toInt("10.10.10.5"), IPv4.toInt("10.10.10.10"), 24))
|
||||
|
|
Loading…
Reference in New Issue