In diesem Thema wird die Datenbankabfragesyntax beschrieben. Es gibt drei Hauptmechanismen für das Durchführen von Abfragen in der Datenbank, die Aufrufe query
, values
und msearch
im Ordner /sdk
in jedem Core-Service.
Der Aufruf query
gibt Metaelemente aus der Metadatenbank zurück, wobei der Index für ein schnelles Abrufen genutzt werden kann.
Der Aufruf values
gibt Gruppen eindeutiger Metawerte zurück, die nach bestimmten Kriterien geordnet sind. Er ist so optimiert, dass er die eindeutigen Werte als Untergruppe zurückgibt, die von einer Aggregatfunktion, z. B. Anzahl, sortiert werden.
Der Aufruf msearch
verwendet Suchbegriffe als Eingabe und gibt passende Sitzungen zurück, die mit den Suchbegriffen übereinstimmen. Er kann innerhalb von Indizes, Metadaten, Rohpaketdaten oder Rohprotokolldaten suchen.
query
Syntax
Die Meldung query
weist folgende Syntax auf:
query-params = size-param, space, query-param, {space, start-meta-param}, {space, end-meta-param}; size-param = "size=", ? integer between 0 and 1,677,721 ? ; query-param = "query=", query-string ; start-meta-param = "id1=", metaid ; end-meta-param = "id2=", metaid ; metaid = ? any meta ID from the meta database ? ;
Die Parameter id1
, id2
und size
bilden für die Rückgabe größerer Ergebnismengen aus der Datenbank einen Auslagerungsmechanismus. Sie werden vor allem von Entwicklern genutzt, die Anwendungen direkt für die NetWitness Core-Datenbank erstellen. Normalerweise werden zurückgegebene Ergebnisse vom ältesten zum neuesten Eintrag sortiert (höhere Meta-IDs sind stets aktueller). Um die Ergebnisse vom neuesten zum ältesten Eintrag zu sortieren, drehen Sie die IDs um, sodass id1
größer ist als id2
. Dies bringt eine leichte Verschlechterung der Performance mit sich, da die Where-Klausel zunächst vollständig ausgewertet werden muss, bevor die Verarbeitung in umgekehrter Reihenfolge beginnen kann.
Wenn keine Größe angegeben oder sie auf null gesetzt wurde, gibt das System alle Ergebnisse ohne Paging zurück. Für die RESTful-Schnittstelle wird die gesamte Antwort daher mit segmentierter Codierung zurückgegeben. Das systemeigene Protokoll gibt die Ergebnisse in mehreren Meldungen zurück.
Der Parameter query
ist eine query
-Befehlszeichenfolge mit eigener NetWitness-spezifischer Syntax:
query-string = select-clause {, where-clause} {, group-by-clause {, order-by-clause } } ; select-clause = "select ", ( "*" | meta-or-aggregate {, meta-or-aggregate} ) ; where-clause = " where ", { where-criteria } ; meta-or-aggregate = meta | aggregate_func, "(", meta-key, ")" ; aggregate_func = "sum" | "count" | "min" | "max" | "avg" | "distinct" | "first" | "last" | "len" | "countdistinct" ; group-by-clause = " group by ", meta-key-list meta-key-list = meta-key {, meta-key-list} order-by-clause = " order by ", order-by-column order-by-column = meta-or-aggregate { "asc" | "desc" } {, order-by-column}
Mithilfe der select
-Klausel können Sie entweder *
festlegen, dass alle Metadaten aus allen Sitzungen zurückgegeben werden, die mit der Where-Klausel übereinstimmen, oder eine Reihe von Meta-Feldnamen und Aggregatfunktionen angeben, anhand derer bei jeder Sitzung eine Untergruppe der Metadaten ausgewählt wird.
Die Klausel select
kann umbenannte Metaschlüsselnamen enthalten. Alle Felder, die im Ergebnissatz als Ergebnis eines umbenannten Schlüssels in der Klausel select
angezeigt werden, werden mit den Namen des Metaschlüssels zurückgegeben, der dem in der Klausel select
verwendeten Namen entspricht. Beispiel: Wenn der Schlüssel port_src
zum Umbenennen von tcp.srcport
verwendet wird, gibt eine Abfrage mit select port_src
nur port_src
-Felder zurück, selbst wenn die zugrunde liegenden Metadaten den Typ tcp.srcport
aufwiesen.
Die Aggregatfunktionen wirken sich wie folgt auf den Ergebnissatz der Abfrage aus:
Funktion | Ergebnis |
---|---|
sum | Alle Metawerte zusammenaddieren; nur bei Ziffern möglich |
count | Die Gesamtzahl von Metafeldern, die zurückgegeben worden wären |
min | Der gesehene Mindestwert |
max | Der gesehene Maximalwert |
avg | Der Durchschnittswert für die Anzahl |
distinct | Gibt eine Liste aller erkannten eindeutigen Werte zurück |
countdistinct | Gibt die Anzahl der gesehenen eindeutigen Werte zurück. countdistinct ist gleich der Anzahl von Metawerten, die die Funktion „distinct“ zurückgegeben hätte. |
first | Gibt den ersten gesehenen Wert zurück |
last | Gibt den letzten gesehenen Wert zurück |
len | Konvertiert alle Feldwerte in eine UInt32-Länge, statt den tatsächlichen Wert anzugeben. Diese Länge entspricht nicht der Länge der in der Metadatenbank gespeicherten Struktur, sondern der für die Speicherung des tatsächlichen Werts erforderlichen Anzahl von Byte. Für den Begriff „NetWitness“ wird beispielsweise die Länge 10 zurückgegeben. Für IPv4-Felder, z. B. ip.src , werden stets 4 Byte zurückgegeben. |
where
Klauseln
Bei der where
-Klausel handelt es sich um einen spezifischen Filter, mit dem Sie unter Verwendung des Index Sitzungen aus der Sammlung auswählen können.
Syntax:
where-criteria = criteria-or-group, { space, logical-op, space, criteria-or-group } ; criteria-or-group = criteria | group ; criteria = meta-key, ( unary-op | binary-op meta-value-ranges ) ; group = ["~"], "(" where-clause ")" ; logical-op = "&&" | "||" ; unary-op = "exists" | "!exists" ; binary-op = "=" | "!=" | "<" | ">" | ">=" | "<=" | "begins" | "contains" | "ends" | "regex" ; meta-value-ranges = meta-value-range, { ",", meta-value-range } ; meta-value-range = (meta-value | "l" ), [ "-", ( meta-value | "u" ) ] ; meta-value = number | quoted-value | ip-address | mac-address | relative-time ; quoted-value = ( '"' text '"' ) | ( '"' date-time '"' ) ; relative-time = "rtp(" , time-boundary , "," , positive-integer , time-unit, ")" ; time-boundary = "earliest" | "latest" ; positive-integer = ? any non-negative integral number ? time-unit = "s" | "m" | "h" ;
Bei der Angabe von Regelkriterien muss der Teil der Klausel, der sich auf den meta-value
bezieht, mit dem im meta-key
angegebenen Metawert übereinstimmen. Wenn der Schlüssel beispielsweise ip.src
ist, sollte der meta-value
eine IPv4-Adresse sein.
Abfragen mit einem meta-key
-Namen stimmen mit Metaelementen überein, die sowohl dem meta-key
-Namen als auch den Namen aller für den Schlüssen angegebener „Umbenennungen“ entsprechen. Details zum Umbenennen von Schlüsseln finden Sie im Thema Indexanpassung .
Abfrageoperatoren
In der folgenden Tabelle werden die Funktionen der einzelnen Operatoren beschrieben:
Operator | Funktion |
---|---|
= | Entspricht Sitzungen, die den exakten Metawert enthalten. Bei Angabe eines Wertebereichs wird jeder der Werte als Übereinstimmung betrachtet. |
!= | Entspricht allen Sitzungen, die mit ebendieser Klausel nicht übereinstimmen würden, wenn sie mit dem Operator = verfasst worden wäre. |
< | Für numerische Werte: Entspricht Sitzungen, die Metadaten mit einem numerischen Wert enthalten, der kleiner ist als die rechte Seite. Wurde auf der rechten Seite ein Bereich angegeben, wird der erste darin genannte Wert herangezogen. Wenn mehrere Bereiche angegeben wurden, ist das Verhalten unbestimmt. Bei Metadaten in Textform erfolgt ein lexikografischer Vergleich. |
<= | Dasselbe Verhalten wie bei < , wobei auch Sitzungen mit Metadaten, die dem Wert genau entsprechen, als Übereinstimmung gelten. |
> | Ähnlich wie beim Operator < , wobei hier Sitzungen als Übereinstimmung gelten, deren numerischer Wert größer ist als die rechte Seite. Wurde die rechte Seite als Bereich angegeben, wird der letztgenannte Wert des Bereichs für den Vergleich berücksichtigt. |
>= | Dasselbe Verhalten wie bei > , wobei auch Sitzungen mit Metadaten, die dem Wert genau entsprechen, als Übereinstimmung gelten. |
begins | Entspricht Sitzungen, die Metadaten in Textform enthalten, die mit den gleichen Buchstaben wie die rechte Seite beginnen. |
ends | Entspricht Sitzungen, die Metadaten in Textform enthalten, die mit den gleichen Buchstaben wie die rechte Seite enden. |
contains | Entspricht Sitzungen, die Metadaten in Textform enthalten, die die auf der rechten Seite angegebene Teilzeichenkette enthalten. |
regex | Entspricht Sitzungen, die Metadaten in Textform enthalten, die dem regulären Ausdruck (Regex) auf der rechten Seite entsprechen. Die Regex-Analyse erfolgt durch boost::regex. |
exists | Entspricht Sitzungen, die beliebige Metawerte mit dem angegebenen Metaschlüssel enthalten. |
!exists | Entspricht Sitzungen, die keine Metawerte enthalten, die dem angegebenen Metaschlüssel entsprechen. |
length | Entspricht Sitzungen, die Metawerte in Textform mit einer bestimmten Länge enthalten. Der Ausdruck auf der rechten Seite muss eine nichtnegative Zahl sein. |
Textwerte
Das System erwartet in Anführungszeichen stehende Textwerte. Wenn er nicht als Zeit (siehe unten) analysiert werden kann, wird ein in Anführungszeichen stehender Wert als Text interpretiert.
IP-Adressen
IP-Adressen lassen sich mithilfe von Standardtextausdrücken für IPv4- und IPv6-Adressen darstellen. Außerdem kann in der Abfrage die CIDR -Notation für den Ausdruck eines Adressbereichs verwendet werden. Bei Verwendung der CIDR-Notation wird diese auf den entsprechenden Wertebereich erweitert.
MAC-Adressen
Eine MAC-Adresse kann mithilfe der standardmäßigen MAC-Adressen-Notation angegeben werden: aa:bb:cc:dd:ee:ff
Ausdruck von Datum und Zeit
Datumsangaben in NetWitness Suite erfolgen mithilfe der Unix-Epochenzeit, die der Anzahl der seit dem 1.1.1970 (UTC) vergangenen Sekunden entspricht. In Abfragen können Sie die Zeit als Anzahl dieser Sekunden darstellen oder die Darstellung als Zeichenkette nutzen. Die Darstellung von Datum und Zeit als Zeichenkette lautet "YYYY-mmm-DD HH:MM:SS"
. Der Monat wird als dreibuchstabige Abkürzung dargestellt. Sie können den Monat auch als zweistellige Zahl zwischen 01 und 12 angeben.
Zeitwerte müssen in Anführungszeichen gesetzt werden.
Es wird davon ausgegangen, dass in Abfragen enthaltene Zeitangaben im UTC-Format angegeben sind.
Relative Zeitpunkte
Mit relativen Zeitpunkten kann eine where-Klausel auf einen Wert mit einem bestimmten Versatz von den frühesten oder spätesten Zeitmetadaten in der Sammlung verweisen.
Ein Ausdruck für einen relativen Zeitpunkt weist die Syntax rtp(boundary, duration)
auf.
Die Grenze ist entweder earliest
oder latest
.
Die Dauer ist ein Ausdruck von Stunden, Minuten oder Sekunden. Beispiel: 24h
, 60m
oder 60s
.
Relative Zeit Punkte können nur in SDK-Vorgängen mit einer Sammlung verwendet werden, aus der die Grenzen für die frühesten und spätesten Zeitmetawerte abgerufen werden können.
Relative Zeitpunkte können nur mit indizierten Metadatentypen verwendet werden. Standardmäßig sind time
und event.time
indizierte Metadatentypen.
Beispiele:
Last 90m of collection time: time = rtp(latest, 90m) - u First 2 days of event time: event.time = l - rtp(earliest, 48h)
Werte für spezielle Bereiche
Bereiche werden üblicherweise mit der Syntax * smallest
* -
* largest
* angegeben, es gibt allerdings einige spezielle Platzhalterwerte, die in Bereichsausdrücken verwendet werden können. Der Buchstabe l
wird beispielsweise verwendet, um die untere Grenze aller Metawerte als Startwert des Bereichs zu verwenden, während u
für die obere Grenze steht. Die Grenzen werden anhand des kleinsten bzw. größten Werts aus allen bereits in den Index eingegangenen Metawerten ermittelt.
Wenn Sie das Tag l
oder u
verwenden, sollte es nicht in Anführungszeichen stehen.
So würde der Ausdruck time = "2014-may-20 11:57:00" - u
allen Zeitangaben ab dem 20. Mai 2014 11:57:00 bis zum neuesten in der Sammlung enthaltenen Datum entsprechen.
Beachten Sie, dass der Ausdruck eines Bereichs leicht mit einer Textzeichenkette verwechselt werden kann. Stellen Sie sicher, dass Textwerte, die -
enthalten, in Anführungszeichen stehen und dass Bindestriche innerhalb von Ausdrücken eines Bereichs nicht innerhalb von Text in Anführungszeichen stehen.
group by
-Klausel (seit 10.5)
Die Abfrage-API hat die Fähigkeit, aus den Ergebnissen eines Abfrageaufrufs Aggregatgruppen zu erzeugen. Dies geschieht, indem eine group by
-Klausel auf die Abfrage angewendet wird. Wenn group by
angegeben wird, wird der Ergebnissatz für die Abfrage in Gruppen unterteilt. Jede Ergebnisgruppe wird durch die in der group by-Klausel angegebenen Metawerte eindeutig identifiziert.
Ziehen Sie beispielsweise die Abfrage select count(ip.dst)
in Betracht. Diese Abfrage gibt die Anzahl aller ip.dst-Metadaten in der Datenbank zurück. Bei Hinzufügen einer group by
-Klausel wie select count(ip.dst) group by ip.src
gibt die Abfrage jedoch eine Anzahl der ip.dst-Metadaten zurück, die für jede eindeutige ip.src gefunden wurde.
Ab NetWitness Suite Version 10.5 können Sie bis zu 6 Metafelder in einer group by
-Klausel verwenden.
Die group by
-Klausel hat mit der values
-Abfrage einige Funktionen gemeinsam, aber sie bietet signifikant erweiterte Gruppen auf Kosten längerer Abfragezeiten. Zum Hervorbringen der Ergebnisse einer gruppierten Abfrage gehört das Lesen der Metadaten von der Metadatenbank für alle Sitzungen, die der where
-Klausel entsprechen, während eine Values-Abfrage ihre Aggregate hervorbringen kann, indem sie einfach den Index liest.
Die Inhalte jeder Gruppe, die von der Abfrage zurückgegeben werden, werden durch die select
-Klausel definiert. Die select
-Klausel kann jede der ausgewählten Aggregatfunktionen oder Metafelder enthalten. Wenn mehrere Aggregate ausgewählt werden, wird das Ergebnis der Aggregatfunktion für jede Gruppe definiert. Wenn nicht aggregierte Felder ausgewählt werden, werden die Metafelder für jede Gruppe stapelweise zurückgegeben.
Der Ergebnissatz einer group by
-Abfrage wird mit den folgenden Regeln kodiert:
- Alle einer Gruppe zugeordneten Metadaten werden mit derselben Gruppennummer bereitgestellt.
- Die ersten an die Gruppe zurückgegebenen Metadaten bestimmen den Gruppenschlüssel. Wenn beispielsweise die
group by
-Klauselgroup by ip.src
angibt, ist das erste Metadatenelement jeder Gruppeip.src
. - Die normalen, nicht aggregierten Metadatenelemente werden nach dem
group key
zurückgegeben, werden aber alle dieselbe Gruppennummer aufweisen wie die Gruppenschlüsselmetadaten. - Danach werden die aggregierten Ergebnismetafelder für jede Gruppe zurückgegeben.
- Alle Felder innerhalb einer Gruppe werden zusammen zurückgegeben. Verschiedene Gruppenergebnisse werden sich nicht überlappen.
Wenn einem der group by
-Metadatenelemente von einer der durch die where
-Klausel zugeordneten Sitzungen fehlen, wird das entsprechende Metafeld für die Zwecke dieser Gruppe als NULL behandelt. Wenn die Ergebnisse für diese Gruppe zurückgegeben werden, werden die als NULL gewerteten Teile des Gruppenschlüssels aus den Gruppenergebnissen ausgelassen, da die Datenbank kein Konzept von NULL hat.
Die Semantik einer group by
-Abfrage unterscheidet sich von einer SQL-artigen Datenbank dahingehend, welche Metafelder zurückgegeben werden. SQL-Datenbanken erfordern, dass Sie die group by
-Spalten explizit in der select
-Klausel auswählen, wenn Sie möchten, dass sie im Ergebnissatz zurückgegeben wird. Die NetWitness Core-Datenbank gibt die Gruppenspalten immer implizit zuerst zurück.
Eine Abfrage mit einer group by
-Klausel honoriert den Parameter size
für den Ergebnissatz, falls einer angegeben wurde. Allerdings legt sie aufgrund des Typs der Gruppierung dem Aufrufer eine zusätzliche Belastung auf, Gruppen zu paginieren und zu reformieren, wenn ein Ergebnissatz mit fester Größe gefordert wird. Aus diesem Grund sollten Sie keine ausdrückliche Ergebnisgröße angeben, wenn Sie einen group by
-Aufruf tätigen. Wenn Sie keine ausdrückliche Größe angeben, wird der gesamte Ergebnissatz als teilweises Ergebnis geliefert.
Die folgende Tabelle beschreibt die Datenbank-Honorierungs-Konfigurationsparameter, die die Auswirkung von I/O oder Speicher einer Group-by-Abfrage beschränken.
Parameter | Funktion |
---|---|
/sdk/config/max.query.groups | Dies ist der Grenzwert für die Anzahl der Gruppen, die im Speicher gehalten werden können, um Aggregate zu berechnen. Dieser Parameter erlaubt Ihnen, die Gesamtspeichernutzung der Abfrage zu begrenzen. |
/sdk/config/max.where.clause.sessions | Dies ist der Grenzwert für die Anzahl der Sitzungen, die von der Where-Klausel in einer Abfrage verarbeitet werden können. Dieser Parameter erlaubt Ihnen, einen Grenzwert für die Anzahl der Sitzungen einzustellen, die von den Metadaten- und Sitzungsdatenbanken gelesen werden müssen, um eine Abfrage zu lösen. |
order by
-Klausel (seit 10.5)
Eine order by
-Klausel kann zu einer Abfrage hinzugefügt werden, die eine group by
-Klausel enthält. Die order by
-Klausel sorgt dafür, dass der Satz gruppierter Ergebnisse in sortierter Reihenfolge zurückgegeben wird.
Eine order by
-Klausel besteht aus einem Satz von zu sortierenden Elementen in aufsteigender oder absteigender Reihenfolge. Das Sortieren kann auf jedem Datenfeld durchgeführt werden, das im Ergebnissatz zurückgegeben wird. Dazu zählen von der select
-Klausel spezifizierte Metadaten, von der select
-Klausel spezifizierte Ergebnisse von Aggregatfunktionen oder group by
-Metadatenfelder.
Die order by
-Klausel kann über mehrere Spalten sortieren. Es gibt keinen Grenzwert für die Anzahl zulässiger order by
-Spalten in der Abfrage, aber es gibt eine praktische Begrenzung insoweit, dass jede der order by
-Spalten sich auf etwas beziehen muss, das von der select
-Klausel oder group by
-Klausel zurückgegeben wurde. Die Sortierung über mehrere Spalten geschieht lexikographisch, das heißt, wenn zwei Gruppen gleiche Werte für die erste Spalte haben, werden sie nach den zweiten Spalten sortiert. Wenn auch die zweiten Spalten gleich sind, werden sie nach den dritten Spalten sortiert usw. über alle order by
-Spalten hinweg.
Die NetWitness Core-Datenbank ist insofern einzigartig, als dass jede der Ergebnisgruppen, die auf eine Abfrage zurückgegeben werden, viele Werte für eine Auswahl haben können. Zum Beispiel ist es möglich, alle einem Metadatentyp entsprechenden Metadaten auszuwählen und sie in Gruppen zu organisieren und es ist möglich, mithilfe der Funktion distinct()
Gruppen von unterschiedlichen Metawerten zurückzugeben. Wenn eine order by
-Klausel eines der Felder in der Gruppe mit mehreren Werten referenziert, wird wie folgt sortiert:
- Innerhalb jeder Gruppe werden die Felder mit mehreren passenden Werten nach der Sortierklausel sortiert.
- Alle Gruppen werden sortiert, indem das erste Vorkommnis des sortierten Feldes, das innerhalb jeder Gruppe gefunden wird, verglichen wird.
Die order by
-Klausel ist nur in Abfragen verfügbar, die eine group by
-Klausel haben, da Gruppen die Metafelder in unterschiedliche Datensätze organisieren müssen. Wenn Sie eine beliebige Abfrage so sortieren möchten, als wäre keine Gruppierung angewendet worden, verwenden Sie group by sessionid
. So wird sichergestellt, dass die Ergebnisse in Gruppen von unterschiedlichen Sitzungen oder Ereignissen zurückgegeben werden.
group by
-Klauseln werden natürlicherweise in aufsteigender Gruppenschlüssel-Reihenfolge zurückgegeben, aber mithilfe einer order by
-Klausel können Gruppen auch in anderer Reihenfolge zurückgegeben werden.
Wenn bei einer order by
-Spalte weder asc
noch desc
angegeben ist, wird standardmäßig aufsteigend sortiert.
Beispiele:
select countdistinct(ip.dst) GROUP BY ip.src ORDER BY countdistinct(ip.dst) select countdistinct(ip.dst) GROUP BY ip.src ORDER BY countdistinct(ip.dst) desc select countdistinct(ip.dst),sum(size) GROUP BY ip.src ORDER BY sum(size) desc, countdistinct(ip.dst) select sum(size) GROUP BY ip.src, ip.dst ORDER BY ip.dst desc select user.dst,time GROUP BY sessionid ORDER BY user.dst select * GROUP BY sessionid ORDER BY time
values
-Aufruf
Der Index hält eine Funktion für values
auf niedriger Stufe bereit, um auf die im Index gespeicherten eindeutigen Metawerte zugreifen zu können. Dank dieser Funktion können Entwickler erweiterte Funktionen an Gruppen eindeutiger Metawerte ausführen.
Parametersyntax für den Aufruf values
:
values-params = field-name-param, space, where-param, space, size-param, {space, flags-param} {space, start-meta-param}, {space, end-meta-param}, {space, threshold-param}, {space, aggregate-func-param}, {space, aggregate-field-param}, {space, min-param}, {space, max-param} ; field-name-param = "fieldName=", meta-key ; where-param = "where=", where-clause ; size-param = "size=", ? integer between 1 and 1,677,721 ? ; start-meta-param = ? same as query message ? end-meta-param = ? same as query message ? flags-param = "flags=", {values-flag, {"," values-flag} } ; values-flag = "sessions" | "size" | "packets" | "sort-total" | "sort-value" | "order-ascending" | "order-descending" ; threshold-flag = "threshold=", ? non-negative integer ? ; aggregate-func-param = "aggregateFunction=", { aggregate-func-flag } ; aggregate-func-flag = "count" | "sum" ; aggregate-field-param = "aggregateFieldName=", meta-key ; min-param = "min=", meta-value ; max-param = "max=", meta-value ;
Mit dem values
-Aufruf steht eine Funktion für die Rückgabe einer Reihe von eindeutigen Metawerten für einen angegebenen Metaschlüssel bereit. Der values
-Aufruf kann für jeden eindeutigen Wert eine aggregierte Gesamtanzahl zurückgeben. Die für die Berechnung der Summe verwendete Funktion wird vom Flags-Parameter gesteuert.
Parameter
In der folgenden Tabelle werden die Eigenschaften der einzelnen Parameter beschrieben:
Parameter | Funktion |
---|---|
fieldName | Dies ist der Name des Metaschlüssels, für den Sie eindeutige Werte abrufen. Wenn fieldName beispielsweise ip.src lautet, gibt diese Funktion die eindeutigen Quellen-IP-Werte in der Sammlung zurück. Wenn sich fieldName auf einen Schlüssel mit Umbenennungsverweisen bezieht, wird das Ergebnis als die Kombination von Feldwerten für den angegebenen Metaschlüsselnamen und allen Metaschlüsseln der Verweise definiert. |
where | Dies ist eine where -Klausel, die der Filterung derjenigen Sitzungen dient, für die eindeutige Werte zurückgegeben wurden. Wenn beispielsweise fieldName den Wert ip.src aufweist und die where -Klausel ip.src = 192.168.0.0/16 ist, werden nur Werte im Bereich zwischen 192.168.0.0 und 192.168.255.255 zurückgegeben. Weitere Informationen zur Syntax der where -Klausel finden Sie unter Where-Klauseln. |
size | Die Größe der zurückgegebenen Menge von Werten. Mit dieser Funktion wird eine kleine Untermenge der möglichen eindeutigen Werte aus der Datenbank zurückgegeben. |
id1 , id2 | Mit diesen optionalen Parametern wird der Umfang der Suche nach eindeutigen Werten auf einen bestimmten Abschnitt der Metadatenbank und des Index begrenzt. Die Festlegung der Parameter id1 und id2 für einen begrenzten Bereich der Metadatenbank ist unabdingbar, um umfangreiche Sammlungen schnell durchsuchen zu können. |
flags | Mit Flags wird die Sortierung und Aufsummierung von Werten gesteuert. Flags werden im folgenden Abschnitt „Werte-Flags“ beschrieben. |
threshold | Durch Setzen des Parameters threshold kann der values -Aufruf die Erfassung der mit jedem Wert verknüpften Summe abkürzen, sobald der Schwellenwert erreicht ist. Durch die Angabe eines Schwellenwertes kann der Aufrufer die Menge der aus der Datenbank abzurufenden Index- und Metaelemente beschränken. Diese Optimierung findet nicht statt, wenn der Parameter threshold nicht festgelegt oder auf null gesetzt wurde. |
aggregateFunction | Optionaler Parameter, der zum Ändern des Standardverhaltens vom Zählen von Sitzungen, Paketen oder Größen bis hin zum Zählen oder Aufsummieren des durch aggregateFieldName definierten numerischen Felds verwendet wird. Wenn einer der Parameter definiert wurde, müssen beide angegeben werden. Übergeben Sie entweder sum oder count , um anzugeben, welches Verhalten ausgeführt werden soll. |
aggregateFieldName | Das Metadatenfeld, für das aggregateFunction ausgeführt wird. Sowohl der Parameter aggregateFunction als auch der Parameter aggregateFieldName müssen angegeben werden, wenn das Flag aggregate gesetzt ist. Die Ausführung eines values -Aufrufs mithilfe einer der Aggregatfunktionen kann erheblich langsamer erfolgen als ein values -Aufruf, der die Summen von Sitzungen, Paketen oder Größen erfasst. Das liegt daran, dass für jede übereinstimmende Sitzung die where -Klausel aus der Metadatenbank abgerufen werden muss. Bei diesem Scanvorgang erfolgt eine I/O-Bindung eines überwiegenden Teils der Abfrage an die Meta-Datenbank-Volumes. Die für einen aggregierten values -Aufruf erforderliche Zeit verhält sich linear proportional zur Anzahl der Sitzungen, die der where -Klausel entsprechen. |
min , max | Der Mindest- und der Maximalwert, die vom Aufruf zurückgegeben werden sollten. Diese Parameter werden für die Iteration (oder das Paging) einer besonders hohen Anzahl von Werten verwendet – üblicherweise mehr Werte, als von einem einzelnen Aufruf zurückgegeben werden könnten. Sie werden vor allem zusammen mit den Flags sort-value,sort-ascending verwendet, sodass der höchste zurückgegebene Wert in einem nachfolgenden Aufruf als Wert für den Parameter min verwendet wird. Es handelt sich um exklusive Werte. Wenn min="rsa" angegeben wurde und rsa ein gültiger Wert war, wird nicht rsa zurückgegeben, sondern der nächsthöhere Wert. |
values
-Flags
Mit dem Parameter flags
wird die Funktion des Werteaufrufs gesteuert. Es gibt drei Gruppen von Flags, die den unterschiedlichen Operationsmodi entsprechen, wie Sie der folgenden Tabelle entnehmen können.
Flag | Beschreibung |
---|---|
sessions , size , packets | Mit dem Aufruf values können Sie eins der folgenden Flags angeben, um zu bestimmen, wie die Summe für jeden Wert berechnet werden soll. Beim Flag sessions gibt der Aufruf values eine Anzahl von Sitzungen zurück, die jeden Wert enthalten. Mit dem Flag size summiert der Aufruf values die Größe aller Sitzungen, die jeweils eindeutige Werte enthalten, und meldet die Gesamtgröße für jeden eindeutigen Wert. Beim Flag packets summiert der Werteaufruf die Anzahl der Pakete in allen Sitzungen, die jeweils eindeutige Werte enthalten, und gibt diese Summe für jeden eindeutigen Wert zurück. |
sort-total , sort-value | Mit diesen Flags wird die Sortierung der Flags gesteuert. Wenn das Flag sort-total lautet, wird die Ergebnismenge in der Reihenfolge der erfassten Summen sortiert. Mit dem Flag sort-value erfolgt die Sortierung der Ergebnisse in der Reihenfolge ihrer Werte. |
order-ascending , order-descending | Mit diesen Flags wird die Sortierreihenfolge der Ergebnismenge gesteuert. Wenn zum Beispiel nach der Summe in absteigender Reihenfolge sortiert werden soll, dann werden die Werte mit der größten Summe zuerst zurückgegeben. |
Beispiele für den Aufruf values
Der Aufruf values
wird von der Ansicht „Navigation“ in NetWitness Suite sehr häufig verwendet. Die Standardansicht erzeugt Aufrufe, die wie folgt aussehen:
/sdk/values id1=198564099173 id2=1542925695937 size=20 flags=sessions,sort-total,order-descending threshold=100000 fieldName=ip.src where="time=\"2014-May-20 13:12:00\"-\"2014-May-21 13:11:59\""
In diesem Beispiel fordert die Ansicht „Navigation“ eindeutige Werte für ip.src
an. Es werden eindeutige Werte von ip.src
im angegebenen Zeitbereich angefordert. Die Anforderung bezieht sich auf die Anzahl von Sitzungen, die mit jedem ip.src
übereinstimmen. Ausgegeben werden die ersten 20 ip.src
-Werte bei einer Sortierung nach der Gesamtanzahl der Sitzungen in absteigender Reihenfolge. Außerdem verfügt die Ansicht „Navigation“ über einen Meta-ID-Bereich, um der Suchmaschine einen Optimierungshinweis zu liefern.
msearch
-Aufruf
Der Index bietet die Low-Level-Funktion msearch
für die Durchführung von Textsuchvorgängen für alle Metadatentypen. Für diese Art von Suche müssen Benutzer in ihren Abfragen keine bekannten Metadatentypen definieren. Stattdessen werden alle Teile der Datenbank auf Übereinstimmungen durchsucht. msearch
wird von der Textsuche der Ereignisansicht verwendet. Details zu den akzeptierten Suchformularen und Beispiele finden Sie im Thema „Filter und Suchergebnisse in der Ereignisansicht“ im Leitfaden zu Investigation und Malware Analysis .
msearch
-Parameter:
msearch-params = search-param, {space, where-param}, {space, limit-param}, {space, flags-param}; search-param = "search=", ? free-form search string ? ;where-param = "where=", ? optional where clause ? ; limit-param = "limit=", ? optional session scan limit ? ;flags = "flags=", {msearch-flag, {"," msearch-flag} }; msearch-flag = "sp" | "sm" | "si" | "ci" | "regex" ;
Der msearch
-Algorithmus funktioniert folgendermaßen:
- Ein Satz von Sitzungen wird im Index ermittelt, indem die Schnittmenge der folgenden drei Sätze gesucht wird:
- (Satz 1) Alle Sitzungen in der Datenbank
- (Satz 2) Sitzungen, die dem Parameter der
where
-Klausel entsprechen - (Satz 3) Wenn das Flag
si
angegeben ist: Sitzungen, die Werte indiziert haben, die dem Suchzeichenfolgen-Parameter entsprechen. - Wenn bei der Suche der Parameter
sm
angegeben ist, werden alle Metadaten aus dem im Schritt 1 ermittelten Sitzungssatz gelesen und auf Übereinstimmung mit dem Suchzeichenfolgen-Parameter geprüft. Die Metadatenelemente werden aus dem Service gelesen, der dem Punkt am nächsten liegt, von dem aus die Suche ausgeführt wurde. Wenn die Suche beispielsweise in einem Broker ausgeführt wurde, können die Metadatenelemente aus dem dem Broker nächstgelegenen Concentrator gelesen werden, wenn aber die Suche in einem Archiver ausgeführt wurde, werden die Metadatenelemente aus dem Archiver selbst gelesen. - Wenn bei der Suche der Parameter
sp
angegeben ist, werden alle Rohpaketdaten oder Rohdatenprotokolleinträge aus dem im Schritt 1 ermittelten Sitzungssatz gelesen und auf Übereinstimmung mit dem Suchzeichenfolgen-Parameter geprüft. Die Pakete werden aus dem Service gelesen, der dem Punkt am nächsten liegt, von dem aus die Suche ausgeführt wurde. Wenn die Suche beispielsweise in einem Concentrator ausgeführt wurde, werden die Paketdaten aus dem Decoder gelesen, wenn aber die Suche in einem Archiver ausgeführt wurde, werden die Paketdaten aus dem Archiver selbst gelesen. - Übereinstimmungen aus Schritt 2 und 3 werden zurückgegeben, sobald sie gefunden werden, bis zum Erreichen des Parameters
limit
. Der limit-Parameter gibt die maximale Anzahl der Sitzungen an, in denen nach Meta- und Paketdatenbanken gesucht wird. Wenn „limit“ nicht angegeben ist, wird der gesamte Satz an Sitzungen durchsucht, der in Schritt 1 bestimmt wurde.
msearch
-Flags
Flag | Beschreibung |
---|---|
sp | Durchsucht Rohpaketdaten |
sm | Durchsucht alle Metadaten |
si | Führt vor dem Durchsuchen von Metadaten Indexabfragen für alle Suchparameter aus |
ci | Führt eine Suche ohne Beachtung der Groß- und Kleinschreibung durch. Bei den zurückgegebenen Ergebnisse wird die Groß- und Kleinschreibung beachtet. |
regex | Behandelt den Parameter „search“ als regulären Ausdruck. Nur ein regulärer Ausdruck kann angegeben werden, er kann aber beliebig komplex sein. |
msearch
-Indexsuchmodus
Im Indexsuchmodus, angegeben durch das Flag si
, werden Ergebnisse deutlich schneller zurückgegeben als in jedem anderen Modus. Die wichtigste Einschränkung dieses Modus ist, dass nur Übereinstimmungen mit Textbegriffen zurückgegeben werden, die werteindizierten Metawerten entsprechen.
- Der Parameter
si
muss mit dem Flagsm
kombiniert werden. Mit dem Parametersi
wird angegeben, dass die Suche nur in indizierten Metadaten erfolgt. - Der Parameter
si
kann bei Suchläufen mit regulären Ausdrücken verwendet werden, es werden jedoch nur textindizierte Werte abgeglichen. IP-Adressen und Zahlen werden mit den regulären Ausdrücken nicht geprüft.
msearch
Tipps
- Verwenden Sie immer die
where
-Klausel, um einen Zeitbereich für die Suche anzugeben. - Um nach IP-Adressbereichen zu suchen, geben Sie diese in die
where
-Klausel ein. - Verwenden Sie den Parameter
limit
, wenn Sie nicht den Indexsuchmodus verwenden. Ohne diesen wird sonst eine sehr große Menge an Daten in der Meta- und Paketdatenbank gelesen.
Gespeicherte Verfahren
Die Aufrufe query
und values
halten weitere Suchfunktionen auf niedriger Ebene bereit. Für umfassendere Anwendungsbeispiele sind serverseitig gespeicherte Verfahren vorhanden.
Verwendung von Anführungsstrichen in der Abfragesyntax
Der Abfrageparser unterscheidet nicht zwischen einfachen oder doppelten Anführungsstrichen in einer Abfrageanweisung. Ein Wert in einfachen oder doppelten Anführungszeichen wird als Textmetawert behandelt.
Der Abfrageparser versucht, die Bedeutung dessen zu verstehen, was Sie in die Anweisung schreiben. Er ist nicht sehr streng in dieser Hinsicht.
Beispiel:
reference.id=4752
Diese Klausel identifiziert Sitzungen, die den Metawert reference.id
und einen numericWert von 4752 aufweisen.
reference.id='4752'
oder reference.id="4752"
Diese Klausel identifiziert Sitzungen, die den Metawert reference.id
und einen stringWert von 4752
aufweisen.
Allerdings vergleicht die Abfrage-Engine implizit Zahlen und Zeichenfolgen, die wie Zahlen aussehen, und behandelt sie gleich, wenn die Werte semantisch gleich sind. Es funktioniert also mit jeder dieser Schreibweisen.
Für eine möglichst effiziente Performance wäre es allerdings eine gute Idee, die Abfragen so zu konstruieren, dass die Abfragesyntax den vom Parser erzeugten Datentypen entspricht.
Wenn also zum Beispiel der Parser reference.id
als einen numerischen Datentyp erstellt, (wie uint32
oder uint64
), verwenden Sie die numerische Syntax.
Wenn der Parser reference.id
als einen Textdatentyp erstellt, sollten Sie die Zeichenfolgensyntax verwenden.