Private IP-Adressen-ID in regulärem Ausdruck
Frage ich mich, ob dies ist der beste Weg, um match-eine Zeichenfolge, die beginnt mit einer privaten IP-Adresse (Perl-Stil reguläre Ausdrücke):
(^127\.0\.0\.1)|(^192\.168)|(^10\.)|(^172\.1[6-9])|(^172\.2[0-9])|(^172\.3[0-1])
Vielen Dank!
Kommentar zu dem Problem - Öffnen
Zuerst sollten Sie überprüfen, RFC1918, um die richtige Liste. Zweitens, schlage ich vor, dass eine Lösung, die nicht mit regexps werden, sind leichter zu pflegen. Sobald Sie konvertieren Sie eine IP-Adresse numerische, ist es ziemlich einfach, eine übereinstimmung mit einer Liste von privaten IP-Bereiche. Dies lässt Sie auch ganz einfach die öffentlich verfügbaren bogon-Listen, die enthalten viel mehr als RFC1918.
@derobert wahr, aber für Anwendungen, wie eine Tomcat Remote-Adress-Filter Sie benötigen einen regulären Ausdruck.
Es ist ein weit verbreiteter Anfänger-Fehler, zu denken,
^
bedeutet "nicht" in diesem Kontext, so trägt er wies darauf hin: Jeder ^
in Ihrem Ausdruck einfach Anker das match an den Anfang der Zeile. In der traditionellen regex, es gibt keinen einfachen Weg zu sagen, "nicht diese Zeichenfolge" obwohl Perl-kompatibles / PCRE-Ausdrücken negative lookaheads mit (?!...)
InformationsquelleAutor der Frage caseyamcl | 2010-05-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nehme an, Sie wollen mit diesen Bereichen:
Fehlen Ihnen einige Punkte dazu führen würde, dass Sie es zu akzeptieren, zum Beispiel
172.169.0.0
auch wenn diese nicht akzeptiert werden sollte. Ich habe es fest unten. Entfernen Sie die neuen Linien, es ist nur für die Lesbarkeit.Beachten Sie auch, dass hier davon ausgegangen, dass die IP-Adressen wurden bereits überprüft - es nimmt die Dinge, wie
10.foobar
.InformationsquelleAutor der Antwort Mark Byers
Dies ist die gleiche wie die richtige Antwort von Mark, aber jetzt auch mit IPv6 private Adressen.
InformationsquelleAutor der Antwort Edward
Habe ich generiert diese
REGEXP FÜR KLASSE-A-NETZE :
(10)(\.([2]([0-5][0-5]|[01234][6-9])|[1][0-9][0-9]|[1-9][0-9]|[0-9])){3}
REGEXP FÜR KLASSE-B-NETZE :
(172)\.(1[6-9]|2[0-9]|3[0-1])(\.([2][0-5][0-5]|[1][0-9][0-9]|[1-9][0-9]|[0-9])){2}
REGEXP FÜR KLASSE C-NETZE :
(192)\.(168)(\.[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]){2}
Lassen Sie mich wissen, wenn Sie begegnen Fehler
Wenn Sie sicher sind, dass Ihre Ausgaben (zum Beispiel sagen, netstat) und Sie haben keine Notwendigkeit zu prüfen über die IP-Adresse Gültigkeit, weil es bereits geschehen ist, dann können Sie fangen die privaten ip-Adressen mit dieser Formel
grep -P "(10.|192.168|172.1[6-9].|172.2[0-9].|172.3[01].).* "
InformationsquelleAutor der Antwort user3177026
Dies ist für den Fall, Sie entscheiden, zu gehen mit meinem Kommentar, was darauf hindeutet, die Sie nicht verwenden regexps. Ungetestet (aber wahrscheinlich funktioniert, oder zumindest in der Nähe), in Perl:
Beachten Sie nun, wie
@private
nur Daten, die Sie leicht ändern. Oder downloaden Sie on-the-fly aus der Cymru Bogon Referenz.edit: mir fällt auf, dass zu Fragen für eine Perl-regexp bedeutet nicht, dass Sie wissen, Perl, also der Schlüssel Linie ist es ist die 'grep', die nur loops über jeden privaten Adressbereich. Nehmen Sie Ihre IP, die bitweise und-Verknüpfung mit der Netzmaske und vergleichen Sie die Netzwerk-Adresse. Wenn Sie gleich sind, seinen Teil des privaten Netzwerks.
InformationsquelleAutor der Antwort derobert
Richtig aussieht. Persönlich würde ich ändern, das erste:
Mit dabei:
(^127\.0\.0\.1)
Sie auf der Suche nach etwas, das beginnt mit127.0.0.1
und verpassen127.0.0.2*
,127.0.2.*
,127.0.*
etc.InformationsquelleAutor der Antwort KM.
Wenn Sie auf der Suche für system.net defaultProxy-und proxy-Umgehungsliste config, dass ein proxy verwendet wird für die externe, sondern verwendet die direkte verbindungen für interne hosts (tun konnte, mit einigen ipv6-Unterstützung)...
InformationsquelleAutor der Antwort Mhano
hier ist, was ich in python verwenden:
Können Sie entfernen Sie die ^ und/oder $ Anker, wenn Sie es wünschen.
Bevorzuge ich die oben genannten regex, weil es Unkraut aus ungültigen Bytes (alles über 255).
Beispiel:
InformationsquelleAutor der Antwort Josh Worley
InformationsquelleAutor der Antwort HellKnight Hicks
FWIW dieses Muster war über 10% schneller mit
pattern.matcher
:InformationsquelleAutor der Antwort scott