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
Kehrt zurück-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