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
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