Как сравнить два IP принадлежит одному классу в MFC (VC ++)? - PullRequest
1 голос
/ 22 ноября 2010

как сравнить два IP принадлежит одному классу (КЛАСС A, B, C, D) в MFC (VC ++)?У меня есть один IP как 172.24.17.174 и другой как 172.24.17.86, теперь я могу сравнить, лежат ли они в одном классе или нет?

Любой код высоко ценится.Спасибо

Ответы [ 3 ]

2 голосов
/ 22 ноября 2010

Классы IP-адресов больше не используются, и я не думаю, что есть какая-либо встроенная функция для определения этого.Вы всегда можете написать свою собственную функцию для определения класса адреса (на основе определения классов адресов ):

enum IPClass { ClassA, ClassB, ClassC, ClassD, ClassE };

IPClass getClass(unsigned int addr) {
  char msb = char(addr >> 24);
  if (msb >> 7 == 0x0)
    return ClassA;
  if (msb >> 6 == 0x2)
    return ClassB;
  if (msb >> 5 == 0x6)
    return ClassC;
  if (msb >> 4 == 0xE)
    return ClassD;
  return ClassE;
}
1 голос
/ 22 ноября 2010

Во-первых, имейте в виду, что сама идея сетей классов A, B, C и D давно устарела.Он был заменен масками подсети переменной длины примерно 15-20 лет назад (точно не помню, но в начале 90-х).

В любом случае, первые биты адреса говорят вам о классе -- 0 в старшем значащем бите означает класс A. 10 в двух старших значащих битах означает класс B. 110 в трех старших битах означает класс C. Я считаю, что все остальное - это класс D.

Однако, как я уже сказал, вся «классовая» система для IP-адресов устарела, поэтому почти все, что вы можете надеяться достичь с ее помощью, вероятно, нужно сделать каким-то другим способом для получения действительно значимых результатов.

0 голосов
/ 22 ноября 2010

Чтобы проверить, находятся ли 2 адреса в одной сети:

int result1 = ipaddress1 & subnetmask;
int result2 = ipaddress2 & subnetmask;
if(result1==result2)
{
    cout << "Both in Same network";
}
else
{
    cout << "not in same network";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...