AQL sorgularında bit işleçleri

Bit akıllı işleçleri kullanarak IP adreslerini içeren AQL sorgularınızın süzgeç uygulama yeteneğini ve başarımını artırın. Belirli sonuçları döndürmek için IP adresi sekizli düzeyinde süzgeçleri belirtin.

Bir IP adresindeki sekmeler üzerinde süzgeç uygulayarak, IP adresi arama ölçütlerini daraltabilirsiniz.

Örneğin, kaynak IP adresindeki son sekizlisinin 100 'de sona erdiği belirli aygıt tiplerini aramak için, örneğin x.y.z.100gibi, aşağıdaki sorguyu kullanabilirsiniz:

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

Örnekte, <kaynakçası> bir tamsayı olarak döndürülür. Tamsayı, bit akıllı AND işleci tarafından kullanılır. Kaynak IP adresi için son sekizli konumunda bulunan <ff> onaltılı değeri, 0x000000 <IP adresi sekizli onaltılı değer> IP adresi sekizlisinin karşılık gelen IP adresi konumunda bir süzgeç belirtiyor. Bu durumda, onaltılı değer olan <64>, IP adresinde 100 ondalık değeri için yerine konur.

Sonuç, 100 'de sona erdiren tüm kaynak IP adresidir. Sonuçlar, bir şirket için belirli bir aygıt tipi için bir liste olabilir. Bu liste, IP adreslerinin tümünün son sekizlisinin 100 'dür.

Aşağıdaki örnekler, bit akıllı işleçleriyle arama yaparken kullanılacak anahat senaryolarını içerir.

Bit/AND (&) örnekler

10.xxx.xxx.xxxile eşleşen tüm IP adreslerini döndürür.

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

xxx.100.xxx.xxxile eşleşen tüm IP adreslerini döndürür.

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

xxx.xxx.220.xxxile eşleşen tüm IP adreslerini döndürür.

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

xxx.xxx.xxx.1ile eşleşen tüm IP adreslerini döndürür.

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

Bitwise NOT (~) örnekleri

Her 1 bitlik değeri 0 bit değerine ya da her bir 0 bitlik değeri, belirli bir ikili örüntüde 1 bit değerine dönüştürmek için aşağıdaki örnekleri kullanın.

SELECT ~123456789
FROM events
LIMIT 1

123456790 değerini döndürür.

SELECT ~0 
FROM events
LIMIT 1

Dönüş -1

SELECT ~2147483647
FROM events
LIMIT 1

İadeler-2147483648

Bit bilge OR örnekleri

Aşağıdaki örneklerde iki bit karşılaştırması gerekir. Her iki bit de "1" değerine sahip olursa, sorgu 1 değerini döndürür. Her iki bit de "0" değerine sahip olursa, sorgu 0 değerini döndürür.

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

Dönüş -1

Bitwise XOR örnekleri

Aşağıdaki örnekler 2 bitlik kalıpları ya da her bir konumdan bir bit çifti almak için kullanılabilir ve bunları 1 ya da 0 değerine dönüştürebilir. Bitler farklıysa, bu konumdaki sonuç 1 'dir. Bitler aynıysa, bu konumdaki sonuç 0 olur.

SELECT 2147483647#2147483647
FROM events
LIMIT 1

Döndürür: 0

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

İade 10940, 10940

ShiftLeft , örnekler

Kaydırılacak yer sayısı, vardiya operatörünün ikinci argümanı olarak verilir.

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

-2 değerini döndürür

SELECT 16<<1 
AS A 
FROMS events 
LIMIT 1

128 değerini döndürür

ShiftRight örnekleri

>> işleci, vardiyadan sonraki sondaki konumları doldurmak için en soldaki bit olan işaret bitini kullanır. Sayı negatifse, 1 süzgeç olarak 1 kullanılır ve sayı pozitifse, süzgeç olarak 0 kullanılır.

SELECT 16>>3
AS A 
FROMS events 
LIMIT 1

2 değerini döndürür

SELECT -32768>>15 
AS A 
FROMS events 
LIMIT 1
Dönüş -1

ShiftRightİmzasız örnek

Sayının işaretine bakılmaksızın her zaman 0 'ı doldurur.

SELECT -1>>>33
FROM events
LIMIT 1

İade 2147483647

2 numaralı güç ile bölünmesi.

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