Bitweise Operatoren in AQL-Abfragen
Erweitern Sie die Filterfunktion und Leistung Ihrer AQL-Abfragen, die IP-Adressen enthalten, mithilfe von bitweisen Operatoren. Geben Sie Filter auf der Ebene des Oktetts der IP-Adresse an, um bestimmte Ergebnisse zurückzugeben.
Durch Filtern nach Oktetten in einer IP-Adresse können Sie die Suchkriterien für IP-Adressen eingrenzen.
Um beispielsweise nach bestimmten Gerätetypen zu suchen, deren letztes Oktett in einer Quellen-IP-Adresse auf 100 endet (z. B. x.y.z.100), können Sie die folgende Abfrage verwenden:
SELECT LONG(sourceip)AS long_ip,
sourceip
FROM events into <cursor_name>
WHERE (long_ip & 0x000000ff)=0x00000064
GROUP BY long_ip
ORDER BY long_ip
Im Beispiel wird <sourceip> als ganze Zahl zurückgegeben. Die Ganzzahl wird vom bitweisen Operator AND verwendet. Der Hexadezimalwert <ff> in der Position des letzten Oktetts für die Quellen-IP-Adresse gibt einen Filter in der entsprechenden Oktettposition der IP-Adresse von 0x000000 <Hexadezimalwert des Oktetts der IP-Adresse> an. In diesem Fall wird der Hexadezimalwert <64> durch den Dezimalwert 100 in der IP-Adresse ersetzt.
Das Ergebnis sind alle Quellen-IP-Adressen, die auf 100 enden. Die Ergebnisse können eine Liste für einen bestimmten Einheitentyp für ein Unternehmen sein, wenn das letzte Oktett aller IP-Adressen 100 ist.
In den folgenden Beispielen werden Szenarios beschrieben, die bei der Suche mit bitweisen Operatoren verwendet werden können.
Bitweises UND (&) Beispiele
Gibt alle IP-Adressen zurück, die mit 10.xxx.xxx.xxx übereinstimmen.
SELECT LONG(sourceip)AS long_ip,
sourceip
FROM events into t1
WHERE (long_ip & 0xff000000)=0x0a000000
GROUP BY long_ip
LIMIT 50
Gibt alle IP-Adressen zurück, die mit xxx.100.xxx.xxx übereinstimmen.
SELECT LONG(sourceip)AS long_ip,
sourceip
FROM events into t2
WHERE (long_ip & 0x00ff0000)=0x0064000
GROUP BY long_ip
ORDER BY long_ip
Gibt alle IP-Adressen zurück, die mit xxx.xxx.220.xxx übereinstimmen.
SELECT LONG(sourceip)AS long_ip,
sourceip
FROM events into t3
WHERE (long_ip & 0x0000ff00)=0x000dc00
GROUP BY long_ip
ORDER BY long_ip
Gibt alle IP-Adressen zurück, die mit xxx.xxx.xxx.1 übereinstimmen.
SELECT LONG(sourceip)AS long_ip,
sourceip
FROM events
WHERE (long_ip & 0x000000ff)=0x0000001
GROUP BY long_ip
ORDER BY long_ip
Beispiele für bitweises NOT (~)
Verwenden Sie die folgenden Beispiele, um jeden 1-Bit-Wert in einen 0-Bit-Wert oder jeden 0-Bit-Wert in einen 1-Bit-Wert in einem bestimmten Binärmuster zu konvertieren.
SELECT ~123456789
FROM events
LIMIT 1
Gibt 123456790 zurück
SELECT ~0
FROM events
LIMIT 1
Kehrt zurück-1
SELECT ~2147483647
FROM events
LIMIT 1
Rückgabe-2147483648
Beispiele für bitweises ODER
In den folgenden Beispielen werden zwei Bits verglichen. Wenn beide Bits den Wert "1" haben, gibt die Abfrage den Wert 1 zurück. Wenn beide Bits den Wert "0" haben, gibt die Abfrage eine 0 zurück.
SELECT destinationip,
LONG(destinationip),
sourceip,
LONG(sourceip)AS source_ip,
LONG(destinationip)|source_ip
FROM events
WHERE destinationip='127.0.0.1'
LIMIT 1
SELECT destinationip,
LONG(destinationip),
sourceip,
~LONG(sourceip)AS not_source_ip,
LONG(destinationip)|not_source_ip
FROM events
WHERE destinationip='127.0.0.1'
LIMIT 1
SELECT-2147483648|2147483647
FROM events
LIMIT 1
Kehrt zurück-1
Beispiele für bitweises XOR
Die folgenden Beispiele können verwendet werden, um 2-Bit-Muster oder ein Bitpaar von jeder Position zu verwenden und sie entweder in eine 1 oder eine 0 zu konvertieren. Wenn die Bits unterschiedlich sind, ist das Ergebnis in dieser Position 1. Wenn die Bits identisch sind, ist das Ergebnis in dieser Position 0.
SELECT 2147483647#2147483647
FROM events
LIMIT 1
Gibt 0 zurück.
SELECT 12345#6789
AS A,
(~12345 & 6789)|(12345 & ~6789)
AS B
FROM events
LIMIT 1
Gibt 10940, 10940 zurück.
Beispiele für ShiftLeft
Die Anzahl der zu verschiebenden Stellen wird als zweites Argument für den Schichtoperator angegeben.
SELECT -1<<1
AS A
FROMS events
LIMIT 1
Kehrt zurück-2
SELECT 16<<1
AS A
FROMS events
LIMIT 1
Gibt 128 zurück.
Beispiele für ShiftRight
Der Operator > > verwendet das Vorzeichenbit (das ganz links stehende Bit), um die abschließenden Positionen nach der Verschiebung zu füllen. Wenn die Zahl negativ ist, wird 1 als Filter verwendet und wenn die Zahl positiv ist, wird 0 als Filter verwendet.
SELECT 16>>3
AS A
FROMS events
LIMIT 1
Gibt 2 zurück
SELECT -32768>>15
AS A
FROMS events
LIMIT 1
ShiftRightUnsigned Beispiel
Füllt immer 0 aus, unabhängig vom Vorzeichen der Zahl.
SELECT -1>>>33
FROM events
LIMIT 1
Gibt 2147483647 zurück.
Dividiert durch die Potenz von 2
SELECT (20+44)>>>1 A,
(20+44)>>>2 B,
(20+44)>>>3 C,
(20+44)>>>4 D,
(20+44)>>>5 E
FROM events
LIMIT 1