Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky

Domáce Hardware Siete Programovanie Softvér Otázka Systémy

Ako napíšete regulárny výraz tak, aby zodpovedal IP adrese v protokolovom súbore?

Najlepší regulárny výraz pre porovnávanie IP adries v protokolových súboroch závisí od úrovne prísnosti, ktorú potrebujete. Skutočne prísny regex pre všetky platné adresy IPv4 a IPv6 je mimoriadne zložitý a pravdepodobne nestojí za námahu pre väčšinu analýzy protokolov. Tu je niekoľko možností, ktoré postupujú od jednoduchších po zložitejšie:

Možnosť 1:Jednoduchý IPv4 (dobré pre rýchle a špinavé kontroly)

Tento regex funguje dobre pre najbežnejšie adresy IPv4, ale môže chýbať niektoré prípady okrajov (napríklad adresy s poprednými nulami v oktetoch):

`` regex

\ b (?:\ d {1,3} \.) {3} \ d {1,3} \ b

`` `

* `\ B`:Hranica slova na zabránenie čiastočným zápasom (napr. Zodpovedajúce" 192.168.1.100 "v rámci" 192.168.1.1000 ").

* `(?:\ d {1,3} \.)`:Nesprávna skupina zhodujúca sa jedna až tri číslice, po ktorých nasleduje bodka (opakovaná trikrát).

* `\ d {1,3}`:jedna až tri číslice pre posledný oktet.

Možnosť 2:Mierne robustnejšia IPv4

Táto verzia pridáva určitú validáciu, aby sa zabránilo číslám presahujúcim 255:

`` regex

\ b (? :(?:25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) \.) {3} (?:25 [0-5] | 2 [0-4] [0-9] |?

`` `

* `(?:25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?)`:To sa zhoduje s číslami od 0 do 255. Zvláda rôzne možnosti:

* `25 [0-5]`:Čísla od 250 do 255.

* `2 [0-4] [0-9]`:Čísla od 200 do 249.

* `[01]? [0-9] [0-9]?`:Čísla od 0 do 199 (voliteľné vedenie 0 alebo 1).

Možnosť 3:IPv4 a IPv6 (veľmi zložité)

Regex, ktorý presne spracováva * Adresy IPv4 aj IPv6, je výrazne komplikovanejšie. Všeobecne sa odporúča používať špecializované knižnice analyzovania IP adresy namiesto toho, aby sa na túto úlohu spoliehali výlučne na Regexa. Ak však musíte absolútne použiť regex, buďte pripravení na dlhý a nepraktický výraz. Nájdete príklady online, ale nie sú ľahko čitateľné alebo udržiavateľné.

Odporúčanie:

Pre väčšinu analýzy súborov protokolov, voľba 2 Poskytuje dobrú rovnováhu medzi presnosťou a jednoduchosťou. Ak potrebujete spracovať adresy IPv6, použite v programovacom jazyku špecializovanú analyzujúcu knižnicu IP adresy (modul Python's `iPaddress` je dobrým príkladom). Regulárne výrazy nie sú ideálnym nástrojom pre túto zložitú úlohu.

Príklad použitia (python):

`` `Python

importovať

log_line ="192.168.1.100 - - [10/Oct/2023:13:55:36 +0000] \" Get/http/1,1 \ "200 1024"

vzor =r "\ b (? :(?:25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) \.) {3} (?:25 [0-5] | 2 [0-4] [

match =re.search (vzor, ​​log_line)

Ak sa zhoduje:

ip_address =match.group (0)

Print (F "IP adresa sa zistila:{ip_address}")

`` `

Nezabudnite prispôsobiť regex a kód na svoj konkrétny formát súboru protokolov a programovací jazyk.

Najnovšie články

Copyright © počítačové znalosti Všetky práva vyhradené