Det bästa regelbundna uttrycket för att matcha IP -adresser i loggfiler beror på nivån på strikthet du behöver. En verkligt rigorös regex för alla giltiga IPv4- och IPv6 -adresser är extremt komplex och utan tvekan inte värt ansträngningen för de flesta loganalyser. Här är några alternativ som går från enklare till mer komplex:
Alternativ 1:Enkel IPv4 (bra för snabba och smutsiga kontroller)
Denna regex fungerar bra för de vanligaste IPv4 -adresserna men kan missa några kantfall (som adresser med ledande nollor i oktetter):
`` `Regex
\ B (?:\ D {1,3} \.) {3} \ D {1,3} \ B
`` `
* `\ B`:Ordgränsen för att förhindra partiella matchningar (t.ex. matchning" 192.168.1.100 "inom" 192.168.1.1000 ").
* `(?:\ D {1,3} \.)`:Icke-fångande grupp som matchar en till tre siffror följt av en prick (upprepad tre gånger).
* `\ D {1,3}`:En till tre siffror för den sista oktetten.
Alternativ 2:Lite mer robust IPv4
Denna version lägger till viss validering för att förhindra att siffror överstiger 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] | [01]? [0-9] [0-9]?) \ B BI BIB BIL [0-4] [0-9] | [01]? [0-9] [0-9]?) \ B.
`` `
* `(?:25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?)`:Detta matchar nummer från 0 till 255. Det hanterar de olika möjligheterna:
* `25 [0-5]`:siffror från 250 till 255.
* `2 [0-4] [0-9]`:siffror från 200 till 249.
* `[01]? [0-9] [0-9]?`:Siffror från 0 till 199 (valfritt ledande 0 eller 1).
Alternativ 3:IPv4 och IPv6 (mycket komplex)
En regex som exakt hanterar * både * IPv4- och IPv6 -adresser är betydligt mer komplicerade. Det rekommenderas i allmänhet att använda dedikerade IP -adressparingsbibliotek istället för att bara förlita sig på regex för denna uppgift. Men om du absolut måste använda en regex, var du beredd på ett långt och svårt uttryck. Du hittar exempel online, men de är inte lätt läsbara eller underhållbara.
Rekommendation:
För de flesta loggfilanalyser, Alternativ 2 Ger en bra balans mellan noggrannhet och enkelhet. Om du behöver hantera IPv6 -adresser använder du ett dedikerat IP -adress -parsingbibliotek i ditt programmeringsspråk (Pythons "iPaddress" -modul är ett bra exempel). Regelbundna uttryck är inte det perfekta verktyget för denna komplexa uppgift.
Exempelanvändning (Python):
`` `python
importera
LOG_LINE ="192.168.1.100 - - [10/OCT/2023:13:55:36 +0000] \" GET/HTTP/1.1 \ "200 1024"
mönster =r "\ b (? :(?:25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) \.) {3} (?:25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) \ B"
match =re.search (mönster, log_line)
om match:
ip_address =match.group (0)
Skriv ut (F "IP -adress hittades:{ip_address}")
`` `
Kom ihåg att anpassa regex och kod till ditt specifika loggfilformat och programmeringsspråk.