【问题标题】:Match public IP addresses with user-supplied netmasks将公共 IP 地址与用户提供的网络掩码匹配
【发布时间】:2012-08-16 14:48:21
【问题描述】:

最近我在公司接到了一项任务,我必须创建一个这样的函数:

boolean addrMatch(String IP, String netMask);

这与路由无关。我们有一个网络服务会使用这个功能。 IP 参数因所有请求而异,netMask 参数由用户提供。该函数必须告知实际 IP 地址是否与提供的网络掩码匹配。这就像用户告诉我们的系统仅将公共互联网上的请求提供给特定的 IP 地址子集,而不是全部。 我的网络相关知识还远未完成,所以我对该主题进行了深入搜索,但我并没有走得太远。 我知道(或被告知):所有两个参数都是 xxx.xxx.xxx.xxx 表示法的有效 IP 地址或网络掩码。我必须对它们进行按位与(显然是在将它们转换为 BitSet 或至少 byte[] 数组之后)。但我想这不是完整的算法。 所以我的问题是:将 IP 地址与网络掩码匹配的正确算法是什么?

ps.:我正在使用 Java,但我需要泛型方法。

【问题讨论】:

    标签: java networking ip subnet


    【解决方案1】:

    网络掩码只是一个位掩码。基本上,如果address & netmask != 0 地址位于网络掩码表示的子网中。您必须处理的实现细节是字节而不是位,并且字节数取决于您使用的是 IPv4 还是 IPv6。但这基本上是微不足道的。

    【讨论】:

    • 我将 IP 和掩码转换为 byte[] 数组并做了 res[i] = ip[i] & mask[i]。结果包含 4 个 int 数字。如果结果不包含任何零,则 IP 与掩码匹配,但如果包含至少一个零,则 IP 不能在掩码表示的子网中?对不起,基本问题:)
    • @gyabraham 如果任何位不为零,则匹配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    相关资源
    最近更新 更多