Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将公共IP地址与用户提供的网络掩码匹配_Java_Networking_Ip_Subnet - Fatal编程技术网

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如果任何位不为零,则匹配。