问题是这样的,输入一个IP地址,先判断一下该IP是否是合法的IP地址,然后再判断该IP地址是否在一个相应的IP段内
开始IP为beginIp,结束IP为endIp,用户输入IP为userIp,通过这样一个方法进行判断用户IP是否合法,并在该IP段内:
如下:
public boolean ipExist(String beginIp,String endIp,String userIp){}
代码越完整越好呀,解决后,敬献80分在线等待中。
开始IP为beginIp,结束IP为endIp,用户输入IP为userIp,通过这样一个方法进行判断用户IP是否合法,并在该IP段内:
如下:
public boolean ipExist(String beginIp,String endIp,String userIp){}
代码越完整越好呀,解决后,敬献80分在线等待中。
/**
* 判断IP是否在指定范围;
*/
public static boolean ipIsValid(String ipSection, String ip) {
if (ipSection == null)
throw new NullPointerException("IP段不能为空!");
if (ip == null)
throw new NullPointerException("IP不能为空!");
ipSection = ipSection.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 (!ipSection.matches(REGX_IPB) || !ip.matches(REGX_IP))
return false;
int idx = ipSection.indexOf('-');
String[] sips = ipSection.substring(0, idx).split("\\.");
String[] sipe = ipSection.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;
}
public static void main(String[] args) {
if (ipIsValid("192.168.1.1-192.168.1.10", "192.168.3.54")) {
System.out.println("ip属于该网段");
} else
System.out.println("ip不属于该网段");
}
}
//本文来自CSDN博客,转载请标明出处:
//http://blog.csdn.net/dhdhdh0920/archive/2009/06/23/4290673.aspx不知对你有帮助没
for (int i = 0; i < 4; ++i) {
ips = ips << 8 | Integer.parseInt(sips[i]);
}
还有判断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)";
转的 代码 搜索一下,就能找到
//将127.0.0.1 形式的IP地址转换成10进制整数,这里没有进行任何错误处理
public long ipToLong(String strIP) {
long [] ip=new long[4];
int position1=strIP.indexOf(".");
int position2=strIP.indexOf(".",position1+1);
int position3=strIP.indexOf(".",position2+1);
ip[0]=Long.parseLong(strIP.substring(0,position1));
ip[1]=Long.parseLong(strIP.substring(position1+1,position2));
ip[2]=Long.parseLong(strIP.substring(position2+1,position3));
ip[3]=Long.parseLong(strIP.substring(position3+1));
return (ip[0]<<24)+(ip[1]<<16)+(ip[2]<<8)+ip[3];
}
/**
* created by wangqinghua
* @param longIP IP地址的10进制整数表示
* @return
* 2009Feb 20, 20092:47:28 PM
* TODO 将10进制整数形式转换成127.0.0.1形式的IP地址
* String
*/
public String longToIP(long longIP)
{
StringBuffer sb = new StringBuffer("");
sb.append(String.valueOf(longIP>>>24));
sb.append(".");
sb.append(String.valueOf((longIP&0x00FFFFFF)>>>16));
sb.append(".");
sb.append(String.valueOf((longIP&0x0000FFFF)>>>8));
sb.append(".");
sb.append(String.valueOf(longIP&0x000000FF));
return sb.toString();
}
ip与long型的相互转换,要比较时转成long;要显示时转成ip
希望对你有用
192.168.1.1-192.168.6.21
192.168.1.20
192.168.20.1-192.168.56.52
我想判断该IP段是单行,还是多行,如果是多行,用split进行截开,我是这样写的
//判断IP段是否为多行
if (ipSections.contains("/r/n")) {
String[] ipSectionsArr = ipSections.split("/r/n");//按标记划分成一个数组里面存若干IP段
f = mulRowsSection(ipSectionsArr, userIp);
}else{
f = oneRowSection(ipSections, userIp);
}
但通过运行发现标记"/r/n"并没有把它们划分开,如果是多行到底应该用哪个标记分离呀????
各位高手有知道的没有,在下感激不禁!
public class IPSplit {
public static void main(String[] args) {
String ipString = "192.168.1.1-192.168.6.21 192.168.1.20 \n\n\n 192.168.20.1-192.168.56.52";
String[] ipArray = ipString.split("[^0-9.]{1,}");
for(int i=0; i<ipArray.length; i++) {
System.out.println(ipArray[i]);
}
}
}
/*贴贴贴, 哈哈
192.168.1.1
192.168.6.21
192.168.1.20
192.168.20.1
192.168.56.52*/