Qt ip地址与子网掩码合法性校验


1、ip 地址合法性校验


    static bool checkIp(QString ip)
    {
        QRegExp rx2("^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$");
         if( !rx2.exactMatch(ip) )
         {
               return false;
         } else {
             QStringList pieces = ip.split(".");
             int b_subIpNum[4];
             int b_cnt255 = 0;
             bool ok = true;
             for (int i = 0;i < 4;i++) {
                 b_subIpNum[i] = pieces.value(i).toInt(&ok,10);//合理性判断
                 if(!ok) {
                     return false;
                 }
                 if (b_subIpNum[i] > 255) {
                     return false;
                 }
                 if (b_subIpNum[i] == 255) {
                     b_cnt255 += 1;
                 }
             }
             if (b_subIpNum[0] == 0 || b_cnt255 == 4){
                 b_cnt255 = 0;
                 return false;
             }
         }
         return true;
    }


    static bool checkip(QString ip)
    {
        QRegExp rx2("^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$");
         if( !rx2.exactMatch(ip) )
         {
               return false;
         }
         return true;
    }



2、子网掩码合法性校验


    static bool checkMask(QString mask)
    {
        QRegExp rx2("^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$");
         if( !rx2.exactMatch(mask) )
         {
               return false;
         } else {
             QStringList pieces = mask.split(".");
             int b_subMaskNum[4];
             int b_cnt255 = 0;
             int b_cnt0 = 0;
             bool ok = true;
             int imask = 0;
             int tmask = 255;

             for (int i = 0;i < 4;i++) {
                 b_subMaskNum[i] = pieces.value(i).toInt(&ok,10);//合理性判断
                 if(!ok) {
                     return false;
                 }
                 imask =  b_subMaskNum[i];
                 if(!(imask==128 || imask==192 || imask==224 || imask==240 || imask==248 || imask==252 || imask==254 || imask==255 || imask==0)) {
                     return false;
                 } else if (imask > tmask) {
                     return false;
                 }

                 if (b_subMaskNum[i] == 0) {
                     b_cnt0 += 1;
                 }
                 if (b_subMaskNum[i] == 255) {
                     b_cnt255 += 1;
                 }
                 tmask = imask;
             }
             if((b_cnt255 + b_cnt0) < 3) {
                 return false;
             }
             if (b_subMaskNum[0] == 0 || b_cnt255 == 4){
                 b_cnt255 = 0;
                 return false;
             }
         }
         return true;
    }


    static bool checkMask(QString mask)
    {
        QRegExp rx2("^(254|252|248|240|224|192|128|0)\\.0\\.0\\.0|255\\.(254|252|248|240|224|192|128|0)\\.0\\.0|255\\.255\\.(254|252|248|240|224|192|128|0)\\.0|255\\.255\\.255\\.(254|252|248|240|224|192|128|0)$");
         if( !rx2.exactMatch(mask) )
         {
               return false;
         }
         return true;
     }


3、是否为同一网段


bool isSameNetwork(QString ip, QString mask, QString gateway)
{
    QStringList ipList = ip.split('.',QString::SkipEmptyParts);
    QStringList maskList = mask.split('.',QString::SkipEmptyParts);
    QStringList gatewayList = gateway.split('.',QString::SkipEmptyParts);
    bool ok = true;
    for(int i = 0;i < 4;i++) {
        if ((ipList[i].toInt(&ok,10) & maskList[i].toInt(&ok,10)) !=
                (gatewayList[i].toInt(&ok,10) & maskList[i].toInt(&ok,10))) {
            return false;
        }
    }
    return true;
}





  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值