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;
}
}