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; }