פונקציות
בקטע הזה מפורטות הפונקציות של YARA-L 2.0 שאפשר להשתמש בהן בשאילתות של כללים, חיפוש ומרכז בקרה.
פרטים על פונקציות מצטברות מופיעים במאמר נתונים סטטיסטיים וצבירות בחיפוש.
אפשר להשתמש בפונקציות האלה בחלקים הבאים של שאילתת YARA-L:
- קטע של
events -
BOOL_CLAUSEשל תנאי בקטע התוצאה
arrays.concat
arrays.concat(string_array, string_array)
תיאור
הפונקציה מחזירה מערך מחרוזות חדש על ידי העתקת רכיבים ממערכי מחרוזות מקוריים.
סוגי נתונים של פרמטרים
ARRAY_STRINGS, ARRAY_STRINGS
סוג הערך שמוחזר
ARRAY_STRINGS
דוגמאות קוד
דוגמה 1
בדוגמה הבאה מתבצעת שרשור של שני מערכים שונים של מחרוזות.
arrays.concat(["test1", "test2"], ["test3"]) = ["test1", "test2", "test3"]
דוגמה 2
בדוגמה הבאה, מתבצעת שרשור של מערכים עם מחרוזת ריקה.
arrays.concat([""], [""]) = ["", ""]
דוגמה 3
בדוגמה הבאה, מתבצעת שרשור של מערכים ריקים.
arrays.concat([], []) = []
arrays.index_to_float
arrays.index_to_float(array, index)
תיאור
מחזירה את הרכיב באינדקס הנתון של מערך. הרכיב באינדקס הזה מוחזר כמספר עשרוני.
האינדקס הוא ערך מספרי שלם שמייצג את המיקום של רכיב במערך. כברירת מחדל, לאלמנט הראשון במערך יש אינדקס של 0, ולאלמנט האחרון יש אינדקס של n-1, כאשר n הוא גודל המערך. אינדקס שלילי מאפשר גישה לאלמנטים במערך ביחס לסוף המערך. לדוגמה, אינדקס של -1 מתייחס לאלמנט האחרון במערך, ואינדקס של -2 מתייחס לאלמנט הלפני האחרון במערך.
סוגי נתונים של פרמטרים
ARRAY_STRINGS|ARRAY_INTS|ARRAY_FLOATS, INT
סוג הערך שמוחזר
FLOAT
דוגמאות קוד
דוגמה 1
בדוגמה הבאה מאחזרים אלמנט באינדקס 1 ממערך של מספרים ממשיים.
arrays.index_to_float([1.2, 2.1, 3.5, 4.6], 1) // 2.1
דוגמה 2
בדוגמה הבאה מתבצעת אחזור של אלמנט באינדקס -1 ממערך של מספרים ממשיים.
arrays.index_to_float([1.2, 2.1, 3.5, 4.6], 0-1) // 4.6
דוגמה 3
בדוגמה הבאה מתבצעת אחזור של רכיב לאינדקס שגדול מגודל המערך.
arrays.index_to_float([1.2, 2.1, 3.5, 4.6], 6) // 0.0
דוגמה 4
בדוגמה הבאה מאחזרים רכיב ממערך ריק.
arrays.index_to_float([], 0) // 0.0
דוגמה 5
בדוגמה הבאה מאחזרים רכיב באינדקס 1 ממערך מחרוזות.
arrays.index_to_float(["1.2", "3.3", "2.4"], 1) // 3.3
דוגמה 6
בדוגמה הבאה מתבצעת אחזור של אלמנט באינדקס 2 ממערך של מספרים שלמים.
arrays.index_to_float([1, 3, 2], 2) // 2.0
arrays.index_to_int
arrays.index_to_int(array_of_inputs, index)
תיאור
הפונקציה מחזירה את הערך באינדקס נתון במערך כמספר שלם.
האינדקס הוא ערך מספרי שלם שמייצג את המיקום של רכיב במערך. כברירת מחדל, לאלמנט הראשון במערך יש אינדקס של 0, ולאלמנט האחרון יש אינדקס של n-1, כאשר n הוא גודל המערך. אינדקס שלילי מאפשר גישה לאלמנטים במערך ביחס לסוף המערך. לדוגמה, אינדקס של -1 מתייחס לאלמנט האחרון במערך, ואינדקס של -2 מתייחס לאלמנט הלפני האחרון במערך.
סוגי נתונים של פרמטרים
ARRAY_STRINGS|ARRAY_INTS|ARRAY_FLOATS, INT
סוג הערך שמוחזר
INT
דוגמאות קוד
דוגמה 1
הקריאה לפונקציה הזו מחזירה 0 כשהערך באינדקס הוא מחרוזת לא מספרית.
arrays.index_to_int(["str0", "str1", "str2"], 1) = 0
דוגמה 2
הפונקציה הזו מחזירה את הרכיב באינדקס -1.
arrays.index_to_int(["44", "11", "22", "33"], 0-1) = 33
דוגמה 3
מחזירה 0 עבור הרכיב שחורג מהגבולות.
arrays.index_to_int(["44", "11", "22", "33"], 5) = 0
דוגמה 4
הפונקציה הזו מאחזרת את הרכיב ממערך המספרים הממשיים באינדקס 1.
arrays.index_to_int([1.100000, 1.200000, 1.300000], 1) = 1
דוגמה 5
הפונקציה הזו מאחזרת את הרכיב ממערך המספרים השלמים באינדקס 0.
arrays.index_to_int([1, 2, 3], 0) = 1
arrays.index_to_str
arrays.index_to_str(array, index)
תיאור
הפונקציה מחזירה את הרכיב באינדקס הנתון מהמערך כמחרוזת. האינדקס הוא ערך מספרי שלם שמייצג את המיקום של רכיב במערך. כברירת מחדל, לאלמנט הראשון במערך יש אינדקס של 0, ולאלמנט האחרון יש אינדקס של n-1, כאשר n הוא גודל המערך. אינדקס שלילי מאפשר גישה לאלמנטים במערך מהסוף של המערך. לדוגמה, אינדקס של -1 מתייחס לאלמנט האחרון במערך, ואינדקס של -2 מתייחס לאלמנט הלפני האחרון במערך.
סוגי נתונים של פרמטרים
ARRAY_STRINGS|ARRAY_INTS|ARRAY_FLOATS, INT
סוג הערך שמוחזר
STRING
דוגמאות קוד
דוגמה 1
בדוגמה הבאה מאחזרים רכיב באינדקס 1 ממערך של מחרוזות.
arrays.index_to_str(["test1", "test2", "test3", "test4"], 1) // "test2"
דוגמה 2
בדוגמה הבאה מתבצעת אחזור של אלמנט באינדקס -1 (האלמנט האחרון במערך) ממערך של מחרוזות.
arrays.index_to_str(["test1", "test2", "test3", "test4"], 0-1) // "test4"
דוגמה 3
בדוגמה הבאה מתבצעת אחזור של רכיב לאינדקס שגדול מהגודל של המערך, והפונקציה מחזירה מחרוזת ריקה.
arrays.index_to_str(["test1", "test2", "test3", "test4"], 6) // ""
דוגמה 4
בדוגמה הבאה מאחזרים רכיב ממערך ריק.
arrays.index_to_str([], 0) // ""
דוגמה 5
בדוגמה הבאה מאחזרים רכיב באינדקס 0 ממערך של מספרים ממשיים. הפלט מוחזר כמחרוזת.
arrays.index_to_str([1.200000, 3.300000, 2.400000], 0) // "1.2"
דוגמה 6
בדוגמה הבאה מתבצעת אחזור של אלמנט באינדקס 2 ממערך של מספרים שלמים. הפלט הוא מחרוזת.
arrays.index_to_str([1, 3, 2], 2) // "2"
arrays.join_string
arrays.join_string(array_of_strings, optional_delimiter)
תיאור
הפונקציה ממירה מערך של מחרוזות למחרוזת אחת שמופרדת על ידי הפרמטר האופציונלי. אם לא מציינים תו מפריד, המערכת משתמשת במחרוזת ריקה.
סוגי נתונים של פרמטרים
ARRAY_STRINGS, STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
הנה כמה דוגמאות לשימוש בפונקציה:
דוגמה 1
בדוגמה הזו מתבצע איחוד של מערך עם רכיבים שאינם null ותו מפריד.
arrays.join_string(["foo", "bar"], ",") = "foo,bar"
דוגמה 2
בדוגמה הזו, מתבצע איחוד של מערך עם רכיב null ותו הפרדה.
arrays.join_string(["foo", NULL, "bar"], ",") = "foo,bar"
דוגמה 3
בדוגמה הזו, מתבצע איחוד של מערך עם רכיבים שהם לא null, ללא תו מפריד.
arrays.join_string(["foo", "bar"]) = "foobar"
arrays.length
arrays.length(repeatedField)
תיאור
הפונקציה מחזירה את מספר האלמנטים של שדה חוזר.
סוגי נתונים של פרמטרים
LIST
סוג הערך שמוחזר
NUMBER
דוגמאות קוד
דוגמה 1
הפונקציה מחזירה את מספר האלמנטים של שדה חוזר.
arrays.length($e.principal.ip) = 2
דוגמה 2
אם יש כמה שדות חוזרים בנתיב, הפונקציה מחזירה את המספר הכולל של רכיבי השדה החוזר.
arrays.length($e.intermediary.ip) = 3
arrays.max
arrays.max(array_of_ints_or_floats)
תיאור
הפונקציה מחזירה את הרכיב הגדול ביותר במערך, או אפס אם המערך ריק.
סוגי נתונים של פרמטרים
ARRAY_INTS|ARRAY_FLOATS
סוג הערך שמוחזר
FLOAT
דוגמאות קוד
הנה כמה דוגמאות לשימוש בפונקציה:
דוגמה 1
בדוגמה הזו, הפונקציה מחזירה את הרכיב הגדול יותר במערך של מספרים שלמים.
arrays.max([10, 20]) = 20.000000
דוגמה 2
בדוגמה הזו, הפונקציה מחזירה את הרכיב הגדול יותר במערך של מספרים ממשיים.
arrays.max([10.000000, 20.000000]) = 20.000000
arrays.min
arrays.min(array_of_ints_or_floats[, ignore_zeros=false])
תיאור
הפונקציה מחזירה את הרכיב הקטן ביותר במערך, או אפס אם המערך ריק. אם הארגומנט השני האופציונלי מוגדר כ-True, המערכת מתעלמת מרכיבים ששווים לאפס.
סוגי נתונים של פרמטרים
ARRAY_INTS|ARRAY_FLOATS, BOOL
סוג הערך שמוחזר
FLOAT
דוגמאות קוד
הנה כמה דוגמאות לשימוש בפונקציה:
דוגמה 1
בדוגמה הזו, הפונקציה מחזירה את הרכיב הקטן ביותר במערך של מספרים שלמים.
arrays.min([10, 20]) = 10.000000
דוגמה 2
בדוגמה הזו, הפונקציה מחזירה את הרכיב הקטן ביותר במערך של מספרים עשרוניים.
arrays.min([10.000000, 20.000000]) = 10.000000
דוגמה 3
בדוגמה הזו, הפונקציה מחזירה את הרכיב הקטן ביותר במערך של מספרים עשרוניים, תוך התעלמות מהאפסים.
arrays.min([10.000000, 20.000000, 0.0], true) = 10.000000
arrays.size
arrays.size( array )
תיאור
הפונקציה מחזירה את הגודל של המערך. אם המערך ריק, הפונקציה מחזירה 0.
סוגי נתונים של פרמטרים
ARRAY_STRINGS|ARRAY_INTS|ARRAY_FLOATS
סוג הערך שמוחזר
INT
דוגמאות קוד
דוגמה 1
בדוגמה הזו נעשה שימוש במערך מחרוזות שמכיל שני רכיבים.
arrays.size(["test1", "test2"]) = 2
דוגמה 2
בדוגמה הזו נעשה שימוש במערך int שמכיל 3 רכיבים.
arrays.size([1, 2, 3]) = 3
דוגמה 3
בדוגמה הזו נעשה שימוש במערך של מספרים ממשיים שמכיל אלמנט אחד
arrays.size([1.200000]) = 1
דוגמה 4
בדוגמה הזו נעשה שימוש במערך ריק.
arrays.size([]) = 0
bytes.to_base64
bytes.to_base64(bytes, optional_default_string)
תיאור
הפונקציה ממירה ערך bytes לערך base64 encoded string. קריאות לפונקציות עם ערכים שלא ניתן להמיר מחזירות כברירת מחדל מחרוזת ריקה.
סוגי נתונים של פרמטרים
BYTES, STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
בייטים בינאריים גולמיים למחרוזת בקידוד Base64
הפונקציה ממירה את הבייטים הבינאריים הגולמיים למחרוזת מקודדת בפורמט Base64.
bytes.to_base64(b'000000006f8ec5586d026f9ddac56e9f2fe15b8a0000000001000000cd000000) = "AAAAAG+OxVhtAm+d2sVuny/hW4oAAAAAAQAAAM0AAAA="
ההמרה נכשלה (ברירת המחדל היא המחרוזת שסופקה באופן אופציונלי)
אם הערך של הבייטים לא תקין, הפונקציה מחזירה כברירת מחדל את הערך "invalid bytes".
bytes.to_base64(b'000000006f8ec5586d", "invalid bytes") = "invalid bytes"
cast.as_bool
cast.as_bool(string_or_int)
תיאור
הפונקציה ממירה ערך מסוג int או string לערך בוליאני. קריאות לפונקציות עם ערכים שלא ניתן להמיר יחזירו FALSE. הפונקציה מחזירה TRUE רק עבור המספר השלם 1 ועבור המחרוזת 'true' (לא משנה אם האותיות רישיות או קטנות).
סוגי נתונים של פרמטרים
INT|STRING
סוג הערך שמוחזר
BOOL
דוגמאות קוד
דוגמה 1
בדוגמה הזו מוסבר איך להמיר מחרוזת שאינה בוליאנית
cast.as_bool("123") = false
דוגמה 2
מספר שלם שערך האמת שלו הוא True (1)
cast.as_bool(1) = true
דוגמה 3
מחרוזת Truthy
cast.as_bool("true") = true
דוגמה 4
מחרוזת אמיתית באותיות רישיות
cast.as_bool("TRUE") = true
דוגמה 5
מספר שלם שלילי
cast.as_bool(0-1) = false
דוגמה 6
מספר שלם שגוי (0)
cast.as_bool(0) = false
דוגמה 7
מחרוזת ריקה
cast.as_bool("") = false
cast.as_float
cast.as_float(string_to_cast)
תיאור
הפונקציה ממירה מחרוזת מספרית למספר עשרוני. כל קריאה לפונקציה עם ערכים שלא ניתן להמיר מחזירה 0. מספרים צפים שומרים על דיוק של עד 7 ספרות אחרי הנקודה העשרונית.
סוגי נתונים של פרמטרים
STRING
סוג הערך שמוחזר
FLOAT
דוגמאות קוד
דוגמה 1
המרת מחרוזת לא מספרית מחזירה 0.
cast.as_float("str") = 0.0000000
דוגמה 2
המרת מחרוזת ריקה מחזירה 0.
cast.as_float("") = 0.0000000
דוגמה 3
המרת מחרוזת מספרית תקינה מחזירה ערך מסוג float.
cast.as_float("1.012345678") = 1.0123456
cast.as_int
cast.as_int(string_to_cast)
תיאור
הפונקציה ממירה מחרוזת מספרית למספר שלם. כל קריאה לפונקציה עם ערכים שלא ניתן להמיר תחזיר 0.
סוגי נתונים של פרמטרים
STRING
סוג הערך שמוחזר
FLOAT
דוגמאות קוד
דוגמה 1
המרת מחרוזת לא מספרית מחזירה 0.
cast.as_int("str") = 0
דוגמה 2
המרת מחרוזת ריקה מחזירה 0.
cast.as_int("") = 0
דוגמה 3
המרת מחרוזת מספרית תקינה מחזירה ערך של מספר שלם.
cast.as_int("2.012345678") = 2
cast.as_string
cast.as_string(int_or_bytes_or_bool, optional_default_string)
תיאור
הפונקציה cast.as_string ממירה ערך מסוג INT, BYTES או BOOL לייצוג המחרוזתי שלו. אפשר לספק ארגומנט אופציונלי default_string כדי לטפל במקרים שבהם ההמרה נכשלת. אם משמיטים את הארגומנט default_string, או אם הקלט הוא רצף בייטים לא תקין של UTF-8 או BASE64, הפונקציה מחזירה מחרוזת ריקה.
סוגי נתונים של פרמטרים
INT|BYTES|BOOL, STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
המרת מספר שלם למחרוזת
הפונקציה ממירה את המספר השלם 123 למחרוזת "123".
cast.as_string(123) = "123"
המרת בייטים למחרוזת
הפונקציה ממירה את הערך הבינארי הגולמי b'01 למחרוזת "\x01".
cast.as_string(b'01, "") = "\x01"
המרה מבוליאני למחרוזת
הפונקציה ממירה את הערך הבוליאני true למחרוזת "true".
cast.as_string(true, "") = "true"
ההמרה נכשלה (ברירת המחדל היא המחרוזת שסופקה באופן אופציונלי)
אם הערך שצוין לא תקין, הפונקציה מחזירה כברירת מחדל את המחרוזת "casting error".
cast.as_string(9223372036854775808, "casting error") = "casting error"
טביעת אצבע
hash.fingerprint2011(byteOrString)
תיאור
הפונקציה מחשבת את הגיבוב (hash) של רצף בייטים או מחרוזת קלט. הפונקציה מחזירה ערך INT לא חתום בטווח [2, 0xFFFFFFFFFFFFFFFF].fingerprint2011
סוגי נתונים של פרמטרים
BTYE, STRING
סוג הערך שמוחזר
INT
דוגמת קוד
id_fingerprint = hash.fingerprint2011("user123")
קבוצה
group(field1, field2, field3, ...)
תיאור
מקבצים שדות מאותו סוג למשתנה placeholder.
בחיפוש UDM, נעשה שימוש בשדות מקובצים כדי לחפש בכמה שדות מאותו סוג. הפונקציה group דומה לשדות מקובצים, אבל היא מאפשרת לכם לבחור אילו שדות לקבץ יחד כדי להפעיל זיהוי. אפשר להשתמש בפונקציית הקבוצה כדי לאסוף מידע על ישות ספציפית (לדוגמה, שם מארח, כתובת IP או מזהה משתמש) בסוגים שונים של שמות עצם.
סוג הפרמטר:
Event typeסוג ההחזרה:
Grouped event fields
דוגמאות קוד
דוגמה: צבירה וספירה של כתובות IP
לקבץ את כל כתובות ה-IP ולספק ספירה בסדר יורד של כתובות ה-IP הנפוצות ביותר בטווח הזמן שנסרק.
$ip = group(principal.ip, about.ip, target.ip)
$ip != ""
match:
$ip
outcome:
$count = count_distinct(metadata.id)
order:
$count desc
דוגמה: ספירת אירועים נפרדים לכל כתובת IP
בדוגמה הבאה, הפונקציה group() אוספת את כל כתובות ה-IP שנמצאות בשדות principal.ip, target.ip ו-src.ip בכל האירועים שהפעילו את הזיהוי. לאחר מכן, כתובות ה-IP מתווספות למשתנה placeholder $ip. אחר כך, הכלל מתאים לכתובת ה-IP ומחזיר ספירה של אירועים נפרדים לכל כתובת IP ייחודית.
$ip = group(detection.collection_elements.references.event.principal.ip, detection.collection_elements.references.event.target.ip, detection.collection_elements.references.event.src.ip)
$ip != ""
match:
$ip
outcome:
$count = count_distinct(detection.id)
order:
$count desc
// Detection1: principal.ip = 1.1.1.1
// Detection2: src.ip = 1.1.1.1, target.ip = 2.2.2.2
// Detection3: target.ip = 1.1.1.1
// Detection4: principal.ip = 2.2.2.2
תוצאה:
$ip |
$count |
|---|---|
| 1.1.1.1 | 3 |
| 2.2.2.2 | 2 |
hash.sha256
hash.sha256(string)
תיאור
הפונקציה מחזירה גיבוב SHA-256 של מחרוזת הקלט.
סוגי נתונים של פרמטרים
STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
דוגמה 1
בדוגמה הזו מוצג גיבוב SHA-256 כשהקלט הוא מחרוזת תקינה.
hash.sha256("str") = "8c25cb3686462e9a86d2883c5688a22fe738b0bbc85f458d2d2b5f3f667c6d5a"
דוגמה 2
בדוגמה הזו מוצג גיבוב SHA-256 כשהקלט הוא מחרוזת ריקה.
hash.sha256("") = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
math.abs
math.abs(numericExpression)
תיאור
הפונקציה מחזירה את הערך המוחלט של ביטוי מסוג integer או float.
סוגי נתונים של פרמטרים
NUMBER
סוג הערך שמוחזר
NUMBER
דוגמאות קוד
דוגמה 1
בדוגמה הזו, הפונקציה מחזירה True אם האירוע התרחש יותר מ-5 דקות מהזמן שצוין (בשניות מאז תקופת Unix), בלי קשר לשאלה אם האירוע התרחש לפני או אחרי הזמן שצוין. ההתקשרות אל math.abs לא יכולה להיות תלויה בכמה משתנים או פלייסהולדרים. לדוגמה, אי אפשר להחליף את ערך הזמן המוצפן 1643687343 בדוגמה הבאה ב-$e2.metadata.event_timestamp.seconds.
300 < math.abs($e1.metadata.event_timestamp.seconds - 1643687343)
math.ceil
math.ceil(number)
תיאור
הפונקציה מחזירה את המספר השלם הקטן ביותר שלא קטן מהמספר שצוין (עיגול כלפי מעלה). הפונקציה תחזיר 0 אם קלט הוא null או גדול מדי מכדי להיכנס ל-int64.
סוגי נתונים של פרמטרים
FLOAT
סוג הערך שמוחזר
INT
דוגמאות קוד
בקטע הזה מופיעות דוגמאות לשימוש ב-math.ceil.
דוגמה 1
בדוגמה הזו, הפונקציה מחזירה את הערך העליון של מספר שלם.
math.ceil(2.000000) = 2
דוגמה 2
בדוגמה הזו מוחזר הערך העליון של מספר שלילי.
math.ceil(0-1.200000) = -1
דוגמה 3
בדוגמה הזו, הפונקציה מחזירה 0 כי המספר גדול מדי בשביל מספר שלם של 64 ביט.
math.ceil(184467440737095516160.0) = 0
math.floor
math.floor(float_val)
תיאור
הפונקציה מחזירה את הערך השלם הגדול ביותר שלא גדול מהערך שצוין (עיגול כלפי מטה). הפונקציה מחזירה 0 אם הקלט הוא null או גדול מדי מכדי להיכנס ל-int64.
סוגי נתונים של פרמטרים
FLOAT
סוג הערך שמוחזר
INT
דוגמאות קוד
דוגמה 1
בדוגמה הזו מוצג מקרה של מספר חיובי.
math.floor(1.234568) = 1
דוגמה 2
בדוגמה הזו מוצג מקרה של מספר שלילי.
math.floor(0-1.234568) = -2
דוגמה 3
בדוגמה הזו מוצג מקרה של אפס.
math.floor(0.000000) = 0
math.geo_distance
math.geo_distance(longitude1, latitude1, longitude2, latitude2))
תיאור
הפונקציה מחזירה את המרחק בין שני מיקומים גיאוגרפיים (קואורדינטות) במטרים. הפונקציה מחזירה -1 אם הקואורדינטות לא תקינות.
סוגי נתונים של פרמטרים
FLOAT, FLOAT, FLOAT, FLOAT
סוג הערך שמוחזר
FLOAT
דוגמאות קוד
דוגמה 1
בדוגמה הבאה מוצג המרחק כשכל הפרמטרים הם קואורדינטות תקינות:
math.geo_distance(-122.020287, 37.407574, -122.021810, 37.407574) = 134.564318
דוגמה 2
בדוגמה הבאה מוצג המרחק כשמציינים קואורדינטה קטומה כאחד מהפרמטרים:
math.geo_distance(-122.000000, 37.407574, -122.021810, 37.407574) = 1926.421905
דוגמה 3
בדוגמה הבאה, הפונקציה מחזירה -1 כי אחד מהפרמטרים הוא קואורדינטה לא תקינה:
math.geo_distance(0-122.897680, 37.407574, 0-122.021810, 97.407574) = -1.000000
דוגמה 4
בדוגמה הבאה מוחזר הערך 0 כשהקואורדינטות זהות:
math.geo_distance(-122.897680, 37.407574, -122.897680, 37.407574) = 0.000000
math.is_increasing
math.is_increasing(num1, num2, num3)
תיאור
הפונקציה מקבלת רשימה של ערכים מספריים (מספרים שלמים או מספרים עם נקודה עשרונית) ומחזירה True אם הערכים מסודרים בסדר עולה, ומחזירה False אחרת.
סוגי נתונים של פרמטרים
INT|FLOAT, INT|FLOAT, INT|FLOAT
סוג הערך שמוחזר
BOOL
דוגמאות קוד
דוגמה 1
הדוגמה הזו כוללת ערכים שנראים כמו חותמות זמן בשניות.
math.is_increasing(1716769112, 1716769113, 1716769114) = true
דוגמה 2
בדוגמה הזו יש ערך שלילי אחד מסוג double, ערך אפס אחד מסוג INT64 וערך חיובי אחד מסוג INT64.
math.is_increasing(-1.200000, 0, 3) = true
דוגמה 3
בדוגמה הזו יש ערך שלילי מסוג double, ערך אפס מסוג INT64 וערך שלילי מסוג INT64.
math.is_increasing(0-1.200000, 0, 0-3) = false
דוגמה 4
בדוגמה הזו יש שני ערכים שליליים מסוג double וערך אפס אחד מסוג INT64.
math.is_increasing(0-1.200000, 0-1.50000, 0) = false
דוגמה 5
בדוגמה הזו יש מספר שלילי אחד מסוג double ושני ערכים זהים.
math.is_increasing(0-1.200000, 0, 0) = false
math.log
math.log(numericExpression)
תיאור
הפונקציה מחזירה את הערך של הלוגריתם הטבעי של ביטוי מסוג integer או float.
סוגי נתונים של פרמטרים
NUMBER
סוג הערך שמוחזר
NUMBER
דוגמאות קוד
דוגמה 1
math.log($e1.network.sent_bytes) > 20
math.pow
math.pow(base, exponent)
תיאור
הפונקציה מחזירה את הערך של הארגומנט הראשון בחזקת הארגומנט השני. הפונקציה מחזירה 0 במקרה של הצפת נתונים.
סוגי נתונים של פרמטרים
בסיס: INT|FLOAT
מעריך חזקה: INT|FLOAT
סוג הערך שמוחזר
FLOAT
דוגמאות קוד
דוגמה 1
בדוגמה הזו מוצג מקרה של מספר שלם.
math.pow(2, 2) // 4.00
דוגמה 2
בדוגמה הזו מוצג מקרה בסיסי של שבר.
math.pow(2.200000, 3) // 10.648
דוגמה 3
בדוגמה הזו מוצגים בסיס ושבר בחזקה.
math.pow(2.200000, 1.200000) // 2.575771
דוגמה 4
בדוגמה הזו מוצג מקרה של חזקה שלילית.
math.pow(3, 0-3) // 0.037037
דוגמה 5
בדוגמה הזו מוצג מקרה של חזקה שהיא שבר.
math.pow(3, 0-1.200000) // 0.267581
דוגמה 6
בדוגמה הזו מוצג מקרה בסיסי שלילי.
math.pow(0-3, 0-3) // -0.037037
דוגמה 7
בדוגמה הזו מוצג מקרה בסיס של אפס.
math.pow(0, 3) // 0
דוגמה 8
בדוגמה הזו מוצג מקרה של חזקה אפס.
math.pow(9223372036854775807, 0) // 1
דוגמה 9
בדוגמה הזו מוצג מקרה בסיס גדול.
math.pow(9223372036854775807, 1.200000) // 57262152889751593549824
math.random
math.random()
תיאור
הפונקציה יוצרת ערך פסאודו-רנדומלי מסוג DOUBLE בטווח [0, 1), כולל 0 ולא כולל 1.
סוג הערך שמוחזר
FLOAT
דוגמאות קוד
בדוגמה הבאה נבדק אם הערך האקראי נמצא בטווח [0, 1).
none
if(math.random() >= 0 and math.random() < 1) = true
math.round
math.round(numericExpression, decimalPlaces)
תיאור
הפונקציה מחזירה ערך מעוגל למספר השלם הקרוב ביותר או למספר המקומות העשרוניים שצוין.
סוגי נתונים של פרמטרים
NUMBER
סוג הערך שמוחזר
NUMBER
דוגמאות קוד
math.round(10.7) // returns 11
math.round(1.2567, 2) // returns 1.25
math.round(0-10.7) // returns -11
math.round(0-1.2) // returns -1
math.round(4) // returns 4, math.round(integer) returns the integer
math.sqrt
math.sqrt(number)
תיאור
מחזירה את השורש הריבועי של המספר הנתון. מחזירה 0 במקרה של מספרים שליליים.
סוגי נתונים של פרמטרים
INT|FLOAT
סוג הערך שמוחזר
FLOAT
דוגמאות קוד
דוגמה 1
בדוגמה הזו מוחזר השורש הריבועי של ארגומנט מסוג int.
math.sqrt(3) = 1.732051
דוגמה 2
בדוגמה הזו מוחזר השורש הריבועי של ארגומנט שלילי מסוג int.
math.sqrt(-3) = 0.000000
דוגמה 3
בדוגמה הזו מוחזר השורש הריבועי של ארגומנט אפס.
math.sqrt(0) = 0.000000
דוגמה 4
בדוגמה הזו מוחזר השורש הריבועי של ארגומנט מסוג float.
math.sqrt(9.223372) = 3.037000
דוגמה 5
בדוגמה הזו מוחזר השורש הריבועי של ארגומנט שלילי מסוג float.
math.sqrt(0-1.200000) = 0.000000
מדדים
פונקציות של מדדים יכולות לצבור כמויות גדולות של נתונים היסטוריים. אפשר להשתמש בזה בכלל באמצעות metrics.functionName() בקטע של התוצאה.
מידע נוסף זמין במאמר מדדים של YARA-L.
net.ip_in_range_cidr
net.ip_in_range_cidr(ipAddress, subnetworkRange)
תיאור
הפונקציה מחזירה את הערך true אם כתובת ה-IP הנתונה נמצאת ברשת המשנה שצוינה.
אפשר להשתמש ב-YARA-L כדי לחפש אירועי UDM בכל כתובות ה-IP בתוך רשת משנה באמצעות ההצהרה net.ip_in_range_cidr().
המערכת תומכת ב-IPv4 וב-IPv6.
כדי לחפש בטווח של כתובות IP, צריך לציין שדה IP UDM וטווח CIDR. YARA-L יכולה לטפל בשדות של כתובות IP יחידות וחוזרות.
כדי לחפש בטווח של כתובות IP, צריך לציין שדה UDM וטווח Classless Inter-Domain Routing (CIDR).ip YARA-L יכולה לטפל בשדות של כתובות IP יחידות וחוזרות.
סוגי נתונים של פרמטרים
STRING, STRING
סוג הערך שמוחזר
BOOL
דוגמאות קוד
דוגמה 1
דוגמה ל-IPv4:
net.ip_in_range_cidr($e.principal.ip, "192.0.2.0/24")
דוגמה 2
דוגמה ל-IPv6:
net.ip_in_range_cidr($e.network.dhcp.yiaddr, "2001:db8::/32")
דוגמה לכלל שמשתמש בהצהרה net.ip_in_range_cidr()מופיעה בדוגמה לכלל במאמר אירוע יחיד בטווח של כתובות IP.)
re.regex
אפשר להגדיר התאמה של ביטויים רגולריים ב-YARA-L 2.0 באמצעות אחד מסוגי התחביר הבאים:
שימוש בתחביר YARA-L – קשור לאירועים. הנה ייצוג כללי של התחביר הזה:
$e.field = /regex/שימוש בתחביר YARA-L – כפונקציה שמקבלת את הפרמטרים הבאים:
- השדה שהביטוי הרגולרי חל עליו.
- ביטוי רגולרי שמוגדר כמחרוזת.
הנה ייצוג כללי של התחביר הזה:
re.regex($e.field, `regex`)
תיאור
הפונקציה מחזירה true אם המחרוזת מכילה מחרוזת משנה שתואמת לביטוי הרגולרי שצוין. אין צורך להוסיף .* לתחילת הביטוי הרגולרי או לסופו.
הערות
- כדי להתאים את המחרוזת המדויקת או רק תחילית או סיומת, צריך לכלול את התווים
^(התחלה) ו-$(סיום) של העוגן בביטוי הרגולרי. לדוגמה,/^full$/תואם בדיוק ל-"full", בעוד ש-/full/יכול להתאים ל-"fullest", ל-"lawfull"ול-"joyfully". - אם שדה ה-UDM כולל תווים של שורה חדשה,
regexpמתאים רק לשורה הראשונה של שדה ה-UDM. כדי לאכוף התאמה מלאה של שדה UDM, מוסיפים(?s)לביטוי הרגולרי. לדוגמה, מחליפים את/.*allUDM.*/ב-/(?s).*allUDM.*/. - אפשר להשתמש במודיפייר
nocaseאחרי מחרוזות כדי לציין שהחיפוש צריך להתעלם מאותיות רישיות.
סוגי נתונים של פרמטרים
STRING, STRING
סוגי ביטויים של פרמטרים
ANY, ANY
סוג הערך שמוחזר
BOOL
דוגמאות קוד
דוגמה 1
// Equivalent to $e.principal.hostname = /google/
re.regex($e.principal.hostname, "google")
re.capture
re.capture(stringText, regex)
תיאור
הפונקציה לוכדת (מחלצת) נתונים ממחרוזת באמצעות תבנית הביטוי הרגולרי שצוינה בארגומנט.
הפונקציה הזו מקבלת שני ארגומנטים:
-
stringText: המחרוזת המקורית לחיפוש. -
regex: הביטוי הרגולרי שמציין את התבנית לחיפוש.
הביטוי הרגולרי יכול להכיל 0 או 1 קבוצות לכידה בסוגריים. אם הביטוי הרגולרי מכיל 0 קבוצות לחילוץ, הפונקציה מחזירה את מחרוזת המשנה הראשונה שתואמת לביטוי הרגולרי. אם הביטוי הרגולרי מכיל קבוצה אחת לחילוץ, הפונקציה מחזירה את מחרוזת המשנה הראשונה שתואמת לקבוצה לחילוץ. הגדרה של שתי קבוצות לכידה או יותר מחזירה שגיאת קומפילציה.
סוגי נתונים של פרמטרים
STRING, STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
דוגמה 1
בדוגמה הזו, אם $e.principal.hostname מכיל את הערך aaa1bbaa2, הפונקציה תחזיר את המופע הראשון, ולכן התנאי הבא יתקיים: בדוגמה הזו אין קבוצות ללכידה.
"aaa1" = re.capture($e.principal.hostname, "a+[1-9]")
דוגמה 2
בדוגמה הזו, מתבצעת הכללה של כל מה שמופיע אחרי הסמל @ באימייל. אם השדה $e.network.email.from הוא test@google.com, הדוגמה מחזירה google.com. הדוגמה הבאה מכילה קבוצת חילוץ אחת.
"google.com" = re.capture($e.network.email.from , "@(.*)")
דוגמה 3
אם הביטוי הרגולרי לא תואם לאף מחרוזת משנה בטקסט, הפונקציה מחזירה מחרוזת ריקה. אפשר להשמיט אירועים שבהם לא נמצאה התאמה על ידי החרגת המחרוזת הריקה. זה חשוב במיוחד כשמשתמשים ב-re.capture() עם אי-שוויון:
// Exclude the empty string to omit events where no match occurs.
"" != re.capture($e.network.email.from , "@(.*)")
// Exclude a specific string with an inequality.
"google.com" != re.capture($e.network.email.from , "@(.*)")
re.capture_all
re.capture_all(stringText, regex)
תיאור
משתמשים בפונקציה re.capture_all() כדי לחלץ כל התאמה לא חופפת של ביטוי רגולרי ממחרוזת. בעוד שהפונקציה הרגילה re.capture() מפסיקה אחרי ההתאמה הראשונה שהיא מוצאת, הפונקציה re.capture_all() ממשיכה לאורך כל המחרוזת כדי לזהות כל מופע שתואם לדפוס.
הפונקציה הזו מקבלת שני ארגומנטים:
-
string_to_search: מחרוזת הקלט או שדה ה-UDM שרוצים לחפש. -
regex_pattern: הביטוי הרגולרי שאתם מחילים. הערה: הביטוי הרגולרי הזה לא יכול להכיל יותר מקבוצה אחת לחילוץ.
תרחישים נפוצים לדוגמה
משתמשים בפונקציה re.capture_all() כדי לפתור תרחישים שבהם שדה יחיד ביומן מכיל כמה נקודות נתונים חשובות.
- חילוץ של כמה אינדיקטורים: שליפה של כל כתובות ה-IP, כתובות ה-URL או שמות המארחים משדה של הודעת יומן או תיאור יחיד.
- ניתוח נתונים מופרדים: בידוד ערכים ספציפיים משדות שבהם כמה פריטי מידע מופרדים באמצעות פסיקים, נקודה-פסיק או טקסט אחר.
- ניתוח טקסט חופשי: סריקת שדות לא מובנים (כמו הערות או תגובות) כדי לזהות כל התאמה לדפוס, כמו נתיבי קבצים או מפתחות רישום.
- ביקורת על שורות פקודה: חילוץ של כל הארגומנטים או של דגלים ספציפיים משורת פקודה של תהליך, כדי להבין טוב יותר את היקף הפקודה.
סוגי נתונים של פרמטרים
STRING, STRING
סוג הערך שמוחזר
ARRAY_STRINGS
דוגמאות
בקטע הזה מוצגות דוגמאות שממחישות איך משתמשים ב-re.capture_all() בסוגים שונים של טלמטריה. אפשר להשתמש בדפוסים האלה בקטע events כדי לסנן נתונים, או בקטע outcome כדי להוסיף הקשר להתראות הסופיות על זיהוי.
דוגמה: חילוץ הנתיב החמישי של קובץ .conf משורת פקודה
בדוגמה הזו לחיפוש, קודם מוודאים ש-.conf מופיע בשורת פקודה.
לאחר מכן, הוא שומר את שורת הפקודה המלאה ומחלץ את המופע החמישי של תבנית ספציפית שקשורה לנתיבי קבצים של .conf. אפשר לשלב את הפונקציה re.capture_all() עם arrays.index_to_str() כדי לחלץ מופע ספציפי, כמו הנתיב החמישי .conf משורת פקודה.
re.regex(principal.process.command_line, `\.conf`)
$command_line = principal.process.command_line
$path_component_5 = arrays.index_to_str(re.capture_all(principal.process.command_line, `[s='"]([^'"=s]*.conf)`), 4)
דוגמה: חילוץ כל המילים שמתחילות ב-error
בדוגמה הזו של כלל, כל מילה שמתחילה ב-error מתוך תיאור של תוצאת אבטחה נשמרת במערך שנקרא $all_errors.
rule ExtractErrors {
meta:
author = "user@example.com"
events:
$e.principal.hostname = "server1"
$log_message = $e.security_result[0].description
outcome:
$all_errors = re.capture_all($log_message, `error\w+`)
condition:
$e
}
דוגמה: הצטרפות לכל הדפוסים שדומים לכתובות IP שמופיעים במחרוזת User-Agent
בדוגמה הזו של כלל, אתם מחלצים את כל כתובות ה-IPv4 מהשדה network.http.user_agent של אירועי אבטחה.
הפונקציה re.capture_all() מחזירה מערך, ולכן אפשר להשתמש בפונקציה arrays.join_string() כדי למזג את ההתאמות האלה לרשימה קריאה אחת.
rule CaptureAllIPs {
meta:
author = "user@example.com"
events:
$e.network.http.user_agent != ""
$captured_ips = arrays.join_string(re.capture_all($e.network.http.user_agent, `\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}`), ", ")
condition:
$e
}
מגבלות ידועות
- קבוצת לכידה אחת: הביטוי הרגולרי שמשמש עם התג
re.capture_all()לא יכול להכיל יותר מקבוצת לכידה אחת. - סוג ההחזרה של המערך: הפונקציה מחזירה מערך של מחרוזות. כדי להקצות את התוצאה למשתנה של אירוע או להשתמש בה בפונקציות שמצפות למחרוזת אחת, בדרך כלל צריך להוסיף לה את התו
arrays.join_string().
re.replace
re.replace(stringText, replaceRegex, replacementText)
תיאור
מבצעת החלפה של ביטוי רגולרי.
הפונקציה הזו מקבלת שלושה ארגומנטים:
-
stringText: המחרוזת המקורית. -
replaceRegex: הביטוי הרגולרי שמציין את התבנית לחיפוש. -
replacementText: הטקסט שיוכנס לכל התאמה.
מחזירה מחרוזת חדשה שנגזרת מהמחרוזת המקורית stringText, שבה כל מחרוזות המשנה שתואמות לתבנית ב-replaceRegex מוחלפות בערך ב-replacementText. אפשר להשתמש בספרות עם תו בריחה של קו נטוי הפוך (\1 עד \9) בתוך replacementText כדי להוסיף טקסט שתואם לקבוצה המקבילה בסוגריים בתבנית replaceRegex. משתמשים ב-\0 כדי להתייחס לכל הטקסט התואם.
הפונקציה מחליפה התאמות לא חופפות, ותיתן עדיפות להחלפת המופע הראשון שנמצא. לדוגמה, הפונקציה re.replace("banana", "ana", "111") מחזירה את המחרוזת 'b111na'.
סוגי נתונים של פרמטרים
STRING, STRING, STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
דוגמה 1
בדוגמה הזו, הפונקציה מחלצת את כל מה שמופיע אחרי הסמל @ באימייל, מחליפה את com ב-org ומחזירה את התוצאה. שימו לב לשימוש בפונקציות שהן מרכיב בפונקציות אחרות.
"email@google.org" = re.replace($e.network.email.from, "com", "org")
דוגמה 2
בדוגמה הזו נעשה שימוש בספרות עם תו בריחה של לוכסן הפוך בארגומנט replacementText כדי להפנות להתאמות לדפוס replaceRegex.
"test1.com.google" = re.replace(
$e.principal.hostname, // holds "test1.test2.google.com"
"test2\.([a-z]*)\.([a-z]*)",
"\\2.\\1" // \\1 holds "google", \\2 holds "com"
)
דוגמה 3
חשוב לשים לב למקרים הבאים כשעובדים עם מחרוזות ריקות ועם re.replace():
שימוש במחרוזת ריקה בתור replaceRegex:
// In the function call below, if $e.principal.hostname contains "name",
// the result is: 1n1a1m1e1, because an empty string is found next to
// every character in `stringText`.
re.replace($e.principal.hostname, "", "1")
כדי להחליף מחרוזת ריקה, אפשר להשתמש ב-"^$" בתור replaceRegex:
// In the function call below, if $e.principal.hostname contains the empty
// string, "", the result is: "none".
re.replace($e.principal.hostname, "^$", "none")
sample_rate
optimization.sample_rate(byteOrString, rateNumerator, rateDenominator)
תיאור
הפונקציה הזו קובעת אם לכלול אירוע על סמך אסטרטגיית דגימה דטרמיניסטית. הפונקציה הזו מחזירה:
-
trueעבור חלק מערכי הקלט, ששווה ל- (rateNumerator/rateDenominator), מציין שהאירוע צריך להיכלל במדגם. -
false, שמציין שהאירוע לא צריך להיכלל במדגם.
הפונקציה הזו שימושית לתרחישי אופטימיזציה שבהם רוצים לעבד רק קבוצת משנה של אירועים. שווה ערך ל:
hash.fingerprint2011(byteOrString) % rateDenominator < rateNumerator
סוגי נתונים של פרמטרים
- byteOrString: ביטוי שהערך המחושב שלו הוא
BYTEאוSTRING. - rateNumerator: 'INT'
- rateDenominator: 'INT'
סוג הערך שמוחזר
BOOL
דוגמת קוד
events:
$e.metadata.event_type = "NETWORK_CONNECTION"
$asset_id = $e.principal.asset.asset_id
optimization.sample_rate($e.metadata.id, 1, 5) // Only 1 out of every 5 events
match:
$asset_id over 1h
outcome:
$event_count = count_distinct($e.metadata.id)
// estimate the usage by multiplying by the inverse of the sample rate
$usage_past_hour = sum(5.0 * $e.network.sent_bytes)
condition:
// Requiring a certain number of events after sampling avoids bias (e.g. a
// device with just 1 connection will still show up 20% of the time and
// if we multiply that traffic by 5, we'll get an incorrect estimate)
$e and ($usage_past_hour > 1000000000) and $event_count >= 100
strings.base64_decode
strings.base64_decode(encodedString)
תיאור
הפונקציה מחזירה מחרוזת שמכילה את הגרסה המפוענחת של המחרוזת המקודדת בפורמט Base64.
הפונקציה הזו מקבלת מחרוזת אחת בקידוד base64 כארגומנט. אם encodedString
היא לא מחרוזת חוקית בקידוד base64, הפונקציה מחזירה את encodedString ללא שינוי.
סוגי נתונים של פרמטרים
STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
דוגמה 1
"test" = strings.base64_decode($e.principal.domain.name)
strings.coalesce
strings.coalesce(a, b, c, ...)
תיאור
הפונקציה הזו מקבלת מספר בלתי מוגבל של ארגומנטים ומחזירה את הערך של הביטוי הראשון שלא מתורגם למחרוזת ריקה (לדוגמה, 'ערך שאינו אפס'). אם כל הארגומנטים הם מחרוזת ריקה, קריאת הפונקציה מחזירה מחרוזת ריקה.
הארגומנטים יכולים להיות ערכים קבועים, שדות של אירועים או קריאות לפונקציות. כל הארגומנטים חייבים להיות מסוג STRING. אם יש ארגומנטים שהם שדות של אירועים, המאפיינים חייבים להיות מאותו אירוע.
סוגי נתונים של פרמטרים
STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
דוגמה 1
בדוגמה הבאה יש משתני מחרוזת כארגומנטים. התנאי
מחזיר את הערך True אם (1) $e.network.email.from הוא suspicious@gmail.com או (2) $e.network.email.from ריק ו-$e.network.email.to הוא suspicious@gmail.com.
"suspicious@gmail.com" = strings.coalesce($e.network.email.from, $e.network.email.to)
דוגמה 2
בדוגמה הבאה מופיעה קריאה לפונקציה coalesce עם יותר משני ארגומנטים. התנאי הזה משווה את כתובת ה-IP הראשונה שאינה null מהאירוע $e לערכים ברשימת ההפניה ip_watchlist. הסדר שבו הארגומנטים משולבים בקריאה הזו זהה לסדר שבו הם מפורטים בתנאי הכלל:
- הפונקציה
$e.principal.ipמוערכת ראשונה. - התבנית
$e.src.ipנבדקת. - התבנית
$e.target.ipנבדקת. - לבסוף, המחרוזת 'No IP' מוחזרת כערך ברירת מחדל אם השדות הקודמים
ipלא מוגדרים.
strings.coalesce($e.principal.ip, $e.src.ip, $e.target.ip, "No IP") in %ip_watchlist
דוגמה 3
בדוגמה הבאה נעשה ניסיון לאחד את principal.hostname מאירוע
$e1 ואירוע $e2. תוחזר שגיאת קומפילציה כי הארגומנטים הם משתני אירוע שונים.
// returns a compiler error
"test" = strings.coalesce($e1.principal.hostname, $e2.principal.hostname)
strings.concat
strings.concat(a, b, c, ...)
תיאור
הפונקציה מחזירה את השרשור של מספר בלתי מוגבל של פריטים, שכל אחד מהם יכול להיות מחרוזת, מספר שלם או מספר עשרוני.
אם יש ארגומנטים שהם שדות של אירועים, המאפיינים חייבים להיות מאותו אירוע.
סוגי נתונים של פרמטרים
STRING, FLOAT, INT
סוג הערך שמוחזר
STRING
דוגמאות קוד
דוגמה 1
בדוגמה הבאה מופיעים משתנה מחרוזת ומשתנה מספר שלם כארגומנטים. גם principal.hostname וגם principal.port הם מאותו אירוע, $e, והם משורשרים כדי להחזיר מחרוזת.
"google:80" = strings.concat($e.principal.hostname, ":", $e.principal.port)
דוגמה 2
בדוגמה הבאה, משתנה מחרוזת ומחרוזת מילולית משמשים כארגומנטים.
"google-test" = strings.concat($e.principal.hostname, "-test") // Matches the event when $e.principal.hostname = "google"
דוגמה 3
בדוגמה הבאה, משתנה מחרוזת ומילול צף משמשים כארגומנטים. כשמייצגים מספרים מסוג float כמחרוזות, אם המספר הוא שלם, הוא מפורמט בלי הנקודה העשרונית (לדוגמה, 1.0 מיוצג כ-"1"). בנוסף, אם יש מספרים עם יותר מ-16 ספרות אחרי הנקודה העשרונית, הם נחתכים אחרי הספרה ה-16.
"google2.5" = strings.concat($e.principal.hostname, 2.5)
דוגמה 4
הדוגמה הבאה כוללת משתנה מחרוזת, מחרוזת מילולית, משתנה מספר שלם ומספר ממשי מילולי כארגומנטים. כל המשתנים הם מאותו אירוע, $e, והם מחוברים למחרוזת עם הערכים המילוליים כדי להחזיר מחרוזת.
"google-test802.5" = strings.concat($e.principal.hostname, "-test", $e.principal.port, 2.5)
דוגמה 5
בדוגמה הבאה נעשה ניסיון לשרשר את principal.port מהאירוע $e1,
עם principal.hostname מהאירוע $e2. תוחזר שגיאת קומפיילר
כי הארגומנטים הם משתני אירוע שונים.
// Will not compile
"test" = strings.concat($e1.principal.port, $e2.principal.hostname)
strings.contains
strings.contains( str, substr )
תיאור
הפונקציה מחזירה את הערך True אם מחרוזת נתונה מכילה את מחרוזת המשנה שצוינה. אחרת, הפונקציה מחזירה את הערך false.
סוגי נתונים של פרמטרים
STRING, STRING
סוג הערך שמוחזר
BOOL
דוגמאות קוד
דוגמה 1
בדוגמה הזו הפונקציה מחזירה את הערך True כי המחרוזת מכילה את מחרוזת המשנה 'is'.
strings.contains("thisisastring", "is") = true
דוגמה 2
בדוגמה הזו מוחזר הערך False כי המחרוזת לא מכילה את מחרוזת המשנה that.
strings.contains("thisisastring", "that") = false
strings.count_substrings
strings.count_substrings(string_to_search_in, substring_to_count)
תיאור
כשמזינים מחרוזת ותת-מחרוזת, הפונקציה מחזירה את מספר המופעים של תת-המחרוזת בתוך המחרוזת, שלא חופפים זה לזה, כערך int64.
סוגי נתונים של פרמטרים
STRING, STRING
סוג הערך שמוחזר
INT
דוגמאות קוד
בקטע הזה מופיעות דוגמאות לחישוב מספר הפעמים שמופיעה מחרוזת משנה במחרוזת נתונה.
דוגמה 1
בדוגמה הזו נעשה שימוש במחרוזת שאינה null ובתווים של מחרוזת משנה יחידה שאינה null.
strings.count_substrings("this`string`has`four`backticks", "`") = 4
דוגמה 2
בדוגמה הזו נעשה שימוש במחרוזת לא ריקה ובמחרוזת משנה לא ריקה באורך של יותר מתו אחד.
strings.count_substrings("str", "str") = 1
דוגמה 3
בדוגמה הזו נעשה שימוש במחרוזת שאינה null ובמחרוזת משנה ריקה.
strings.count_substrings("str", "") = 0
דוגמה 4
בדוגמה הזו נעשה שימוש במחרוזת ריקה ובמחרוזת משנה שאינה null וכוללת יותר מתו אחד.
strings.count_substrings("", "str") = 0
דוגמה 5
בדוגמה הזו נעשה שימוש במחרוזת ריקה ובמחרוזת משנה ריקה.
strings.count_substrings("", "") = 0
דוגמה 6
בדוגמה הזו נעשה שימוש במחרוזת שאינה null ובמחרוזת משנה שאינה null, שאורכה גדול מתו אחד ושמופיעה יותר מפעם אחת.
strings.count_substrings("fooABAbarABAbazABA", "AB") = 3
דוגמה 7
בדוגמה הזו נעשה שימוש במחרוזת שאינה null ובמחרוזת משנה שאינה null, שאורכה גדול מתו אחד ושמופיעה יותר מפעם אחת. היא מדגישה את המגבלה עם מקרים חופפים של מחרוזות משנה
strings.count_substrings("ABABABA", "ABA") = 2
strings.starts_with
strings.starts_with(value, suffix)
תיאור
הפונקציה מקבלת שתי מחרוזות (value, suffix). הפונקציה מחזירה את הערך True אם הסיומת לא ריקה והיא נמצאת בתחילת הערך.
סוגי נתונים של פרמטרים
STRING, STRING
סוג הערך שמוחזר
BOOL
דוגמאות קוד
בדוגמאות הקוד הבאות אפשר לראות כמה מהדרכים שבהן אפשר להשתמש בפונקציה strings.starts_with.
דוגמה: מחזירה true
הפונקציה מחזירה את הערך True אם התחילית נמצאת בתחילת הערך.
strings.starts_with(target.hostname, "www") = true
דוגמה: מחזירה false
הפונקציה מחזירה false אם הקידומת לא נמצאת בתחילת הערך.
strings.starts_with(target.hostname, "www") = false
דוגמה: הפונקציה מחזירה את הערך True אם המחרוזות זהות
הפונקציה מחזירה true אם הקידומת והערך זהים.
target.hostname != "example.com"
strings.starts_with("str", "str") = true
דוגמה: מחזירה false אם הסיומת ריקה
הפונקציה מחזירה false אם prefix היא מחרוזת ריקה.
target.hostname != "example.com"
strings.starts_with("", "str") = false
דוגמה: הפונקציה מחזירה false כשהערך ריק
מחזירה false אם הערך הוא מחרוזת ריקה.
target.hostname != "example.com"
strings.starts_with("str", "") = false
דוגמה: הפונקציה מחזירה false כשפרמטר הקידומת ופרמטר הערך ריקים
הפונקציה מחזירה false אם prefix ו-value הם מחרוזות ריקות.
target.hostname != "example.com"
strings.starts_with("", "") = false
strings.ends_with
strings.ends_with(value, suffix)
תיאור
הפונקציה מקבלת שתי מחרוזות (value, suffix). הפונקציה מחזירה את הערך True אם הסיומת לא ריקה והיא מופיעה בסוף הערך.
סוגי נתונים של פרמטרים
STRING, STRING
סוג הערך שמוחזר
BOOL
דוגמאות קוד
בדוגמאות הקוד הבאות אפשר לראות כמה מהדרכים שבהן אפשר להשתמש בפונקציה strings.ends_with.
דוגמה: מחזירה true
הפונקציה מחזירה את הערך True אם הסיומת נמצאת בסוף הערך.
strings.ends_with(target.hostname, "com") = true
דוגמה: מחזירה false
הפונקציה מחזירה false אם הסיומת לא נמצאת בסוף הערך.
strings.ends_with(target.hostname, "com") = false
דוגמה: מחזירה false כשהערכים זהים
הפונקציה מחזירה false אם הסיומת והערך זהים.
target.hostname != "example.com"
strings.ends_with("str", "str") = true
דוגמה: מחזירה false אם הסיומת ריקה
הפונקציה מחזירה false אם suffix היא מחרוזת ריקה.
target.hostname != "example.com"
strings.ends_with("str", "") = false
דוגמה: הפונקציה מחזירה false כשהערך ריק
מחזירה false אם הערך הוא מחרוזת ריקה.
target.hostname != "example.com"
strings.ends_with("", "str") = false
דוגמה: הפונקציה מחזירה false אם הסיומת והערך ריקים
הפונקציה מחזירה false אם suffix ו-value הן מחרוזות ריקות.
target.hostname != "example.com"
strings.ends_with("", "") = false
strings.extract_domain
strings.extract_domain(url_string)
תיאור
הפונקציה מחלצת את הדומיין ממחרוזת.
סוגי נתונים של פרמטרים
STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
דוגמה 1
בדוגמה הזו מוצגת מחרוזת ריקה
strings.extract_domain("") = ""
דוגמה 2
מחרוזת אקראית, לא כתובת URL
strings.extract_domain("1234") = ""
דוגמה 3
לוכסנים הפוכים מרובים
strings.extract_domain("\\\\") = ""
דוגמה 4
טיפול תקין בתווים שאינם אלפביתיים
strings.extract_domain("http://例子.卷筒纸.中国") = "卷筒纸.中国"
דוגמה 5
טיפול ב-URI
strings.extract_domain("mailto:?to=&subject=&body=") = ""
דוגמה 6
כמה תווים לפני כתובת ה-URL בפועל
strings.extract_domain(" \t !$5*^)&dahgsdfs;http://www.google.com") = "google.com"
דוגמה 7
תווים מיוחדים ב-URI #
strings.extract_domain("test#@google.com") = ""
דוגמה 8
תווים מיוחדים בכתובת ה-URL #
strings.extract_domain("https://test#@google.com") = ""
דוגמה 9
מקרה בדיקה חיובי
strings.extract_domain("https://google.co.in") = "google.co.in"
strings.extract_hostname
strings.extract_hostname(string)
תיאור
הפונקציה מחלצת את שם המארח ממחרוזת. הפונקציה הזו תלוית אותיות רישיות.
סוגי נתונים של פרמטרים
STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
דוגמה 1
בדוגמה הזו, הפונקציה מחזירה מחרוזת ריקה.
strings.extract_hostname("") = ""
דוגמה 2
מחרוזת אקראית, לא כתובת URL
strings.extract_hostname("1234") = "1234"
דוגמה 3
לוכסנים הפוכים מרובים
strings.extract_hostname("\\\\") = ""
דוגמה 4
טיפול תקין בתווים שאינם באנגלית
strings.extract_hostname("http://例子.卷筒纸.中国") = "例子.卷筒纸.中国"
דוגמה 5
טיפול ב-URI
strings.extract_hostname("mailto:?to=&subject=&body=") = "mailto"
דוגמה 6
כמה תווים לפני כתובת ה-URL בפועל
strings.extract_hostname(" \t !$5*^)&dahgsdfs;http://www.google.com") = "www.google.com"
דוגמה 7
תווים מיוחדים ב-URI #
strings.extract_hostname("test#@google.com") = "test"
דוגמה 8
תווים מיוחדים בכתובת ה-URL #
strings.extract_hostname("https://test#@google.com") = "test"
strings.from_base64
strings.from_base64(base64_encoded_string)
תיאור
הפונקציה ממירה ערך STRING בקידוד Base64 לערך BYTES בינארי גולמי. קריאות לפונקציות עם ערכים שלא ניתן להמיר מחזירות כברירת מחדל ערך ריק BYTES.
סוגי נתונים של פרמטרים
STRING
סוג הערך שמוחזר
BYTES
דוגמאות קוד
המרת מחרוזת בקידוד Base64 לבייטים
הפונקציה ממירה מחרוזת בקידוד base64 לייצוג של בייטים בינאריים גולמיים.
strings.from_base64("AAAAAG+OxVhtAm+d2sVuny/hW4oAAAAAAQAAAM0AAAA=") = b'000000006f8ec5586d026f9ddac56e9f2fe15b8a0000000001000000cd000000
ההמרה נכשלה (ברירת המחדל היא בייטים ריקים)
אם הערך שצוין לא תקין, הפונקציה תחזיר כברירת מחדל בייטים ריקים.
strings.from_base64("invalid-value") = b'
strings.from_hex
strings.from_hex(hex_string)
תיאור
הפונקציה מחזירה את הבייטים שמשויכים למחרוזת ההקסדצימלית הנתונה.
סוגי נתונים של פרמטרים
STRING
סוג הערך שמוחזר
BYTES
דוגמאות קוד
קבלת בייטים שמשויכים למחרוזת הקסדצימלית הנתונה.
דוגמה 1
בדוגמה הזו מוצגות המרות של תווים שאינם הקסדצימליים.
strings.from_hex("str") // returns empty bytes
דוגמה 2
בדוגמה הזו מוצגת קלט עם מחרוזת ריקה.
strings.from_hex("") // returns empty bytes
דוגמה 3
בדוגמה הזו מוצגת המרה של מחרוזת הקסדצימלית.
strings.from_hex("1234") // returns 1234 bytes
דוגמה 4
בדוגמה הזו מוצגת המרה של תווים שאינם ASCII.
strings.from_hex("筒纸.中国") // returns empty bytes
strings.ltrim
strings.ltrim(string_to_trim, cutset)
תיאור
חיתוך רווחים לבנים בתחילת מחרוזת נתונה. הפונקציה הזו מסירה תווים מובילים שקיימים ב-cutset.
סוגי נתונים של פרמטרים
STRING, STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
הנה כמה תרחישים לדוגמה:
דוגמה 1
בדוגמה הזו נעשה שימוש באותו ארגומנט ראשון ושני.
strings.ltrim("str", "str") = ""
דוגמה 2
בדוגמה הזו נעשה שימוש במחרוזת ריקה כארגומנט השני.
strings.ltrim("str", "") = "str"
דוגמה 3
בדוגמה הזו, הארגומנט הראשון הוא מחרוזת ריקה והארגומנט השני הוא מחרוזת.
strings.ltrim("", "str") = ""
דוגמה 4
בדוגמה הזו נעשה שימוש במחרוזות שמכילות רווחים לבנים, ובמחרוזת כארגומנט השני.
strings.ltrim("a aastraa aa ", " a") = "straa aa "
strings.reverse
strings.reverse(STRING)
תיאור
הפונקציה מחזירה מחרוזת שהיא ההיפוך של מחרוזת הקלט.
סוגי נתונים של פרמטרים
STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
דוגמה 1
בדוגמה הבאה מועבר מחרוזת קצרה.
strings.reverse("str") = "rts" // The function returns 'rts'.
דוגמה 2
בדוגמה הבאה מועברת מחרוזת ריקה.
strings.reverse("") = ""
דוגמה 3
בדוגמה הבאה מועבר פלינדרום.
strings.reverse("tacocat") = "tacocat"
strings.rtrim
strings.rtrim(string_to_trim, cutset)
תיאור
חיתוך של רווחים לבנים בסוף מחרוזת נתונה. הסרה של תווים בסוף המחרוזת שמופיעים ב-cutset.
סוגי נתונים של פרמטרים
STRING, STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
הנה כמה תרחישים לדוגמה:
דוגמה 1
בדוגמה הבאה, אותה מחרוזת מועברת כארגומנט הראשון והשני.
strings.rtrim("str", "str") = ""
דוגמה 2
בדוגמה הבאה מועבר מחרוזת ריקה כארגומנט השני.
strings.rtrim("str", "") = "str"
דוגמה 3
בדוגמה הבאה, מחרוזת ריקה מועברת כארגומנט הראשון ומחרוזת לא ריקה מועברת כארגומנט השני.
strings.rtrim("", "str") = ""
דוגמה 4
בדוגמה הבאה, הארגומנט הראשון הוא מחרוזת שמכילה רווחים לבנים, והארגומנט השני הוא מחרוזת לא ריקה.
strings.rtrim("a aastraa aa ", " a") = "a aasstr"
strings.split
strings.split(string, delimiter)
תיאור
מפצלת ערך מחרוזת באמצעות הארגומנט delimiter. תו ברירת המחדל להפרדה הוא פסיק (,).
סוגי נתונים של פרמטרים
STRING, STRING
סוג הערך שמוחזר
ARRAY_STRINGS
דוגמאות קוד
בדוגמאות הקוד הבאות אפשר לראות כמה מהדרכים שבהן אפשר להשתמש בפונקציה strings.split.
דוגמה: פיצול מחרוזת עם ברירת מחדל
בדוגמה הבאה, המחרוזת מפולחת באמצעות מפריד ברירת המחדל, שהוא פסיק.
strings.split("a,b,c,d") = ["a", "b", "c", "d"]
דוגמה: פיצול מחרוזת עם נקודתיים
בדוגמה הבאה, המחרוזת מפוצלת בכל נקודתיים (:).
strings.split("a:b:c:d", ":") = ["a", "b", "c", "d"]
דוגמה: חסר תו מפריד
בדוגמה הבאה חסר התו המפריד בערך המחרוזת.
strings.split("a,b,c,d", ":") = ["a,b,c,d"]
דוגמה: תו מפריד ריק
בדוגמה הבאה, מחרוזת התו המפריד ריקה.
strings.split("abc", "") = ["a", "b", "c"]
strings.to_lower
strings.to_lower(stringText)
תיאור
הפונקציה הזו מקבלת מחרוזת קלט ומחזירה מחרוזת אחרי שינוי כל התווים לאותיות קטנות.
סוגי נתונים של פרמטרים
STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
דוגמה 1
בדוגמה הבאה מוחזרת התוצאה true.
"test@google.com" = strings.to_lower($e.network.email.to)
strings.to_upper
strings.to_upper(string_val)
תיאור
הפונקציה מחזירה את המחרוזת המקורית עם כל התווים האלפביתיים באותיות רישיות.
סוגי נתונים של פרמטרים
STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
דוגמה 1
בדוגמה הבאה מוחזר הארגומנט שסופק באותיות רישיות.
strings.to_upper("example") = "EXAMPLE"
strings.trim
strings.trim(string_to_trim, cutset)
תיאור
חיתוך של רווחים לבנים בתחילת המחרוזת או בסופה. בנוסף, הפונקציה מסירה מהמחרוזת של הקלט תווים לא רצויים (שמצוינים בארגומנט cutset).
סוגי נתונים של פרמטרים
STRING, STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
הנה כמה תרחישים לדוגמה:
דוגמה 1
בדוגמה הבאה, אותו מחרוזת מועברת כמחרוזת הקלט וכקבוצת התווים לחיתוך, וכתוצאה מכך מתקבלת מחרוזת ריקה.
strings.trim("str", "str") // ""
דוגמה 2
בדוגמה הבאה, מחרוזת ריקה מועברת כ-cutset, וכתוצאה מכך מתקבלת המחרוזת המקורית str כי לא צוינו תווים ב-cutset להסרה.
strings.trim("str", "") = "str"
דוגמה 3
בדוגמה הבאה, הפונקציה מחזירה מחרוזת ריקה כי מחרוזת הקלט כבר ריקה ואין תווים להסרה.
strings.trim("", "str") = ""
דוגמה 4
בדוגמה הבאה, הפונקציה מחזירה את הערך str כי הפונקציה trim מסירה את הערכים הבאים:
- רווח לבן בסוף המחרוזת 'a aastraa aa "'
- התווים שצוינו ב-cutset (רווח, a)
strings.trim("a aastraa aa ", " a") = "str"
strings.url_decode
strings.url_decode(url_string)
תיאור
בהינתן מחרוזת של כתובת URL, הפונקציה מפענחת את התווים המיוחדים ומטפלת בתווי UTF-8 שעברו קידוד. הפונקציה מחזירה מחרוזת ריקה אם הפענוח נכשל.
סוגי נתונים של פרמטרים
STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
דוגמה 1
בדוגמה הזו מוצג תרחיש בדיקה חיובי.
strings.url_decode("three%20nine%20four") = "three nine four"
דוגמה 2
בדוגמה הזו מוצג מקרה של מחרוזת ריקה.
strings.url_decode("") // ""
דוגמה 3
בדוגמה הזו מוצגת טיפול בתווים שאינם אלפביתיים.
strings.url_decode("%E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B") // "上海+中國"
דוגמה 4
בדוגמה הזו מוצג פיענוח של כתובת URL.
strings.url_decode("http://www.google.com%3Fparam1%3D%22+1+%3E+2+%22%26param2%3D2%3B") // 'http://www.google.com?param1="+1+>+2+"¶m2=2;'
timestamp.as_unix_seconds
timestamp.as_unix_seconds(timestamp [, time_zone])
תיאור
הפונקציה הזו מחזירה מספר שלם שמייצג את מספר השניות שעברו מאז תקופת Unix עבור מחרוזת חותמת הזמן הנתונה.
-
timestampהיא מחרוזת שמייצגת חותמת זמן תקפה של תקופת האפוק. הפורמט צריך להיות%F %T. -
time_zoneהוא אופציונלי ומייצג מחרוזת של אזור זמן. אם לא מציינים אותו, ברירת המחדל היאGMT. אפשר לציין אזורי זמן באמצעות מחרוזות מילוליות. האפשרויות הן:- השם של מסד הנתונים של אזורי הזמן, לדוגמה
America/Los_Angeles. מידע נוסף זמין ברשימת אזורי הזמן במסד הנתונים tz ב-Wikipedia. - ההפרש בין אזור הזמן לבין UTC, בפורמט
(+|-)H[H][:M[M]], לדוגמה: -08:00.
- השם של מסד הנתונים של אזורי הזמן, לדוגמה
אלה דוגמאות לtime_zone מפרטים תקינים שאפשר להעביר כארגומנט השני לפונקציות לחילוץ זמן:
"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"
סוגי נתונים של פרמטרים
STRING, STRING
סוג הערך שמוחזר
INT
דוגמאות קוד
דוגמה 1
חותמת זמן תקפה של תקופת ה-Epoch
timestamp.as_unix_seconds("2024-02-22 10:43:00") = 1708598580
דוגמה 2
חותמת זמן תקפה של מערכת Unix עם אזור הזמן America/New_York
timestamp.as_unix_seconds("2024-02-22 10:43:00", "America/New_York") = 1708616580
timestamp.current_seconds
timestamp.current_seconds()
תיאור
הפונקציה מחזירה מספר שלם שמייצג את השעה הנוכחית בשניות של יוניקס. הערך הזה שווה בערך לחותמת הזמן של הזיהוי, והוא מבוסס על המועד שבו הכלל מופעל. הפונקציה הזו היא מילה נרדפת לפונקציה timestamp.now().
סוגי נתונים של פרמטרים
NONE
סוג הערך שמוחזר
INT
דוגמאות קוד
דוגמה 1
בדוגמה הבאה, הפונקציה מחזירה true אם תוקף האישור פג לפני יותר מ-24 שעות. הפונקציה מחשבת את הפרש הזמן על ידי חיסור של השניות הנוכחיות בפורמט Unix, ואז משווה באמצעות האופרטור 'גדול מ-'.
86400 < timestamp.current_seconds() - $e.network.tls.certificate.not_after
timestamp.get_date
timestamp.get_date(unix_seconds [, time_zone])
תיאור
הפונקציה הזו מחזירה מחרוזת בפורמט YYYY-MM-DD, שמייצגת את היום שבו חותמת הזמן נוצרה.
-
unix_secondsהוא מספר שלם שמייצג את מספר השניות שעברו מאז תקופת Unix, כמו$e.metadata.event_timestamp.seconds, או שהוא placeholder שמכיל את הערך הזה. -
time_zoneהוא אופציונלי ומייצג מחרוזת של אזור זמן. אם לא מציינים אותו, ברירת המחדל היא GMT. אפשר לציין אזורי זמן באמצעות מחרוזות מילוליות. האפשרויות הן:- השם של מסד הנתונים של אזורי הזמן, לדוגמה America/Los_Angeles. מידע נוסף זמין בעמודה TZ Database Name בדף הזה.
- ההפרש בין אזור הזמן לבין UTC, בפורמט
(+|-)H[H][:M[M]], לדוגמה: -08:00.
דוגמאות למזהי אזור זמן תקינים שאפשר להעביר כארגומנט השני לפונקציות לחילוץ זמן:
"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"
סוגי נתונים של פרמטרים
INT, STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
דוגמה 1
בדוגמה הזו, הארגומנט time_zone מושמט, ולכן ברירת המחדל היא GMT.
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_date($ts) = "2024-02-19"
דוגמה 2
בדוגמה הזו נעשה שימוש במחרוזת מילולית כדי להגדיר את time_zone.
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_date($ts, "America/Los_Angeles") = "2024-02-20"
timestamp.get_minute
timestamp.get_minute(unix_seconds [, time_zone])
תיאור
הפונקציה מחזירה מספר שלם בטווח [0, 59] שמייצג את הדקה.
-
unix_secondsהוא מספר שלם שמייצג את מספר השניות שעברו מאז תקופת Unix, כמו$e.metadata.event_timestamp.seconds, או שהוא placeholder שמכיל את הערך הזה. -
time_zoneהוא אופציונלי ומייצג מחרוזת של אזור זמן. אם לא מציינים אותו, ברירת המחדל היא GMT. אפשר לציין אזורי זמן באמצעות מחרוזות מילוליות. האפשרויות הן:- השם של מסד הנתונים של אזורי הזמן, לדוגמה America/Los_Angeles. מידע נוסף זמין בעמודה TZ Database Name בדף הזה.
- ההפרש בין אזור הזמן לבין UTC, בפורמט
(+|-)H[H][:M[M]], לדוגמה: -08:00.
אלה דוגמאות לtime_zone מפרטים תקינים שאפשר להעביר כארגומנט השני לפונקציות לחילוץ זמן:
"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"
סוגי נתונים של פרמטרים
INT, STRING
סוג הערך שמוחזר
INT
דוגמאות קוד
דוגמה 1
בדוגמה הזו, הארגומנט time_zone מושמט, ולכן ברירת המחדל היא GMT.
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_hour($ts) = 15
דוגמה 2
בדוגמה הזו נעשה שימוש במחרוזת מילולית כדי להגדיר את time_zone.
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_hour($ts, "America/Los_Angeles") = 15
timestamp.get_hour
timestamp.get_hour(unix_seconds [, time_zone])
תיאור
הפונקציה מחזירה מספר שלם בטווח [0, 23] שמייצג את השעה.
-
unix_secondsהוא מספר שלם שמייצג את מספר השניות שעברו מאז תקופת Unix, כמו$e.metadata.event_timestamp.seconds, או שהוא placeholder שמכיל את הערך הזה. -
time_zoneהוא אופציונלי ומייצג מחרוזת של אזור זמן. אם לא מציינים אותו, ברירת המחדל היא GMT. אפשר לציין אזורי זמן באמצעות מחרוזות מילוליות. האפשרויות הן:- השם של מסד הנתונים של אזורי הזמן, לדוגמה America/Los_Angeles. מידע נוסף זמין בעמודה TZ Database Name בדף הזה.
- ההפרש בין אזור הזמן לבין UTC, בפורמט
(+|-)H[H][:M[M]], לדוגמה: -08:00.
אלה דוגמאות לtime_zone מפרטים תקינים שאפשר להעביר כארגומנט השני לפונקציות לחילוץ זמן:
"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"
סוגי נתונים של פרמטרים
INT, STRING
סוג הערך שמוחזר
INT
דוגמאות קוד
דוגמה 1
בדוגמה הזו, הארגומנט time_zone מושמט, ולכן ברירת המחדל היא GMT.
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_hour($ts) = 15
דוגמה 2
בדוגמה הזו נעשה שימוש במחרוזת מילולית כדי להגדיר את time_zone.
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_hour($ts, "America/Los_Angeles") = 15
timestamp.get_day_of_week
timestamp.get_day_of_week(unix_seconds [, time_zone])
תיאור
הפונקציה הזו מחזירה מספר שלם בטווח [1, 7] שמייצג את היום בשבוע, החל מיום ראשון. לדוגמה, 1 = יום ראשון ו-2 = יום שני.
-
unix_secondsהוא מספר שלם שמייצג את מספר השניות שעברו מאז תקופת Unix, כמו$e.metadata.event_timestamp.seconds, או שהוא placeholder שמכיל את הערך הזה. -
time_zoneהוא אופציונלי ומייצג מחרוזת של אזור זמן. אם לא מציינים אותו, ברירת המחדל היא GMT. אפשר לציין אזורי זמן באמצעות מחרוזות מילוליות. האפשרויות הן:- השם של מסד הנתונים של אזורי הזמן, לדוגמה America/Los_Angeles. מידע נוסף זמין בעמודה TZ Database Name בדף הזה.
- ההפרש בין אזור הזמן לבין UTC, בפורמט
(+|-)H[H][:M[M]], לדוגמה: -08:00.
דוגמאות למזהי אזור זמן תקינים שאפשר להעביר כארגומנט השני לפונקציות לחילוץ זמן:
"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"
סוגי נתונים של פרמטרים
INT, STRING
סוג הערך שמוחזר
INT
דוגמאות קוד
דוגמה 1
בדוגמה הזו, הארגומנט time_zone מושמט, ולכן ברירת המחדל היא GMT.
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_day_of_week($ts) = 6
דוגמה 2
בדוגמה הזו נעשה שימוש במחרוזת מילולית כדי להגדיר את time_zone.
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_day_of_week($ts, "America/Los_Angeles") = 6
timestamp.get_timestamp
timestamp.get_timestamp(unix_seconds, optional timestamp_format/time_granularity, optional timezone)
תיאור
הפונקציה הזו מחזירה מחרוזת בפורמט YYYY-MM-DD, שמייצגת את היום שבו חותמת הזמן נוצרה.
-
unix_secondsהוא מספר שלם שמייצג את מספר השניות שעברו מאז תקופת Unix, כמו$e.metadata.event_timestamp.seconds, או שהוא placeholder שמכיל את הערך הזה. -
timestamp_formatהוא אופציונלי ומייצג מחרוזת של פורמט חותמת הזמן. אם לא מציינים אותו, ברירת המחדל היא%F %T. אפשר לציין את הפורמט באמצעות מחרוזת של פורמט תאריך ושעה או אחת מרמות הפירוט הבאות של הזמן:SECOND,MINUTE,HOUR,DATE,WEEK,MONTHאוYEAR. אפשרויות נוספות לעיצוב מפורטות במאמר רכיבי פורמט של חלקי תאריך ושעה. -
time_zoneהוא אופציונלי ומייצג מחרוזת של אזור זמן. אם לא מציינים אותו, ברירת המחדל היאGMT. אפשר לציין אזורי זמן באמצעות מחרוזות מילוליות. האפשרויות הן:- השם של מסד הנתונים של אזורי הזמן (TZ) של IANA, לדוגמה,
America/Los_Angeles. למידע נוסף, אפשר לעיין ברשימת אזורי הזמן במסד הנתונים tz ב-Wikipedia. - ההפרש מאזור הזמן UTC, בפורמט
(+|-)H[H][:M[M]], לדוגמה: -08:00.
- השם של מסד הנתונים של אזורי הזמן (TZ) של IANA, לדוגמה,
אלה דוגמאות לtime_zone מפרטים תקינים שאפשר להעביר כארגומנט השני לפונקציות לחילוץ זמן:
"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"
סוגי נתונים של פרמטרים
INT, STRING, STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
דוגמה 1
בדוגמה הזו, הארגומנט time_zone מושמט, ולכן ברירת המחדל שלו היא GMT.
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_timestamp($ts) = "2024-02-22 10:43:51"
דוגמה 2
בדוגמה הזו נעשה שימוש במחרוזת מילולית כדי להגדיר את time_zone.
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_timestamp($ts, "%F %T", "America/Los_Angeles") = "2024-02-22 10:43:51"
דוגמה 3
בדוגמה הזו נעשה שימוש במחרוזת מילולית כדי להגדיר את timestamp_format.
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_timestamp($ts, "%Y-%m", "GMT") = "2024-02"
דוגמה 4
בדוגמה הזו, חותמת זמן של Unix מעוצבת כמחרוזת ברמת דיוק של שנייה.
timestamp.get_timestamp(1708598631, "SECOND", "GMT") = "2024-02-22 10:43:51"
דוגמה 5
בדוגמה הזו, חותמת זמן של יוניקס מעוצבת כמחרוזת ברמת דיוק של דקה.
timestamp.get_timestamp(1708598631, "MINUTE", "GMT") = "2024-02-22 10:43"
דוגמה 6
בדוגמה הזו, חותמת זמן של Unix מעוצבת כמחרוזת ברמת דיוק של שעה.
timestamp.get_timestamp(1708598631, "HOUR", "GMT") = "2024-02-22 10"
דוגמה 7
בדוגמה הזו, חותמת זמן של מערכת Unix מעוצבת כמחרוזת ברמת גרנולריות של יום.
timestamp.get_timestamp(1708598631, "DATE", "GMT") = "2024-02-22"
דוגמה 8
בדוגמה הזו, חותמת זמן בפורמט Unix מעוצבת כמחרוזת ברמת גרנולריות של שבוע.
timestamp.get_timestamp(1708598631, "WEEK", "GMT") = "2024-02-18"
דוגמה 9
בדוגמה הזו, חותמת זמן של Unix מעוצבת כמחרוזת ברמת דיוק של חודש.
timestamp.get_timestamp(1708598631, "MONTH", "GMT") = "2024-02"
דוגמה 10
בדוגמה הזו, חותמת זמן של Unix מעוצבת כמחרוזת ברמת גרנולריות של שנה.
timestamp.get_timestamp(1708598631, "YEAR", "GMT") = "2024"
timestamp.get_week
timestamp.get_week(unix_seconds [, time_zone])
תיאור
הפונקציה הזו מחזירה מספר שלם בטווח [0, 53] שמייצג את השבוע בשנה. השבוע מתחיל ביום ראשון. התאריכים שלפני יום ראשון הראשון בשנה הם בשבוע 0.
-
unix_secondsהוא מספר שלם שמייצג את מספר השניות שעברו מאז תקופת Unix, כמו$e.metadata.event_timestamp.seconds, או שהוא placeholder שמכיל את הערך הזה. -
time_zoneהוא אופציונלי ומייצג מחרוזת של אזור זמן. אם לא מציינים אותו, ברירת המחדל היא GMT. אפשר לציין אזורי זמן באמצעות מחרוזות מילוליות. האפשרויות הן:- השם של מסד הנתונים של אזורי הזמן, לדוגמה America/Los_Angeles. מידע נוסף זמין בעמודה TZ Database Name בדף הזה.
- ההפרש בין אזור הזמן לבין UTC, בפורמט
(+|-)H[H][:M[M]], לדוגמה: -08:00.
אלה דוגמאות לtime_zone מפרטים תקינים שאפשר להעביר כארגומנט השני לפונקציות לחילוץ זמן:
"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"
סוגי נתונים של פרמטרים
INT, STRING
סוג הערך שמוחזר
INT
דוגמאות קוד
דוגמה 1
בדוגמה הזו, הארגומנט time_zone מושמט, ולכן ברירת המחדל היא GMT.
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_week($ts) = 0
דוגמה 2
בדוגמה הזו נעשה שימוש במחרוזת מילולית כדי להגדיר את time_zone.
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_week($ts, "America/Los_Angeles") = 0
timestamp.now
timestamp.now()
תיאור
הפונקציה מחזירה את מספר השניות מאז 1970-01-01 00:00:00 UTC. הפורמט הזה נקרא גם זמן ראשית זמן יוניקס.
סוג הערך שמוחזר
INT
דוגמאות קוד
דוגמה 1
בדוגמה הבאה מוחזרת חותמת זמן של קוד שהופעל ב-22 במאי 2024 בשעה 18:16:59.
timestamp.now() = 1716401819 // Unix epoch time in seconds for May 22, 2024 at 18:16:59
window.avg
window.avg(numeric_values [, should_ignore_zero_values])
תיאור
הפונקציה מחזירה את הממוצע של ערכי הקלט (שיכולים להיות מספרים שלמים או מספרים עשרוניים). הגדרת הארגומנט השני האופציונלי כ-True גורמת להתעלמות מערכים אפסיים.
סוגי נתונים של פרמטרים
INT|FLOAT
סוג הערך שמוחזר
FLOAT
דוגמאות קוד
דוגמה 1
בדוגמה הזו מוצג הממוצע של המספרים השלמים.
// This rule sets the outcome $size_mode to the average
// file size in the 5 minute match window.
events:
$e.user.userid = $userid
match:
$userid over 5m
outcome:
$size_mode = window.avg($e.file.size) // yields 2.5 if the event file size values in the match window are 1, 2, 3 and 4
דוגמה 2
בדוגמה הזו מוצג הממוצע של המספרים עם נקודה עשרונית.
events:
$e.user.userid = $userid
match:
$userid over 5m
outcome:
$size_mode = window.avg($e.file.size) // yields 1.75 if the event file size values in the match window are 1.1 and 2.4
דוגמה 3
ממוצע של קלט שלילי
events:
$e.user.userid = $userid
match:
$userid over 5m
outcome:
$size_mode = window.avg($e.file.size) // yields 0.6 if the event file size values in the match window are -1.1, 1.1, 0.0 and 2.4
דוגמה 4
0 החזרות 0
events:
$e.user.userid = $userid
match:
$userid over 5m
outcome:
$size_mode = window.avg($e.file.size) // yields 0 if the event file size values in the match window is 0
דוגמה 5
התעלמות מ-0 ערכים
events:
$e.user.userid = $userid
match:
$userid over 5m
outcome:
$size_mode = window.avg($e.file.size, true) // yields 394 if the event file size values in the match window are 0, 0, 0 and 394
window.first
window.first(values_to_sort_by, values_to_return)
תיאור
פונקציית הצבירה הזו מחזירה ערך מחרוזת שנגזר מאירוע עם ערך ה-int הכי נמוך שקשור לחלון ההתאמה. מקרה שימוש לדוגמה הוא קבלת מזהה המשתמש מהאירוע עם חותמת הזמן הנמוכה ביותר בחלון ההתאמה (האירוע המוקדם ביותר).
סוגי נתונים של פרמטרים
INT, STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
הפונקציה מחזירה ערך מחרוזת שנגזר מאירוע עם ערך int הכי נמוך שקשור לחלון ההתאמה.
// This rule sets the outcome $first_event to the lowest correlated int value
// in the 5 minute match window.
events:
$e.user.userid = $userid
match:
$userid over 5m
outcome:
$first_event = window.first($e.metadata.timestamp.seconds, $e.metadata.event_type) // yields v1 if the events in the match window are 1, 2 and 3 and corresponding values v1, v2, and v3.
window.last
window.last(values_to_sort_by, values_to_return)
תיאור
פונקציית הצבירה הזו מחזירה ערך מחרוזת שנגזר מאירוע עם ערך המספר השלם הכי גבוה שקשור לחלון ההתאמה. מקרה שימוש לדוגמה הוא קבלת מזהה המשתמש מהאירוע עם חותמת הזמן הכי נמוכה בחלון ההתאמה (חותמת הזמן הכי גבוהה).
סוגי נתונים של פרמטרים
INT, STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
הפונקציה מחזירה ערך מחרוזת שנגזר מאירוע עם ערך שלם מתואם הכי גבוה בחלון ההתאמה.
rule test_windows_last {
// This rule sets the outcome $last_event to the highest correlated int value
// in the 5 minute match window.
meta:
events:
$e.principal.user.userid = $userid
match:
$userid over 5m
outcome:
$last_event = window.last($e.metadata.event_timestamp.seconds,
$e.metadata.vendor_name)
// yields v3 if the events in the match window are 1, 2 and 3 and
// corresponding values v1, v2, and v3.
condition:
$e
}
window.median
window.median(numeric_values, should_ignore_zero_values)
תיאור
הפונקציה מחזירה את הערך החציוני של ערכי הקלט. אם יש 2 ערכים חציוניים, רק אחד מהם ייבחר באופן לא דטרמיניסטי כערך המוחזר.
סוגי נתונים של פרמטרים
INT|FLOAT, BOOL
סוג הערך שמוחזר
FLOAT
דוגמאות קוד
דוגמה 1
בדוגמה הזו, הפונקציה מחזירה את החציון כשערכי הקלט לא אפס.
rule median_file_size {
meta:
events:
$e.metadata.event_type = "FILE_COPY"
$userid = $e.principal.user.userid
match:
$userid over 1h
outcome:
$median_file_size = window.median($e.principal.file.size) // returns 2 if the file sizes in the match window are [1, 2, 3]
condition:
$e
}
דוגמה 2
בדוגמה הזו, הפונקציה מחזירה את החציון כשהקלט כולל כמה ערכים של אפס שלא צריך להתעלם מהם.
rule median_file_size {
meta:
events:
$e.metadata.event_type = "FILE_COPY"
$userid = $e.principal.user.userid
match:
$userid over 1h
outcome:
$median_file_size = window.median($e.principal.file.size) // returns 1 if the file sizes in the match window are [0,0, 1, 2, 3]
condition:
$e
}
דוגמה 3
בדוגמה הזו, הפונקציה מחזירה את החציון כשהקלט כולל כמה ערכים של אפס שצריך להתעלם מהם.
rule median_file_size {
meta:
events:
$e.metadata.event_type = "FILE_COPY"
$userid = $e.principal.user.userid
match:
$userid over 1h
outcome:
$median_file_size = window.median($e.principal.file.size, true) // returns 2 if the file sizes in the match window are [0,0, 1, 2, 3]
condition:
$e
}
דוגמה 4
בדוגמה הזו, הפונקציה מחזירה את הערך החציוני כשקלט כולל את כל ערכי האפס שצריך להתעלם מהם.
rule median_file_size {
meta:
events:
$e.metadata.event_type = "FILE_COPY"
$userid = $e.principal.user.userid
match:
$userid over 1h
outcome:
$median_file_size = window.median($e.principal.file.size) // returns 0 if the file sizes in the match window are [0,0]
condition:
$e
}
דוגמה 5
בדוגמה הזו אפשר לראות שאם יש כמה ערכי חציון, רק אחד מהם מוחזר.
rule median_file_size {
meta:
events:
$e.metadata.event_type = "FILE_COPY"
$userid = $e.principal.user.userid
match:
$userid over 1h
outcome:
$median_file_size = window.median($e.principal.file.size) // returns 1 if the file sizes in the match window are [1, 2, 3, 4]
condition:
$e
}
window.mode
window.mode(values)
תיאור
הפונקציה מחזירה את השכיח של ערכי הקלט. אם יש כמה ערכים אפשריים של mode, רק אחד מהם ייבחר באופן לא דטרמיניסטי כערך ההחזרה.
סוגי נתונים של פרמטרים
INT|FLOAT|STRING
סוג הערך שמוחזר
STRING
דוגמאות קוד
דוגמה 1
קבלת האופן של הערכים בחלון ההתאמה.
// This rule sets the outcome $size_mode to the most frequently occurring
// file size in the 5 minute match window.
events:
$e.user.userid = $userid
match:
$userid over 5m
outcome:
$size_mode = window.mode($e.file.size) // yields 1.6 if the event file size values in the match window are 1.6, 2, and 1.6
window.range
window.range(numeric_values, optional should_ignore_zero_values)
תיאור
הפונקציה מחזירה את טווח הערכים של ערכי הקלט שנמצאו (מינימום, מקסימום כולל). כל ערך יכול להיות מספר שלם או מספר עשרוני. אם מגדירים את הארגומנט השני האופציונלי כ-true, המערכת מתעלמת מערכים אפסיים.
סוגי נתונים של פרמטרים
INT|FLOAT, BOOL
סוג הערך שמוחזר
ARRAY_FLOATS
דוגמאות קוד
בדוגמאות הקוד הבאות אפשר לראות כמה מהדרכים שבהן אפשר להשתמש בפונקציה window.range.
דוגמה: מספר שלם מינימלי ומקסימלי
בדוגמה הזו מוצגים ערכי המינימום והמקסימום של מספר שלם.
window.range([1, 2, 3, 4], false) = [1.000000, 4.000000]
דוגמה: מספר נקודה צפה מינימלי ומקסימלי
בדוגמה הזו מוצגים הערכים המינימלי והמקסימלי של נקודה צפה.
window.range([1.100000, 39.400000, 2.400000], false) = [1.100000, 39.400000]
דוגמה: מספר שלם שלילי מינימלי ומקסימלי
בדוגמה הזו מוצגים הערכים המינימלי והמקסימלי של מספר שלם שלילי.
window.range([-1.100000, 1.100000, 0.000000, 2.400000], false) = [-1.100000, 2.400000]
דוגמה: ערך 0 שהמערכת התעלמה ממנו
בדוגמה הזו אפשר לראות איך המערכת מתעלמת מערכים של 0 כשמגדירים את הפרמטר השני.
window.range([0, 0, 0, 394, 1], true) = [1.000000, 394.000000]
window.stddev
window.stddev(numeric_values)
תיאור
הפונקציה מחזירה את סטיית התקן של ערכי הקלט בחלון התאמה.
סוגי נתונים של פרמטרים
INT|FLOAT
סוג הערך שמוחזר
FLOAT
דוגמאות קוד
דוגמה 1
בדוגמה הזו, הפונקציה מחזירה את סטיית התקן של מספרים שלמים בחלון התאמה.
// This rule creates a detection when the file size stddev in 5 minutes for a user is over a threshold.
events:
$e.user.userid = $userid
match:
$userid over 5m
outcome:
$p1 = window.stddev($e.file.size) // yields 4.0 if the event file size values in the match window are [10, 14, 18].
condition:
$e and #p1 > 2
דוגמה 2
בדוגמה הזו מוחזרת סטיית התקן של מספרים עשרוניים בחלון התאמה.
events:
$e.user.userid = $userid
match:
$userid over 5m
outcome:
$p1 = window.stddev($e.file.size) // yields 4.488686 if the event file size values in the match window are [10.00, 14.80, 18.97].
condition:
$e and #p1 > 2
דוגמה 3
בדוגמה הזו מוחזרת סטיית התקן בחלון התאמה שמכיל מספרים שליליים.
events:
$e.user.userid = $userid
match:
$userid over 5m
outcome:
$p1 = window.stddev($e.file.size) // yields 48.644972 if the event file size values in the match window are [-1, -56, -98].
condition:
$e and #p1 > 2
דוגמה 4
בדוגמה הזו, סטיית התקן היא אפס כי כל הערכים בחלון ההתאמה זהים.
events:
$e.user.userid = $userid
match:
$userid over 5m
outcome:
$p1 = window.stddev($e.file.size) // yields 0.000000 if the event file size values in the match window are [1, 1, 1].
condition:
$e and #p1 > 2
דוגמה 5
בדוגמה הזו מוחזרת סטיית התקן של חלון התאמה שמכיל מספרים חיוביים ושליליים.
events:
$e.user.userid = $userid
match:
$userid over 5m
outcome:
$p1 = window.stddev($e.file.size) // yields 1.000000 if the event file size values in the match window are [1, 0, -1].
condition:
$e and #p1 > 10
window.variance
window.variance(values)
תיאור
הפונקציה מחזירה את השונות שצוינה של ערכי הקלט.
סוגי נתונים של פרמטרים
INT|FLOAT
סוג הערך שמוחזר
FLOAT
דוגמאות קוד
דוגמה 1
בדוגמה הזו מוחזרת השונות של כל המספרים השלמים.
// This rule creates a detection when the file size variance in 5 minutes for a user is over a threshold.
events:
$e.user.userid = $userid
match:
$userid over 5m
outcome:
$p1 = window.variance($e.file.size) // yields 16 if the event file size values in the match window are [10, 14, 18].
condition:
$e and #p1 > 10
דוגמה 2
בדוגמה הזו מוחזרת השונות של כל המספרים הממשיים.
events:
$e.user.userid = $userid
match:
$userid over 5m
outcome:
$p1 = window.variance($e.file.size) // yields 20.148300 if the event file size values in the match window are [10.00, 14.80, 18.97].
condition:
$e and #p1 > 10
דוגמה 3
בדוגמה הזו מוחזרת השונות של מספרים שליליים.
events:
$e.user.userid = $userid
match:
$userid over 5m
outcome:
$p1 = window.variance($e.file.size) // yields 2366.333333 if the event file size values in the match window are [-1, -56, -98].
condition:
$e and #p1 > 10
דוגמה 4
בדוגמה הזו מוחזר ערך קטן של שונות.
events:
$e.user.userid = $userid
match:
$userid over 5m
outcome:
$p1 = window.variance($e.file.size) // yields 0.000000 if the event file size values in the match window are [0.000000, 0.000000, 0.000100].
condition:
$e and #p1 > 10
דוגמה 5
בדוגמה הזו, השונות היא אפס.
events:
$e.user.userid = $userid
match:
$userid over 5m
outcome:
$p1 = window.variance($e.file.size) // yields 0.000000 if the event file size values in the match window are [1, 1, 1].
condition:
$e and #p1 > 10
דוגמה 6
בדוגמה הזו מוחזרת השונות של מספרים חיוביים ושליליים.
events:
$e.user.userid = $userid
match:
$userid over 5m
outcome:
$p1 = window.variance($e.file.size) // yields 1.000000 if the event file size values in the match window are [1, 0, -1].
condition:
$e and #p1 > 10
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.