Java 将公共IP地址与用户提供的网络掩码匹配
最近,我在公司接到一项任务,我必须创建如下功能:Java 将公共IP地址与用户提供的网络掩码匹配,java,networking,ip,subnet,Java,Networking,Ip,Subnet,最近,我在公司接到一项任务,我必须创建如下功能: boolean addrMatch(String IP, String netMask); 这与路由无关。我们有一个使用此功能的网络服务。IP参数因所有请求而异,netMask参数由用户提供。该函数必须说明实际IP地址是否与提供的网络掩码匹配。这有点像用户告诉我们的系统只向特定IP地址子集提供公共internet上的请求,而不是所有IP地址。 我的网络相关知识还远未完成,所以我对这个话题做了深入的研究,但没有走多远。 我所知道的或被告知的:所有
boolean addrMatch(String IP, String netMask);
这与路由无关。我们有一个使用此功能的网络服务。IP参数因所有请求而异,netMask参数由用户提供。该函数必须说明实际IP地址是否与提供的网络掩码匹配。这有点像用户告诉我们的系统只向特定IP地址子集提供公共internet上的请求,而不是所有IP地址。
我的网络相关知识还远未完成,所以我对这个话题做了深入的研究,但没有走多远。
我所知道的或被告知的:所有这两个参数都是有效的IP地址或xxx.xxx.xxx符号中的网络掩码。在将它们转换为位集或至少字节[]数组之后,我必须对它们进行按位AND运算。但我想这不是完整的算法。
所以我的问题是:匹配IP地址和网络掩码的正确算法是什么
注:我在用Java,但我需要通用方法。网络掩码只是一个位掩码。基本上如果地址和网络掩码!=0该地址位于由网络掩码表示的子网中。您必须处理的实现细节是字节而不是位,以及根据您使用的是IPv4还是IPv6而变化的字节数。但它基本上很简单。我将IP和掩码转换为字节[]数组,并执行res[I]=IP[I]&mask[I]。结果包含4个整数。如果结果不包含任何零,则IP与掩码匹配,但如果至少包含一个零,则IP不能位于掩码表示的子网中?抱歉问了一些基本问题:@gyabraham如果任何位不为零,则匹配。