В настоящее время я сформировал KQL, который извлекает адрес ipv4 из строки. аналогично мне нужно было бы извлечь адрес ipv6 из строки
запрос извлечения ipv4:
datatable (ipv4text:string)
[
'This is a random text that has IP address 128.0.0.20 that has to be extracted'
]
|extend pv4addr = extract("(([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.(([0-9]{1,3})))",1,ipv4text)
Я пробовал ниже, но не уверен, что он охватывает все крайние случаи.
datatable (ipv6:string)
[
'IPv6 test 198.192.0.127 2345:5:2CA1:0000:0000:567:5673:256/127 in a random string'
]
|extend Ipv6Address = extract(@"(([0-9a-fA-F]{1,4}\:){7,7}[0-9a-fA-F]{1,4})|([0-9a-fA-F]{1,4}\:){1,7}\:",1,ipv6)
Может ли кто-нибудь из вас предоставить полный KQL (или предложения/подсказки) для извлечения адреса IPV6?
Спасибо.
Шаблоны регулярных выражений можно упростить.
Ниже приведены «счастливые пути». Если он есть, он будет извлечен.
Теоретически вы можете получить ложные срабатывания, хотя с реальными данными это менее вероятно.
При необходимости мы можем добавить несколько слоев защиты.
datatable (ipv4text:string)
[
'This is a random text that has IP address 128.0.0.20 that has to be extracted'
]
| project pv4addr = extract(@"(\d{1,3}\.){3}\d{1,3}", 0, ipv4text)
IPV6 может стать беспорядком (см. https://en.wikipedia.org/wiki/IPv6_address#Representation).
Я бы нашел полное представление IPV6 (8 токенов xdigit, разделенных двоеточием) или любое выражение, построенное из xdigit/colon/period, которое содержит 2 соседних двоеточия.
datatable (ipv6:string)
[
'IPv6 test 198.192.0.127 2345:5:2CA1:0000:0000:567:5673:256/127 in a random string'
,'IPv6 test 198.192.0.127 2345:5:2CA1::567:5673:256/127 in a random string'
,'IPv6 test 198.192.0.127 ::ffff:198.192.0.127 in a random string'
,'IPv6 test 198.192.0.127 ::1 in a random string'
,'IPv6 test 198.192.0.127 :: in a random string'
]
| project pv6addr = extract(@"([[:xdigit:]]{1,4}:){7}[[:xdigit:]]{1,4}|[[:xdigit:]:.]*::[[:xdigit:]:.]*", 0, ipv6)
У меня есть несколько исчерпывающих регулярных выражений IP в этом ответе . Регулярное выражение IPv6 обрабатывает все допустимые текстовые представления IPv6 (расширенное, сжатое, расширенное смешанное и сжатое смешанное). Я использую регулярные выражения в своем IPvX IP-калькуляторе.