Επιλογή 1:Απλή IPv4 (καλό για γρήγορες και βρώμικες επιταγές)
Αυτό το regex λειτουργεί καλά για τις πιο συνηθισμένες διευθύνσεις IPv4, αλλά μπορεί να χάσει κάποιες περιπτώσεις άκρων (όπως διευθύνσεις με κορυφαία μηδενικά σε οκτάδες):
`` regex
\ b (?:\ d {1,3} \.) {3} \ d {1,3} \ b
`` `
* `\ b`:όριο λέξεων για την πρόληψη μερικών αγώνων (π.χ. αντιστοίχιση" 192.168.1.100 "μέσα στο" 192.168.1.1000 ").
* `(?:\ D {1,3} \.)`:Ομάδα μη-καπετάρωσης που ταιριάζει με ένα έως τρία ψηφία που ακολουθείται από μια κουκίδα (επαναλαμβανόμενη τρεις φορές).
* `\ d {1,3}`:Ένα έως τρία ψηφία για την τελευταία οκτάδα.
Επιλογή 2:ελαφρώς πιο ισχυρή IPv4
Αυτή η έκδοση προσθέτει κάποια επικύρωση για να αποφευχθεί οι αριθμοί που υπερβαίνουν τα 255:
`` regex
\ b (? :( ?:25 [0-5] | 2 [0-4] [0-9] | [01] [0-9] [0-9]?) \.
`` `
* `(?:25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9];
* 25 [0-5] `:Αριθμοί από 250 έως 255.
* `2 [0-4] [0-9]`:Αριθμοί από 200 έως 249.
* `[01]? [0-9] [0-9];`:Αριθμοί από 0 έως 199 (προαιρετικά οδηγώντας 0 ή 1).
Επιλογή 3:IPv4 και IPv6 (πολύ περίπλοκο)
Ένα regex που χειρίζεται με ακρίβεια * και οι δύο διευθύνσεις IPv4 και IPv6 είναι σημαντικά πιο περίπλοκες. Συνιστάται γενικά να χρησιμοποιείτε αποκλειστικές βιβλιοθήκες διευθύνσεων IP, αντί να βασίζεστε αποκλειστικά στο regex για αυτό το έργο. Ωστόσο, αν πρέπει απολύτως να χρησιμοποιήσετε ένα regex, να είστε προετοιμασμένοι για μια μακρά και δύσκολη έκφραση. Θα βρείτε παραδείγματα στο διαδίκτυο, αλλά δεν είναι εύκολα αναγνώσιμα ή συντηρητικά.
Σύσταση:
Για την περισσότερη ανάλυση αρχείων καταγραφής, Επιλογή 2 Παρέχει μια καλή ισορροπία μεταξύ ακρίβειας και απλότητας. Εάν χρειάζεται να χειριστείτε τις διευθύνσεις IPv6, χρησιμοποιήστε μια αποκλειστική βιβλιοθήκη διευθύνσεων IP στη γλώσσα προγραμματισμού σας (η ενότητα `iPaddress` της Python είναι ένα καλό παράδειγμα). Οι τακτικές εκφράσεις δεν είναι το ιδανικό εργαλείο για αυτό το περίπλοκο έργο.
Παράδειγμα χρήσης (Python):
`` `Python
εισαγωγή
log_line ="192.168.1.100 - - [10/Οκτ/2023:13:55:36 +0000] \" get/http/1.1 \ "200 1024"
Pattern =r "\ b (? :( ?:25 [0-5] | 2 [0-4] [0-9]
MATCH =RE.search (μοτίβο, log_line)
Εάν ταιριάζει:
ip_address =match.group (0)
Εκτύπωση (F "Διεύθυνση IP βρέθηκε:{ip_address}")
`` `
Θυμηθείτε να προσαρμόσετε το regex και τον κωδικό στη συγκεκριμένη μορφή αρχείου καταγραφής και τη γλώσσα προγραμματισμού.
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα