2010-11-22 3 views

Antwort

2

IP-Adressklassen nicht mehr verwendet werden, und ich glaube nicht, es gibt jede integrierte Funktion, dies zu bestimmen.

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

Erstens, denken Sie daran, dass die ganze Idee der Klasse A, B, C und D-Netze für eine ganze Weile wirklich veraltet ist. Es wurde durch Subnetzmasken mit variabler Länge vor etwa 15-20 Jahren ersetzt (erinnere mich nicht genau, aber Anfang der 90er Jahre).

In jedem Fall sind die ersten Bits der Adresse sagen, die Klasse - 0 in dem höchstwertigen Bit bedeutet A. Klasse 10 in den beiden höchstwertigen Bits bedeutet Klasse B. 110 in den drei höchstwertigen Bits bedeutet Klasse C. Ich glaube, alles andere ist Klasse D.

Wie gesagt, jedoch ist das ganze "Klassen" -System für IP-Adressen veraltet, so dass fast alles, was Sie damit erreichen könnten, wahrscheinlich auf eine andere Art und Weise erledigt werden muss um wirklich aussagekräftige Ergebnisse zu erzielen.

0

Um zu überprüfen, ob 2-Adresse im selben Netzwerk ist:

int result1 = ipaddress1 & subnetmask; 
int result2 = ipaddress2 & subnetmask; 
if(result1==result2) 
{ 
    cout << "Both in Same network"; 
} 
else 
{ 
    cout << "not in same network"; 
} 
+1

gleiche Klasse, nicht gleicher Subnetz: Sie können Ihre eigene Funktion zu bestimmen, die Klasse einer Adresse (basierend auf den definition of address classes) immer schreiben. Es gibt bessere Möglichkeiten, die Klassenzugehörigkeit zu bestimmen als eine UND-Verknüpfung mit einer Maske. –

Verwandte Themen