java判斷某個ip是否在一個網段內 ip/mask IP+掩碼

來源:互聯網
上載者:User

java判斷某個ip是否在一個網段內

計算在  ip/mask共有多少個IP地址的方式:  2的 (32-mask)的次方
例如:192.168.3.4/30   裡共有 2的 (32 - 30) 的次方個IP


java判斷某個ip是否在一個網段內 ip/mask  IP+掩碼
package com.ip;  
  
public class IpTest {  
    public static void main(String[] args) {  
        System.out.println(isInRange("192.168.1.127", "192.168.1.64/26"));  
        System.out.println(isInRange("192.168.1.2", "192.168.0.0/23"));  
        System.out.println(isInRange("192.168.0.1", "192.168.0.0/24"));  
        System.out.println(isInRange("192.168.0.0", "192.168.0.0/32"));  
    }  
    public static boolean isInRange(String ip, String cidr) {  
        String[] ips = ip.split("\\.");  
        int ipAddr = (Integer.parseInt(ips[0]) << 24)  
                | (Integer.parseInt(ips[1]) << 16)  
                | (Integer.parseInt(ips[2]) << 8) | Integer.parseInt(ips[3]);  
        int type = Integer.parseInt(cidr.replaceAll(".*/", ""));  
        int mask = 0xFFFFFFFF << (32 - type);  
        String cidrIp = cidr.replaceAll("/.*", "");  
        String[] cidrIps = cidrIp.split("\\.");  
        int cidrIpAddr = (Integer.parseInt(cidrIps[0]) << 24)  
                | (Integer.parseInt(cidrIps[1]) << 16)  
                | (Integer.parseInt(cidrIps[2]) << 8)  
                | Integer.parseInt(cidrIps[3]);  
  
        return (ipAddr & mask) == (cidrIpAddr & mask);  
    }  
}  






java 怎樣根據IP來判斷其是否存在某個網段內?0
例如網段: 
192.168.2.0/24 
192.168.1.0/24 
192.168.34.0/26 
192.168.33.0/26 


String[] subnetsMasks = { ... };  
Collection<SubnetInfo> subnets = new ArrayList<SubnetInfo>();  
for (String subnetMask : subnetsMasks) {  
    subnets.add(new SubnetUtils(subnetMask).getInfo());  
}  
  
String ipAddress = ...;  
for (SubnetInfo subnet : subnets) {  
    if (subnet.isInRange(ipAddress)) {  
        System.out.println("IP Address " + ipAddress + " is in range " + subnet.getCidrSignature());  
    }  
}  








/** 
     * 判斷ip是否在指定網段中 
     * @author dh 
     * @param iparea 
     * @param ip 
     * @return boolean 
     */  
    public static boolean ipIsInNet(String iparea, String ip) {  
        if (iparea == null)  
            throw new NullPointerException("IP段不可為空。");  
        if (ip == null)  
            throw new NullPointerException("IP不可為空。");  
        iparea = iparea.trim();  
        ip = ip.trim();  
        final String REGX_IP = "((25[0-5]|2[0-4]//d|1//d{2}|[1-9]//d|//d)//.){3}(25[0-5]|2[0-4]//d|1//d{2}|[1-9]//d|//d)";  
        final String REGX_IPB = REGX_IP + "//-" + REGX_IP;  
        if (!iparea.matches(REGX_IPB) || !ip.matches(REGX_IP))  
            return false;  
        int idx = iparea.indexOf('-');  
        String[] sips = iparea.substring(0, idx).split("//.");  
        String[] sipe = iparea.substring(idx + 1).split("//.");  
        String[] sipt = ip.split("//.");  
        long ips = 0L, ipe = 0L, ipt = 0L;  
        for (int i = 0; i < 4; ++i) {  
            ips = ips << 8 | Integer.parseInt(sips[i]);  
            ipe = ipe << 8 | Integer.parseInt(sipe[i]);  
            ipt = ipt << 8 | Integer.parseInt(sipt[i]);  
        }  
        if (ips > ipe) {  
            long t = ips;  
            ips = ipe;  
            ipe = t;  
        }  
        return ips <= ipt && ipt <= ipe;  
    }  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.