Opérateurs Bitwise dans les requêtes AQL

Améliorer la capacité de filtrage et les performances de vos requêtes AQL qui incluent des adresses IP en utilisant des opérateurs au niveau du bit. Spécifiez des filtres au niveau de l'octet d'adresse IP pour renvoyer des résultats spécifiques.

En filtrant les octets dans une adresse IP, vous pouvez affiner les critères de recherche d'adresse IP.

Par exemple, pour rechercher des types d'unité spécifiques dont le dernier octet d'une adresse IP source se termine par 100, par exemple x.y.z.100, vous pouvez utiliser la requête suivante:

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

Dans l'exemple, le <sourceip> est renvoyé sous la forme d'un entier. L'entier est utilisé par l'opérateur bitwise AND. La valeur hexadécimale <ff> dans la position du dernier octet de l'adresse IP source spécifie un filtre dans la position de l'octet de l'adresse IP correspondante de 0x000000 <valeur hexadécimale de l'octet de l'adresse IP>. Dans ce cas, la valeur hexadécimale <64> est remplacée par la valeur décimale 100 dans l'adresse IP.

Le résultat est toutes les adresses IP source qui se terminent par 100. Les résultats peuvent être une liste pour un type d'unité spécifique pour une société, si le dernier octet de toutes les adresses IP est 100.

Les exemples suivants présentent les scénarios à utiliser lorsque vous effectuez une recherche avec des opérateurs bitwise.

Exemples AND (&) au niveau du bit

Renvoie toutes les adresses IP correspondant à 10.xxx.xxx.xxx

SELECT LONG(sourceip)AS long_ip, 
sourceip
FROM events into t1
WHERE (long_ip & 0xff000000)=0x0a000000 
GROUP BY long_ip 
LIMIT 50

Renvoie toutes les adresses IP correspondant à xxx.100.xxx.xxx

SELECT LONG(sourceip)AS long_ip, 
sourceip
FROM events into t2
WHERE (long_ip & 0x00ff0000)=0x0064000
GROUP BY long_ip
ORDER BY long_ip 

Renvoie toutes les adresses IP correspondant à xxx.xxx.220.xxx

SELECT LONG(sourceip)AS long_ip, 
sourceip
FROM events into t3
WHERE (long_ip & 0x0000ff00)=0x000dc00
GROUP BY long_ip
ORDER BY long_ip 

Renvoie toutes les adresses IP correspondant à xxx.xxx.xxx.1

SELECT LONG(sourceip)AS long_ip, 
sourceip
FROM events
WHERE (long_ip & 0x000000ff)=0x0000001
GROUP BY long_ip
ORDER BY long_ip 

Exemples NOT (~) au niveau du bit

Utilisez les exemples suivants pour convertir chaque valeur 1 bit en valeur 0 bit, ou chaque valeur 0 bit à une valeur 1 bit, dans un modèle binaire donné.

SELECT ~123456789
FROM events
LIMIT 1

Renvoie 123456790

SELECT ~0 
FROM events
LIMIT 1

Renvoie -1

SELECT ~2147483647
FROM events
LIMIT 1

Renvoie - 2147483648

Exemples OR au niveau du bit

Utilisez les exemples suivants pour comparer deux bits. Si les deux bits ont une valeur « 1 », la requête renvoie un 1. Si les deux bits ont une valeur « 0 », la requête renvoie un 0.

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

Renvoie -1

Exemples XOR au niveau du bit

Les exemples suivants peuvent être utilisés pour prendre des modèles 2 bits, ou une paire de bits de chaque position, et les convertir en 1 ou 0. Si les bits sont différents, le résultat dans cette position est 1. Si les bits sont identiques, le résultat dans cette position est 0.

SELECT 2147483647#2147483647
FROM events
LIMIT 1

Renvoie 0

SELECT 12345#6789 
AS A,
(~12345 & 6789)|(12345 & ~6789)
AS B
FROM events
LIMIT 1  

Renvoie 10940, 10940

Exemples ShiftLeft

Le nombre d'emplacements à déplacer est donné comme second argument à l'opérateur de décalage.

SELECT -1<<1 
AS A 
FROMS events 
LIMIT 1

Renvoie -2

SELECT 16<<1 
AS A 
FROMS events 
LIMIT 1

Renvoie 128

Exemples ShiftRight

L'opérateur >> utilise le bit de signe, qui est le plus gauche, pour remplir les positions de fin après le décalage. Si le nombre est négatif, alors 1 est utilisé comme filtre et si le nombre est positif, alors 0 est utilisé comme filtre.

SELECT 16>>3
AS A 
FROMS events 
LIMIT 1

Renvoie 2

SELECT -32768>>15 
AS A 
FROMS events 
LIMIT 1
Renvoie -1

Exemple de ShiftRightUnsigned

Toujours remplir 0 quel que soit le signe du nombre.

SELECT -1>>>33
FROM events
LIMIT 1

Renvoie 2147483647

Dividing par la puissance de 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