public final class NetMask extends Object
The constructor takes a string as an argument which represents a netmask, as
per the CIDR notation -- whether this netmask be IPv4 or IPv6. It then
extracts the network address (before the /) and the CIDR prefix (after the
/), and tells through the #matches() method whether a candidate
InetAddress
object fits in the recorded range.
As byte arrays as returned by InetAddress.getByName()
are always
in network byte order, finding a match is therefore as simple as testing
whether the n first bits (where n is the CIDR) are the same in both byte
arrays (the one of the network address and the one of the candidate address).
We do that by first doing byte comparisons, then testing the last bits if any
(that is, if the remainder of the integer division of the CIDR by 8 is not
0).
As a bonus, if no '/' is found in the input, it is assumed that an exact address match is required.
Modifier and Type | Method and Description |
---|---|
boolean |
matches(InetAddress addr)
Test if a given address matches this netmask.
|
boolean |
matches(InetAddress addr,
boolean checkedPort)
Test if a given address matches this netmask.
|
boolean |
matches(InetAddress addr,
int port)
Test if a given address and port matches this netmask.
|
String |
toString() |
public NetMask(String input)
input
- the CIDR netmaskIllegalArgumentException
- if the netmask is not correct (invalid
address specification, malformed CIDR prefix, etc)public boolean matches(InetAddress addr, int port)
addr
- The InetAddress
to testport
- The port to testpublic boolean matches(InetAddress addr)
addr
- The InetAddress
to testpublic boolean matches(InetAddress addr, boolean checkedPort)
addr
- The InetAddress
to testcheckedPort
- Indicates, whether we already checked the portCopyright © 2000-2021 Apache Software Foundation. All Rights Reserved.