ipv4_lookup plugin

Il ipv4_lookup plug-in cerca un valore IPv4 in una tabella di ricerca e restituisce righe con valori corrispondenti. Il plug-in viene richiamato con l'operatore evaluate .

Sintassi

T|evaluateipv4_lookup(Ricerca tabella,SourceIPv4Key,IPv4LookupKey [,ExtraKey1 [.. ,ExtraKeyN [,return_unmatched ]]] )

Parametri

Nome Tipo Obbligatoria Descrizione
T string ✔️ Input tabulare la cui colonna SourceIPv4Key viene usata per la corrispondenza IPv4.
Ricerca tabella string ✔️ Espressione tabella o tabulare con dati di ricerca IPv4, la cui colonna LookupKey viene usata per la corrispondenza IPv4. I valori IPv4 possono essere mascherati usando la notazione del prefisso IP.
SourceIPv4Key string ✔️ Colonna di T con stringa IPv4 da cercare in LookupTable. I valori IPv4 possono essere mascherati usando la notazione del prefisso IP.
IPv4LookupKey string ✔️ Colonna di LookupTable con stringa IPv4 corrispondente a ogni valore SourceIPv4Key .
ExtraKey1 . ExtraKeyN string Riferimenti di colonna aggiuntivi usati per le corrispondenze di ricerca. Simile all'operazione join : i record con valori uguali sono considerati corrispondenti. I riferimenti al nome di colonna devono esistere sia nella tabella T di origine che LookupTablein .
return_unmatched bool Flag booleano che definisce se il risultato deve includere tutte o solo le righe corrispondenti (impostazione predefinita: - false solo le righe corrispondenti restituite).

Notazione del prefisso IP

La notazione del prefisso IP (nota anche come notazione CIDR) è un modo conciso di rappresentare un indirizzo IP e la relativa maschera di rete associata. Il formato è , dove la lunghezza del prefisso è <base IP>/<prefix length>il numero di bit iniziali 1 nella maschera di rete. La lunghezza del prefisso determina l'intervallo di indirizzi IP che appartengono alla rete.

Per IPv4, la lunghezza del prefisso è un numero compreso tra 0 e 32. Quindi la notazione 192.168.2.0/24 rappresenta l'indirizzo IP 192.168.2.0 con una maschera di rete 255.255.255.255.0. Questa maschera di rete ha 24 bit iniziali o una lunghezza di prefisso pari a 24.

Per IPv6, la lunghezza del prefisso è un numero compreso tra 0 e 128. La notazione fe80::85d:e82c:9446:7994/120 rappresenta l'indirizzo IP fe80::85d:e82c:9446:7994 con una maschera net di ffff:ff00. Questa maschera di rete ha 120 bit iniziali o una lunghezza di prefisso pari a 120.

Restituisce

Il ipv4_lookup plug-in restituisce un risultato di join (ricerca) basato sulla chiave IPv4. Lo schema della tabella è l'unione della tabella di origine e della tabella di ricerca, simile al risultato dell'operatorelookup.

Se l'argomento return_unmatched è impostato su true, la tabella risultante include righe corrispondenti e non corrispondenti (riempite con valori Null).

Se l'argomento return_unmatched è impostato su falseo omesso (il valore predefinito di false viene usato), la tabella risultante ha il numero di record corrispondenti. Questa variante di ricerca ha prestazioni migliori rispetto all'esecuzione return_unmatched=true .

Nota

  • Questo plug-in illustra lo scenario di join basato su IPv4, presupponendo una dimensione di tabella di ricerca ridotta (100K-200K righe), con la tabella di input facoltativamente con dimensioni maggiori.
  • Le prestazioni del plug-in dipendono dalle dimensioni delle tabelle di ricerca e origine dati, dal numero di colonne e dal numero di record corrispondenti.

Esempio

Ricerca IPv4 - solo righe corrispondenti

