Wie Sie feststellen, ob meine internet-IP gehört zu einer bestimmten IP-Liste mit Qt
Habe ich folgende IP-Liste (in CIDR-format) gespeichert wird in einer TXT-Datei:<
58.200.0.0/13
202.115.0.0/16
121.48.0.0/15
219.224.128.0/18
...
Aber ich weiß nicht, wie kann ich feststellen, ob meine IP gehört zu dieser Liste. Ich benutze den Qt-C++ framework das auf Windows-Plattform.
- Was haben Sie versucht,? Brechen Sie Ihr problem in einfache Schritte, und füllen Sie Sie eins nach dem anderen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuerst müssen Sie brechen jedes CIDR-notation-Bereich in einem Netzwerk (die gepunktete IP-Adresse) Teil, und eine Anzahl von bits. Verwenden Sie diese Anzahl von bits, die zum generieren der Maske. Dann brauchen Sie nur noch zu testen, ob
(range & mask) == (your_ip & mask)
, genauso wie Ihr Betriebssystem funktioniert:Einige Pseudo-C-code:
Können Sie wahrscheinlich finden eine Bibliothek, um Ihnen zu helfen mit diesem. Steigern scheint, eine IP4-Klasse die
<
und>
Betreiber. Aber werden Sie noch brauchen, um Arbeit zu tun, der mit der CIDR-notation an.Ref:
Fuß durch die Qt-Dokumentation stieß ich auf QHostAddress::parseSubnet(const QString & subnet), die können einen CIDR-Stil-IP-Bereich und ist neu in Qt 4.5. So konnte ich den folgenden code schreiben, um es zu lösen: (angenommen, myIP ist der Typ QHostAddress)
Als für ein besseres Verständnis und Einblicke in das problem, @Jonathon Reinhart 's Antwort ist wirklich hilfreich.
Den vorherigen Antworten bereits abgedeckt, Umwandlung von text-zu-IP-address-Klasse. Sie können den Bereich mit QHostAddress::isInSubnet(). Diese gibt true zurück, wenn Ihre IP-Adresse in die Adresse und Maske zur Verfügung gestellt.
Zum Beispiel, hier ist ein Beispiel, das prüft, ob eine IP-Adresse ist zeroconfig (169.254.1.0 bis 169.254.254.255):