最近我在公司接到了一个任务,我必须创建一个这样的函数:
boolean addrMatch(String IP, String netMask);
这与路由无关。我们有一个将使用此功能的网络服务。 IP参数因所有请求而异,netMask参数由用户提供。该函数必须告知实际IP地址是否与提供的网络掩码匹配。这类似于用户告诉我们的系统仅将公共互联网上的请求提供给特定的IP地址子集,而不是所有IP地址。 我的网络相关知识远未完成,所以我对这个主题进行了深入的搜索,但是我并没有走得太远。 我所知道的(或被告知):所有这两个参数都是xxx.xxx.xxx.xxx表示法中的有效IP地址或网络掩码。我必须在它们上做一个按位AND(显然在将它们转换为BitSet或至少是byte []数组之后)。但我想这不是完整的算法。 所以我的问题是:将IP地址与网络掩码匹配的正确算法是什么?
ps。:我在Java工作,但我需要通用方法。
答案 0 :(得分:0)
网络掩码只是一个位掩码。基本上,如果address & netmask != 0
地址位于由网络掩码表示的子网中。您必须应对的实现细节是字节而不是位,以及不同的字节数,具体取决于您是使用IPv4还是IPv6。但它基本上是微不足道的。