// IP lookup table: IP_Data
// Partial data from: https://raw.githubusercontent.com/datasets/geoip2-ipv4/master/data/geoip2-ipv4.csv
let IP_Data = datatable(network:string, continent_code:string ,continent_name:string, country_iso_code:string, country_name:string)
[
  "111.68.128.0/17","AS","Asia","JP","Japan",
  "5.8.0.0/19","EU","Europe","RU","Russia",
  "223.255.254.0/24","AS","Asia","SG","Singapore",
  "46.36.200.51/32","OC","Oceania","CK","Cook Islands",
  "2.20.183.0/24","EU","Europe","GB","United Kingdom",
];
let IPs = datatable(ip:string)
[
  '2.20.183.12',   // United Kingdom
  '5.8.1.2',       // Russia
  '192.165.12.17', // Unknown
];
IPs
| evaluate ipv4_lookup(IP_Data, ip, network)

Output

Ip network continent_code continent_name country_iso_code country_name
2.20.183.12 2.20.183.0/24 EU Europa GB Regno Unito
5.8.1.2 5.8.0.0/19 EU Europa RU Russia

Ricerca IPv4: restituisce sia righe corrispondenti che non corrispondenti

// IP lookup table: IP_Data
// Partial data from: 
// https://raw.githubusercontent.com/datasets/geoip2-ipv4/master/data/geoip2-ipv4.csv
let IP_Data = datatable(network:string,continent_code:string ,continent_name:string ,country_iso_code:string ,country_name:string )
[
    "111.68.128.0/17","AS","Asia","JP","Japan",
    "5.8.0.0/19","EU","Europe","RU","Russia",
    "223.255.254.0/24","AS","Asia","SG","Singapore",
    "46.36.200.51/32","OC","Oceania","CK","Cook Islands",
    "2.20.183.0/24","EU","Europe","GB","United Kingdom",
];
let IPs = datatable(ip:string)
[
    '2.20.183.12',   // United Kingdom
    '5.8.1.2',       // Russia
    '192.165.12.17', // Unknown
];
IPs
| evaluate ipv4_lookup(IP_Data, ip, network, return_unmatched = true)

Output

Ip network continent_code continent_name country_iso_code country_name
2.20.183.12 2.20.183.0/24 EU Europa GB Regno Unito
5.8.1.2 5.8.0.0/19 EU Europa RU Russia
192.165.12.17

Ricerca IPv4 : uso dell'origine in external_data()

let IP_Data = external_data(network:string,geoname_id:long,continent_code:string,continent_name:string ,country_iso_code:string,country_name:string,is_anonymous_proxy:bool,is_satellite_provider:bool)
    ['https://raw.githubusercontent.com/datasets/geoip2-ipv4/master/data/geoip2-ipv4.csv'];
let IPs = datatable(ip:string)
[
    '2.20.183.12',   // United Kingdom
    '5.8.1.2',       // Russia
    '192.165.12.17', // Sweden
];
IPs
| evaluate ipv4_lookup(IP_Data, ip, network, return_unmatched = true)

Output

Ip network geoname_id continent_code continent_name country_iso_code country_name is_anonymous_proxy is_satellite_provider
2.20.183.12 2.20.183.0/24 2635167 EU Europa GB Regno Unito 0 0
5.8.1.2 5.8.0.0/19 2017370 EU Europa RU Russia 0 0
192.165.12.17 192.165.8.0/21 2661886 EU Europa SE Svezia 0 0

Ricerca IPv4 : uso di colonne aggiuntive per la corrispondenza

let IP_Data = external_data(network:string,geoname_id:long,continent_code:string,continent_name:string ,country_iso_code:string,country_name:string,is_anonymous_proxy:bool,is_satellite_provider:bool)
    ['https://raw.githubusercontent.com/datasets/geoip2-ipv4/master/data/geoip2-ipv4.csv'];
let IPs = datatable(ip:string, continent_name:string, country_iso_code:string)
[
    '2.20.183.12',   'Europe', 'GB', // United Kingdom
    '5.8.1.2',       'Europe', 'RU', // Russia
    '192.165.12.17', 'Europe', '',   // Sweden is 'SE' - so it won't be matched
];
IPs
| evaluate ipv4_lookup(IP_Data, ip, network, continent_name, country_iso_code)

Output

Ip continent_name country_iso_code network geoname_id continent_code country_name is_anonymous_proxy is_satellite_provider
2.20.183.12 Europa GB 2.20.183.0/24 2635167 EU Regno Unito 0 0
5.8.1.2 Europa RU 5.8.0.0/19 2017370 EU Russia 0 0