散分80分,求助用java判断一个IP地址是否在一个IP段之内,并判断该IP地址是否合法,在线等待。。。。

交个朋友好不好 2010-03-21 03:20:56
问题是这样的,输入一个IP地址,先判断一下该IP是否是合法的IP地址,然后再判断该IP地址是否在一个相应的IP段内
开始IP为beginIp,结束IP为endIp,用户输入IP为userIp,通过这样一个方法进行判断用户IP是否合法,并在该IP段内:
如下:
public boolean ipExist(String beginIp,String endIp,String userIp){

}
代码越完整越好呀,解决后,敬献80分。。。在线等待中。。。。。。。
...全文
805 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dazzlingwinter 2010-03-23
  • 打赏
  • 举报
回复

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*/
  • 打赏
  • 举报
回复
一个字符串形式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"并没有把它们划分开,如果是多行到底应该用哪个标记分离呀????
各位高手有知道的没有,在下感激不禁!
Ark032425 2010-03-22
  • 打赏
  • 举报
回复

//将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
希望对你有用
bbb332 2010-03-22
  • 打赏
  • 举报
回复
学习了。。。
  • 打赏
  • 举报
回复
有谁知道字符串分行的表示,比如三个IP地址段分了三行,我要在把它用一个字符串表示出来,然后用它的时候,再用一个字符串截取函数把它给截开。
帮帮忙,送分了。
Ark032425 2010-03-21
  • 打赏
  • 举报
回复
ip转换成long后就可以 相互比较大小了
转的 代码 搜索一下,就能找到
Ark032425 2010-03-21
  • 打赏
  • 举报
回复
把 ip转成 long型,因为int有 负数不能完全对应ip
  • 打赏
  • 举报
回复
ifrancis能帮我解释一下转换ip为长整数的这句代码吗?即是
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)";
  • 打赏
  • 举报
回复
十分感谢ifrancis的回复,我试一下
ifrancis 2010-03-21
  • 打赏
  • 举报
回复
public class ipTest {   
/**
* 判断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
不知对你有帮助没
  • 打赏
  • 举报
回复
刚参加工作,还很菜,主管催的比较紧,还请各位大侠帮帮忙!

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