2017-01-02 1 views
1

Wie zu entscheiden, ob zwei IP im selben Subnetz sind oder nicht? Der einzige Eingang ist die IP-Adresse und die Subnetzmaske! Was ist der optimale Weg, um mit C/C++ zu berechnen, ob zwei IP das gleiche Subnetz haben?Vergleichen Sie zwei IP-Subnetz

+0

Sind Sie in einer Prüfung? – rekire

+2

Übernehmen Sie die Maske auf die IP-Adresse und sehen Sie, ob sie identisch sind? – AntonH

+0

danke marschall! Dann meinst du, xor Ergebnis zwischen zwei ip oder _xor_ zwischen den beiden Netzwerk zu berechnen (ip _and_ subnet) – HLM

Antwort

1
bool checkForSubnetEquality(in_addr_t ipA, in_addr_t ipB, uint32_t subnetMask) { 
    return (ipA & subnetMask) == (ipB & subnetMask); 
} 
+0

Ich bitte Sie, bitte fügen Sie weitere Kontext um Ihre Antwort hinzu. Code-Only- oder Link-Only-Antworten sind schwer zu verstehen. Es wird sowohl dem Fragesteller als auch zukünftigen Lesern helfen, wenn Sie in Ihrem Beitrag weitere Informationen hinzufügen können. – RBT

1
typedef unsigned char BYTE; 

Bool CheckForSubnetParity(
BYTE[] _In_ iPAddress1, 
BYTE[] _In_ iPAddress2, 
BYTE[] _In_ subNetMask 
) { 

     BYTE[] NetworkPrefix1 = new BYTE[4]; 
     BYTE[] NetWorkPrefix2 = new BYTE[4]; 
     Bool Result = true; 

     for (int x = 0; x < 4; x++) 
     { 
      NetworkPrefix1[x] = iPAddress1[x] && subNetMask[x]; 
      NetworkPrefix2[x] = iPAddress2[x] && subNetMask[x]; 
      if (NetworkPrefix1[x] != NetworkPrefix2[x]) 
      { 
       Result = false; 
      } 
     } 

     return Result; 
    } 
+0

Zuweisung von Speicher für diese Aufgabe ist absolut unnötig! Und ich denke '! =' Hat höhere Priorität als '^', also scheint das sogar falsch zu sein – user45891

+0

Sie haben absolut Recht, der '=' Operator ist viel kürzer Ausdruck für das gleiche Ding. Ich wurde in so einem engen Fokus gefangen, dass ich komplett vermisse, wie man Gleichheit benutzt ... –

+0

Aber ich mag es, mit 'BYTE' Arrays zu arbeiten, im Gegensatz zu größeren Typen. –

1

Sie können ‚xor‘ Betrieb gelten sowohl für IP-Adressen ihrer Maske und vergleichen sie danach. Wenn sie identisch sind, dann beide IP-Adressen im selben Subnetz.

die am 172.16.2.4/255.255.0.0 und 172.16.1.69/255.255.0.0 Nach ‚xor‘ aussehen Lassen Sie erhalten ‚172.16.0.0‘ für beide Adressen, so dass sie im selben Subnetz.

Grüße.