IP地址相关操作

Ip地址操作的工具类总结:

package test;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.StringTokenizer;

public class JGxluIPAddress {
	/**
     * IP地址每个字段的最大值。
     */
    public static int MAX_VALUE = 255;
 
    /**
     * IP地址每个字段的最小值。
     */
    public static int MIN_VALUE = 0;
    
    /**
     * ipv4的4个int的表示
     */
    protected int address[];
    
    /**
     * ipv4的整数表示
     */
    private long ipAddr = -1;
 
    /**
     * 构造函数。
     *
     * @param s IP地址字符串。
     */
    public JGxluIPAddress(String s)
    {
        address = new int[4];
        parseStringIP(s);
        parseToLong();
    }
 
    /**
     * 构造函数。
     *
     * @param inetaddress InetAddress对象。
     */
    public JGxluIPAddress(InetAddress inetaddress)
    {
        address = new int[4];
        parseStringIP(inetaddress.getHostAddress());
        parseToLong();
    }
 
    /**
     * 构造函数,数组对应IP地址的字段顺序为从左到右。
     */
    public JGxluIPAddress(int ai[])
    {
        address = new int[4];
        int i = Math.min(4, ai.length);
        for(int j = 0; j < i; j++)
            address[j] = ai[j];
            
        parseToLong();
 
    }
    
    /**
     * 构造函数。
     *
     * @param l 长整型
     */
    public JGxluIPAddress(long l)
    {
        ipAddr = l;
        address = new int[4];
        
        address[3] = (int)( (l & 0xff));
        address[2] = (int)( (l & 0xff00)>>8);
        address[1] = (int)( (l & 0xff0000)>>16);
        address[0] = (int)( (l & 0xff000000)>>24);
 
    }
 
    /**
     * 获取用数组表示的IP地址。
     */
    public int[] getIPAddress()
    {
        return address;
    }
 
    public InetAddress getInetAddress()
    {
        InetAddress inetaddress = null;
        try
        {
            inetaddress = InetAddress.getByName(toString());
        }
        catch(UnknownHostException _ex) { }
        return inetaddress;
    }
 
    protected void parseStringIP(String s)
    {
    	//处理逻辑:判断ip地址是否合法split后是否为4组,每组的范围在0-255之间
    	//       然后给 address[0] address[1] address[2] address[3] 这4个数组赋值
        
    }
    
    /**
     * 把int[4]转化为long。
     * 注意:不能省略 ipAddr = (((long)address[0])<<24) 中的类型转化
     */    
    private void parseToLong()
    {
        ipAddr = 0;
        
        ipAddr = (((long)address[0])<<24)
        | address[1]<<16
        | address[2]<<8
        | address[3];
    }
 
    /**
     * 返回long型的ip地址
     */
    public long getLongAddress()
    {
        return ipAddr;
    }
    
    /**
     * 根据输入的掩码位数返回掩码
     * 如输入8,返回"255.0.0.0"的对象
     * @param n 掩码的位数
     * @return JGxluIPAddress
     */
    public static JGxluIPAddress getMask(int n)
    {
        long v = 0;
        
        for(int i=0;i<n;i++)
        {
            v += (1L<<(32-i-1));
        }
        
        return new JGxluIPAddress(v);
    }
    
    /**
     * 根据输入的掩码返回掩码位数
     * 如输入“255.0.0.0"的对象,返回8
     * @param ip
     * @return 掩码位数
     */
    public static int getMaskLength(JGxluIPAddress ip)
    {
        long v = ip.getLongAddress();
        
        int i = 31;
        for(;i>0;i--)
        {
            if(((1L<<i) & v)==0)
                break;
        }
        return 31-i;
    }
    
    
    
    //判断ip地址是否合法
    public static int getMaskLength(String ip)
    {
        long v = (new JGxluIPAddress(ip)).getLongAddress();
        
        int i = 31;
        for(;i>0;i--)
        {
            if(((1L<<i) & v)==0)
                break;
        }
        return 31-i;
    }

    public String toString()
    {
        return address[0] + "." + address[1] + "." + address[2] + "." + address[3];
    }
}

另外,js判断ip地址合法的流程为

var reSpaceCheck = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;  
if (!reSpaceCheck.test(licIp))  {
alert("IP地址不正确!");
return false;
}
if(reSpaceCheck.test(licIp)){
if (!(RegExp.$1<=255 && RegExp.$1>=0  && RegExp.$2<=255 && RegExp.$2>=0   && RegExp.$3<=255 && RegExp.$3>=0   && RegExp.$4<=255 && RegExp.$4>=0))  
        {  
alert("IP地址不正确!");
            return false;
        }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值