java实现判断IP在106.91.0.0-106.91.255.255网段范围内

要判断一个 IP 地址是否在特定的网段范围内,可以将 IP 地址和网段起始与结束的 IP 地址都转换为整数,然后进行比较。以下是一个用 Java 实现的示例代码,用于判断给定的 IP 地址是否在 106.91.0.0106.91.255.255 网段范围内。

实现步骤

  1. 将 IP 地址转换为整数:IP 地址可以看作是一个 32 位的整数。每个段(如 106)占用 8 位,因此整个 IP 地址可以表示为一个 32 位整数。

  2. 比较整数值:将 IP 地址的整数值与网段起始和结束的整数值进行比较。

代码实现

import java.net.InetAddress;
import java.net.UnknownHostException;

public class IpRangeChecker {

    public static void main(String[] args) {
        String ipToCheck = "106.91.50.100"; // 要检查的IP地址
        String startIp = "106.91.0.0";      // 网段起始IP
        String endIp = "106.91.255.255";    // 网段结束IP

        try {
            boolean isInRange = isIpInRange(ipToCheck, startIp, endIp);
            System.out.println("IP " + ipToCheck + " 是否在范围内: " + isInRange);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }

    public static boolean isIpInRange(String ip, String startIp, String endIp) throws UnknownHostException {
        long ipToCheck = ipToLong(InetAddress.getByName(ip));
        long start = ipToLong(InetAddress.getByName(startIp));
        long end = ipToLong(InetAddress.getByName(endIp));

        return ipToCheck >= start && ipToCheck <= end;
    }

    // 将IP地址转换为整数
    public static long ipToLong(InetAddress ip) {
        byte[] octets = ip.getAddress();
        long result = 0;
        for (byte octet : octets) {
            result <<= 8;
            result |= octet & 0xFF;
        }
        return result;
    }
}

代码解释

  1. ipToLong 方法:将 InetAddress 转换为一个 32 位的整数表示。这个整数表示 IP 地址的实际值,使得我们可以对其进行数值比较。

  2. isIpInRange 方法:将要检查的 IP 地址、起始 IP 地址和结束 IP 地址都转换为整数,然后判断该 IP 地址是否在范围内。

  3. InetAddress.getByName():用于将字符串形式的 IP 地址转换为 InetAddress 对象。

运行结果

如果你运行以上代码,并将 ipToCheck 设为 106.91.50.100,输出将是:

IP 106.91.50.100 是否在范围内: true

总结

  • 将 IP 地址转换为整数后,可以轻松判断 IP 地址是否在某个范围内。
  • 这种方法可以用于任何 IPv4 地址的范围判断,且代码逻辑简单、易于理解。

a. 尝试扩展代码,使其支持多个网段的范围检查。

b. 了解如何处理 IPv6 地址的范围判断。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值