zoukankan      html  css  js  c++  java
  • IP地址检测工具

    编辑本文章

    IP地址检测工具

    /*
           名字:input.js
           功能:input类型通用JS
           包括:
    
    
    
           --------------------------------------------------------------------------------------------
                        1--IP相关检测及转换函数
                        
                            1>-isIP                检测IP是否合法                        2>-isMask                    检测掩码是否合法                        
                            3>-IPatol            IP字符串转为long                    4>-isIPMaskMatch    IP与掩码是否匹配
    
    
    
                            5>-isNet            是否是子网地址                        6>-isNetMaskMatch 子网与掩码是否匹配
    
    
    
                            7>-isIPConflict检测两IP/掩码网段冲突        8>-isNetConflict     检测两子网网段是否冲突
                            8>-isIPRangeVal检测IP范围是有效                    10>isIPRangeConflict检测两IP范围是否互相包含
                            
                        2--端口相关检测及转换函数
                            1>-isPort                    检测端口是否合法            2>-isPortRangeConflict    检测两端口范围是否冲突
                            3>-isPortRangeVal    检测端口范围是否有效
    
    
    
                            
                        3--字符串相关
    
    
    
                            1>-strlen                 字符串长度(返回字符串所占字节数)
                ---------------------------------------------------------------------------------------------------
    */
    
    /*******************************************************************
    **IP相关
    ********************************************************************/
    //将字符串形式的IP转换成long
    function IPatol(strIP)
    {
        var ip=0;
        var array=strIP.split(".");
        if(array.length == 4)
        {
            ip=parseInt(ip)+parseInt(array[0])*16777216;
            ip=parseInt(ip)+parseInt(array[1])*65536;
            ip=parseInt(ip)+parseInt(array[2])*256;
            ip=parseInt(ip)+parseInt(array[3]);
        }
        return parseInt(ip);    
    }
    
    //IP是否合法,无提示,0.0.0.0被认为是不合法IP,如果IP可为0.0.0.0需在外部另加判断
    
    
    
    function IPntoa(dwIP)
    {
        var part1 = (dwIP>>24) & 0x000000FF;
        var part2 = (dwIP>>16) & 0x000000FF;
        var part3 = (dwIP>>8) & 0x000000FF;
        var part4 = (dwIP & 0x000000FF);
        
        return (part1.toString() + "." + part2.toString() + "." + part3.toString() + "." + part4.toString());
    }
    
    
    function isIP(strIP)     
    {
        var re=/^(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})$/; //IP正则  
      if(re.test( strIP ))    
      { 
          var n1 = parseInt(RegExp.$1);
          var n2 = parseInt(RegExp.$2);
          var n3 = parseInt(RegExp.$3);
          var n4 = parseInt(RegExp.$4);
        
          var array = strIP.split(".");
        if ((array[0].charAt(0) == '0' && n1 != 0)
            || (array[1].charAt(0) == '0' && n2 != 0)
              || (array[2].charAt(0) == '0' && n3 != 0)
            || (array[3].charAt(0) == '0' && n4 != 0))
            return false;
    
      
          //首位必需为1-223之间除127之外的任一数字,末位不能为0或255
          if((n1>0 && n1<224 && n1!=127) && (n2>=0 && n2<=255) && (n3>=0 && n3<=255) && ( n4>0 && n4<255))
          {
              return true;    
          }
      }
      return false;     
    } 
    
    //IP是否合法,无提示,0.0.0.0被认为是不合法IP,如果IP可为0.0.0.0需在外部另加判断
    
    
    
    function isIP2(strIP)     
    {
        var re=/^(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})$/; //IP正则    
      if(re.test( strIP ))    
      { 
          var n1 = parseInt(RegExp.$1);
          var n2 = parseInt(RegExp.$2);
          var n3 = parseInt(RegExp.$3);
          var n4 = parseInt(RegExp.$4);
        
          var array = strIP.split(".");
        if ((array[0].charAt(0) == '0' && n1 != 0)
            || (array[1].charAt(0) == '0' && n2 != 0)
              || (array[2].charAt(0) == '0' && n3 != 0)
            || (array[3].charAt(0) == '0' && n4 != 0))
            return false;
      
          //首位必需为1-223之间除127之外的任一数字,末位不能为0或255
          if((n1>=0 && n1<=255) && (n2>=0 && n2<=255) && (n3>=0 && n3<=255) && (n4>=0 && n4<=255))
          {
              return true;    
          }
      }
      return false;     
    } 
    
    //IP验证,有提示 
    function isIP_t(strIP)
    {
        if(strIP == "")
        {
            alert("请输入IP!");
            this.focus();
            return false;    
        }
        if(!isIP(strIP))
        {
             alert("IP无效!
    
    (只能包含0-255之间的整数,
    
    且首位必须是1-223之间除127以外的数字,
    
    末位不能为0或255)");
             this.focus();
             return false;
        }
        return true;    
    }
    
    //掩码是否合法,无提示
    
    
    
    function isMask(strMask)
    {
        //var reg=/^(d{1,2}|1dd|2[0-4]d|25[0-5])(.(d{1,2}|1dd|2[0-4]d|25[0-5])){3}$/; //IP正则 
        var reg=/^(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})$/;//IP正则
        if(reg.test(strMask))   
      { 
          var n1 = parseInt(RegExp.$1);
          var n2 = parseInt(RegExp.$2);
          var n3 = parseInt(RegExp.$3);
          var n4 = parseInt(RegExp.$4);
          if(isNaN(n1) || isNaN(n2) || isNaN(n3) || isNaN(n4))
          {
              return false;
          }
          if( (n1>255 || n1<0)|| (n2>255 || n2<0) || (n3>255 || n3<0) || (n4>255 || n4<0))
          {
              return false;    
          }
    
          var tmp = (n1*Math.pow(2,24))+(n2*Math.pow(2,16))+(n3*Math.pow(2,8))+n4;
            if(tmp < Math.pow(2,31))
            {
                return false;
            }
            else
            {
                tmp -=  Math.pow(2,31);
                //后续位必须为连续的1
                for (i = 30; i > 1; i --)
                {
                    if (tmp == 0)
                    {
                        break;
                    }
                    else if(tmp < Math.pow(2,i))
                    {
                        return false;
                    }
                    else
                    {
                        tmp -= Math.pow(2,i);
                    }
                }
            }
      }
      else//!reg.match( strMask)
      {
          return false;    
      }
        return true;
    }
    
    //掩码是否合法,0.0.0.0是合法的
    function isMask2(strMask)
    {
        if(!isMask(strMask))
        {
            if(strMask == "0.0.0.0")
            {
                return true;
            }
            else
                return false;
        }
        else
            return true;
    }
    
    //子网掩码验证,有提示
    function isMask_t(strMask)
    {
        if(strMask == "")
        {
            alert("请输入掩码!");    
            return false;
        }
        if(!isMask(strMask))
        {
            alert("请输入有效的子网掩码!");
            return false;    
        }
        return true;
    }
    
    //IP与掩码匹配验证,在执行此函数前,需已对IP及掩码的有效性做过检验
    
    
    
    function isIPMaskMatch(strIP, strMask)
    {
        var nIP = IPatol(strIP);
        var nMask = IPatol(strMask);
        if (((nIP|nMask)== -1) || (((nIP|nMask)+Math.pow(2,32)) == nMask))
        {
            return false;
        }
        
        return true;
    }
    
    //验证是否是合法的子网地址,0.0.0.0认为是不合法
    function isNet(strNet)
    {
        var re=/^(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})$/; //IP正则    
      if(re.test( strNet ))    
      { 
          var n1 = parseInt(RegExp.$1);
          var n2 = parseInt(RegExp.$2);
          var n3 = parseInt(RegExp.$3);
          var n4 = parseInt(RegExp.$4);    
          //首位为1-223之间除127以外的数字
    
    
    
          if( (n1>0 && n1<224 && n1!=127)&& (n2>=0 && n2<=255) && (n3>=0 && n3<=255) && (n4>=0 && n4<=255))
          {
              return true;    
          }
      }
      
        return false;
    }
    
    //验证是否是合法的子网地址,0.0.0.0认为是合法
    
    
    
    function isNet2(strNet)
    {
        var re=/^(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})$/; //IP正则    
      if(re.test( strNet ))    
      { 
          var n1 = parseInt(RegExp.$1);
          var n2 = parseInt(RegExp.$2);
          var n3 = parseInt(RegExp.$3);
          var n4 = parseInt(RegExp.$4);    
          //首位为1-223之间除127以外的数字
    
    
    
          if( (n1>=0 && n1<224 && n1!=127)&& (n2>=0 && n2<=255) && (n3>=0 && n3<=255) && (n4>=0 && n4<=255))
          {
              return true;    
          }
      }
      
        return false;
    }
    
    //验证子网与掩码的匹配,在执行此函数之前,需对子网及掩码的有效性做验证
    function isNetMaskMatch(strNet,strMask)
    {
        var tmpArray=strNet.split(".");
        var tmpArray2 = strMask.split(".");    
        if(tmpArray.length != 4 || tmpArray2.length != 4)
        {
            return false;    
        }    
        for (i = 0; i < 4; i++)
        {
            tmpArray[i] = parseInt(tmpArray[i]);
            tmpArray2[i] = parseInt(tmpArray2[i]);        
            if ((tmpArray[i]|tmpArray2[i])!=tmpArray2[i])
            {
                return false;
            }
        }
        
        return true;    
    }
    
    //验证两IP/掩码 网段是否冲突,在调用该函数前,需已检测传入参数的有效性
    
    
    
    //true -- 冲突,false -- 未冲突
    
    
    
    function isIPConflict( strIP1,strMask1, strIP2, strMask2)
    {
        var ip1 = IPatol(strIP1);
        var mask1 = IPatol(strMask1);
        var ip2 = IPatol(strIP2);
        var mask2 = IPatol(strMask2);
        if(ip1 == 0 || mask1 == 0 || ip2 == 0 || mask2 == 0)
        {
            return false;    
        }
        
        if( (ip1&mask1&mask2) == (ip2&mask2&mask1))
        {
            return true;    //网段冲突
        }    
        return false;
    }
    
    
    //验证两子网网段是否冲突(具有包含关系),在调用该函数前,需已检测传入参数的有效性
    
    
    
    //true -- 冲突,false -- 未冲突
    
    
    
    function isNetConflict( strNet1,strMask1,strNet2,strMask2)
    {
        var net1 = IPatol(strNet1);
        var mask1 = IPatol(strMask1);
        var net2 = IPatol(strNet2);
        var mask2 = IPatol(strMask2);
        if(net1 == 0 || mask1 == 0 || net2 == 0 || mask2 == 0)
        {
            return false;    
        }
        //冲突
        if( (net1&mask2) == (net2&mask1))
        {
            return true;    
        }
        
        return false;
    }
    
    //验证IP范围是否有效(起始IP不能大于结束IP)
    function isIPRangeVal(strIPFrom,strIPTo)
    {
        var ip1 = IPatol(strIPFrom);
        var ip2 = IPatol(strIPTo);
        
        if(ip1>ip2)
        {
            return false;    //起始IP大于结束IP
        }
        
        return true;    
    }
    
    //验证IP范围冲突(即是否具有包含关系),传入参数的有效性在调用该函数前已验证
    
    
    
    function isIPRangeConflict(IPFrom1,IPTo1,IPFrom2,IPTo2)
    {
        var ipf1 = IPatol(IPFrom1);
        var ipt1 = IPatol(IPTo1);
        var ipf2 = IPatol(IPFrom2);
        var ipt2 = IPatol(IPTo2);
        
        if(!((ipf1>ipt2) || (ipt1<ipf2)))
        {
            return true;    //IP范围具有包含关系
        }
        
        return false;
    }
    
    /********************************************************************
    **端口相关
    *********************************************************************/
    //是否是有效的端口
    function isPort(strPort)
    {
        var nport = parseInt(strPort); 
        if(isNaN(nport)||nport<1 ||nport>65535)
        {
            return false; //不是1-65535之间的数
        } 
    
        return true;    
    }
    
    //是否是有效的端口范围
    function isPortRangeVal(strPort1,strPort2)
    {
        var nport1 = parseInt(strPort1);
        var nport2 = parseInt(strPort2);
        if(isNaN(nport1) || isNaN(nport2))
        {
            return false;    
        }    
        if(nport1>nport2)
        {
            return false;    //起始端口大于结束端口
        }
        return true;
    }
    
    //端口范围是否冲突
    function isPortRangeConflict(PortF1,PortT1,PortF2,PortT2)
    {
        var nf1 = parseInt(PortF1);
        var nt1 = parseInt(PortT1);
        var nf2 = parseInt(PortF2);
        var nt2 = parseInt(PortT2);
        if(isNaN(nf1) || isNaN(nt1) || isNaN(nf2) || isNaN(nt2))
        {
            return false;    
        }    
        if( !( (nf1>nt2) || (nT1<nf2) ))
        {
            return false;//端口范围冲突    
        }
        return true;
    }
    
    
    /********************************************************************
    **字符串相关
    
    
    
    *********************************************************************/
    
    //取得字符串的字节数(一个汉字占三个字节)
    function strlen(str)
    {
        var cnt = 0;
        for( i=0; i<str.length; i++)
        {
            var value = str.charCodeAt(i);
            if( value < 0x080)
            {
                cnt += 1;
            }
            else if( value < 0x0800)
            {
                cnt += 2;
            }
            else 
            {
                cnt += 3;
            }
        }
        return cnt;
    }
    
    function isInputVilid(tmp)
    {
    //    var tmp = obj.value;
        if(tmp.indexOf('"')!=-1 || tmp.indexOf("<")!=-1 || tmp.indexOf(">")!=-1 
                || tmp.indexOf("'")!=-1 || tmp.indexOf("&")!=-1 
                || tmp.indexOf("%")!=-1 || tmp.indexOf("#")!=-1 || tmp.indexOf("=")!=-1 
                || tmp.indexOf("\")!=-1 || tmp.indexOf(":")!=-1 || tmp.indexOf(",")!=-1)
        {
            return false;
        }
        return true;
    }
    
    function encryptPasswd(str)
    {
        //dlan4.6 只支持https登录, 不在需要控件加密
        //var pwdStr =  escape(str);
        //return active.EncryptUTF8(pwdStr);
        //return active.Encrypt(str);
        return str;
    }
    
    //验证IP范围是否有效(起始IP不能大于结束IP)
    function isIPinRange(strIP, strIPFrom,strIPTo)
    {
        var ip = IPatol(strIP);
        var ip1 = IPatol(strIPFrom);
        var ip2 = IPatol(strIPTo);
        
        if(ip1>ip2)
        {
            return false;    //起始IP大于结束IP
        }
        
        if (ip < ip1 || ip > ip2)
        {
            return false;
        }
        
        return true;    
    }
    
    /********************************************************************
    **webagent相关
    *********************************************************************/
    //判断strIpPort是否是ip:port的形式。比如1.2.3.4#1.2.3.5:4009
    function isIpPort(strIpPort)
    {
        if (strIpPort == null || strIpPort.length == 0)
        {
            return false;
        }
        var rex = /^([0-9.]+#){0,3}[0-9.]+:d+$/;//判断是否是ip1#ip2#ip3:port
        if ( ! rex.test(strIpPort) )
        {
            return false;
        }
        var arr = strIpPort.split(/:|#/);
        if ( ! isPort(arr[arr.length-1]) )
        {
            return false;
        }
        for (i = 0 ;i < arr.length-1 ; i++)
        {
            if ( ! isIP(arr[i]) )
            {
                return false;
            }
        }
        return true;
    }
    
    //判断strDomainPort是否是 动态域名:端口 的形式
    function isDomainPort(strDomainPort)
    {
        if (strDomainPort == null || strDomainPort.length == 0)
        {
            return false;
        }
        rex=/^([w-]+.)+[a-zA-Z]+:(d){1,5}$/
        if ( ! rex.test(strDomainPort))
        {
            return false;
        }
        var arr = strDomainPort.split(":");
        if ( ! isPort(arr[1]) )
        {
            return false;
        }
        return true;
    }
    
    //判断strUrl是否是url形式
    function isUrl(strUrl)
    {
        if (strUrl == null || strUrl.length == 0)
        {
            return false;
        }
        rex=/^([w-]+.)+[w]+(:(d){1,5})?(/[w- .?%&=]*)+(/)?$/
        strUrl = encodeURI(strUrl); //以防路径名有中文
        if (rex.test(strUrl))
        {
            return true;
        }
        return false;
    }
    
    /*从strWebagt获取正确的webagent地址
     首先自动转换句号冒号到英文,
     然后判断webagent是否为下面的格式,
       1> 固定IP:端口(其中固定IP支持多IP,最多支持四个IP,各IP之间以#号分隔,如:202.96.137.75#60.28.239.21:4009); 
       2> 动态域名:端口(如:www.sangfor.com.cn:4009); 
       3> 动态网页(如:www.sangfor.com/NG4.0/test.php).
     如果不是返回null,如果是则返回转换得到的地址
    */
    function getRightWebagent(strWebagt)
    {
        if (strWebagt == null || strWebagt.length == 0)
        {
            return null;
        }
        
        strWebagt = strWebagt.replace(/^http(:|:)///,""); //如果http://头 则去掉
        
        // 将"/"以前的句号冒号全部替换成英文的
        var arr = strWebagt.split("/");
        arr[0] = arr[0].replace(/:/g,":");
        arr[0] = arr[0].replace(/。/g,".");
        strWebagt = arr.join("/");
        
        if ( isIpPort(strWebagt) )
        {
            return strWebagt;
        }
        
        if ( isDomainPort(strWebagt) )
        {
            return strWebagt;
        }
        
        if ( isUrl(strWebagt) )
        {
            return strWebagt;
        }
        return null;
    }
  • 相关阅读:
    git
    sublime text
    WIX安装图文并茂简易说明
    C#利用Lambda和Expression实现数据的动态绑定
    Ubuntu/CentOS下如何将普通用户提升到root权限
    虚拟机安装CentOS6.4用“桥接:直接连接到物理网线”不能上网的原因及解决方法
    C#利用lambda表达式将函数作为参数或属性跨类传递
    直接将XML存入到SQL中(SQL2008)
    C# 类中继承接口的属性
    提高开发效率的Visual Studio 2010使用技巧
  • 原文地址:https://www.cnblogs.com/yaya625202/p/12525106.html
Copyright © 2011-2022 走看看