Ip地址和子网掩码检查
检查ip地址和子网掩码的合法性。
1 //将ip地址转化为整数 2 void vTchar2Int(TCHAR wac[], long long & ll) 3 { 4 ll = 0; 5 char ac[MAX_INPUT_LEN] = {0}; 6 strcpy(ac, TcharToChar(wac)); 7 8 int iTemp; 9 char acTemp[100] = {0}; 10 char * pcHead = &ac[0]; 11 char * pcFind = strchr(ac, '.'); 12 13 while(pcFind != NULL) 14 { 15 *pcFind = '\0'; 16 strcpy(acTemp, pcHead); 17 pcFind++; 18 pcHead = pcFind; 19 20 iTemp = atoi(acTemp); 21 ll = (ll + (long long)iTemp) * 256; 22 23 pcFind = strchr(pcHead, '.'); 24 } 25 strcpy(acTemp, pcHead); 26 iTemp = atoi(acTemp); 27 ll = ll + (long long)iTemp; 28 } 29 30 bool bIpIsValid(long long llIp) 31 { 32 if((llIp==0) || (llIp==0xffffffff)) 33 { 34 return false; 35 } 36 else 37 { 38 return true; 39 } 40 } 41 42 bool bMaskIsValid(long long llMask) 43 { 44 if((llMask|(llMask-1)) == 0xffffffff) 45 { 46 return true; 47 } 48 else 49 { 50 return false; 51 } 52 } 53 54 bool bIpAndMaskIsValid(TCHAR wacIP[], TCHAR wacMask[]) 55 { 56 long long llIp; 57 long long llMask; 58 vTchar2Int(wacIP, llIp); 59 vTchar2Int(wacMask, llMask); 60 61 if(!bIpIsValid(llIp)) 62 { 63 return false; 64 } 65 if(!bMaskIsValid(llMask)) 66 { 67 return false; 68 } 69 70 int iHead = (llIp & 0xff000000) >> 24; 71 if(iHead>0 && iHead<127) 72 { 73 if(llMask < 0xff000000) 74 { 75 return false; 76 } 77 } 78 if(iHead>=128 && iHead<=191) 79 { 80 if(llMask < 0xffff0000) 81 { 82 return false; 83 } 84 } 85 if(iHead>=192 && iHead<=223) 86 { 87 if(llMask < 0xffffff00) 88 { 89 return false; 90 } 91 } 92 long long llNet = llIp & llMask; 93 if(llNet==0 || llNet==llMask) 94 { 95 return false; 96 } 97 long long llHost = llIp & (~llMask); 98 if(llHost==0 || llHost==(~llMask)) 99 { 100 return false; 101 } 102 return true; 103 }
My Github Blog: mdgsf.github.io

浙公网安备 33010602011771号