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 }

 

posted @ 2014-12-02 18:51  MDGSF  阅读(399)  评论(0)    收藏  举报