问题是这样的,输入一个IP地址,先判断一下该IP是否是合法的IP地址,然后再判断该IP地址是否在一个相应的IP段内
开始IP为beginIp,结束IP为endIp,用户输入IP为userIp,通过这样一个方法进行判断用户IP是否合法,并在该IP段内:
如下:
public boolean ipExist(String beginIp,String endIp,String userIp){}
代码越完整越好呀,解决后,敬献80分在线等待中。

解决方案 »

  1.   

    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不知对你有帮助没
      

  2.   

    十分感谢ifrancis的回复,我试一下
      

  3.   

    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)";
      

  4.   

    把 ip转成 long型,因为int有 负数不能完全对应ip
      

  5.   

    ip转换成long后就可以 相互比较大小了 
    转的 代码 搜索一下,就能找到
      

  6.   


     //将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
    希望对你有用
      

  7.   

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

  8.   


    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*/