2017-05-11 7 views
0

Ich schreibe Code in C++, der sowohl auf Windows als auch auf Mac-Plattform läuft. Ich möchte eine Funktion schreiben, die Maschinen-IP-Adressenliste und Liste von IP-Filtern im CIDR-Format akzeptiert. Diese Funktion überprüft, ob die IP-Adresse des Geräts mit dem IP-Filter übereinstimmt.IP-Adresse passender Filterfunktion

Zum Beispiel. Wenn Maschine IP 10.210.177.47 und Filter 10.210.177.1/32 ist Die Funktion prüft, ob 10.210.177.47 in den Filterbereich fällt. Filter kann auch Plain IP-Adresse wie 10.210.177.45

Ich muss einen gemeinsamen Code schreiben, der auf Windows und Mac laufen kann.

+0

Bitte spezifizieren ** was du getan hast **, was funktioniert, was scheitert und was du nicht verstehst ** –

+0

Was ich nicht verstehe, ist die Verwendung der Maske beim Vergleichen von IP-Adressen. – user832096

Antwort

0

Die einfachste Lösung besteht darin, die Maskenlänge in eine Bitmaske umzuwandeln. Z.B. a /8 verwendet die oberen 8 Bits, um das Netzwerk zu identifizieren, und die unteren 24 Bits, um Hosts innerhalb dieses Netzwerks zu identifizieren. Somit kann durch die IP-Adresse Verschiebung (ausgedrückt als std::uint32_t) links über 24 Bits (>>24, halten Sie einfach den Netzwerkteil für 10.210.177.47 innerhalb 10.0.0.0/8, das läßt 10 -.. Spiele von /24 wäre es 10.210.177 verlassen -. Keine Übereinstimmung