Partage via


Plug-in ipv4_lookup

Le plug-in ipv4_lookup recherche une valeur IPv4 dans une table de recherche et retourne des lignes avec des valeurs correspondantes. Le plug-in est appelé avec l’opérateur evaluate .

Syntaxe

T | ipv4_lookup( evaluate LookupTable , SourceIPv4Key , IPv4LookupKey [, ExtraKey1 [.. ,ExtraKeyN [, return_unmatched ]]])

Paramètres

Nom Type Requise Description
T string ✔️ Entrée tabulaire dont la colonne SourceIPv4Key est utilisée pour la correspondance IPv4.
LookupTable string ✔️ Expression table ou tabulaire avec des données de recherche IPv4, dont la colonne LookupKey est utilisée pour la correspondance IPv4. Les valeurs IPv4 peuvent être masquées à l’aide de la notation de préfixe IP.
SourceIPv4Key string ✔️ Colonne de T avec chaîne IPv4 à rechercher dans LookupTable. Les valeurs IPv4 peuvent être masquées à l’aide de la notation de préfixe IP.
IPv4LookupKey string ✔️ Colonne de LookupTable avec chaîne IPv4 mise en correspondance avec chaque valeur SourceIPv4Key.
ExtraKey1 .. ExtraKeyN string Références de colonne supplémentaires utilisées pour les correspondances de recherche. Similaire à l’opération join : les enregistrements avec des valeurs égales sont considérés comme correspondants. Les références de nom de colonne doivent exister à la fois est la table T source et LookupTable.
return_unmatched bool Indicateur booléen qui définit si le résultat doit inclure toutes ou uniquement les lignes correspondantes (valeur par défaut : false uniquement les lignes correspondantes retournées).

Notation de préfixe IP

La notation de préfixe IP (également appelée notation CIDR) est un moyen concis de représenter une adresse IP et son masque réseau associé. Le format est <base IP>/<prefix length>, où la longueur du préfixe est le nombre de 1 bits de début dans le masque net. La longueur du préfixe détermine la plage d’adresses IP qui appartiennent au réseau.

Pour IPv4, la longueur du préfixe est un nombre compris entre 0 et 32. Ainsi, la notation 192.168.2.0/24 représente l’adresse IP 192.168.2.0 avec un masque netmask de 255.255.255.255.0. Ce masque net a 24 bits de début 1 ou une longueur de préfixe de 24.

Pour IPv6, la longueur du préfixe est un nombre compris entre 0 et 128. Ainsi, la notation fe80 ::85d :e82c :9446:7994/120 représente l’adresse IP fe80 ::85d :e82c :9446:7994 avec un masque net de ffff :ffff :ffff :ffff :ffff :ff00. Ce masque net a 120 bits de début 1 ou une longueur de préfixe de 120.

Retours

Le ipv4_lookup plug-in retourne un résultat de jointure (recherche) basée sur la clé IPv4. Le schéma de la table est l’union de la table source et de la table de recherche, semblable au résultat de l’opérateurlookup.

Si l’argument return_unmatched est défini truesur , la table résultante inclut à la fois les lignes mises en correspondance et sans correspondance (remplies de valeurs Null).

Si l’argument return_unmatched est défini falsesur ou omis (la valeur par défaut est false utilisée), la table résultante a autant d’enregistrements que les résultats correspondants. Cette variante de recherche offre de meilleures performances par rapport à return_unmatched=true l’exécution.

Remarque

  • Ce plug-in couvre le scénario de jointure basée sur IPv4, en supposant une petite taille de table de recherche (100 000 000 lignes), avec la table d’entrée ayant éventuellement une plus grande taille.
  • Les performances du plug-in dépendent des tailles des tables de recherche et de source de données, du nombre de colonnes et du nombre d’enregistrements correspondants.

Exemples

Recherche IPv4 : lignes correspondantes uniquement

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

Sortie

ip réseau continent_code continent_name country_iso_code country_name
2.20.183.12 2.20.183.0/24 UE Europe Go Royaume-Uni
5.8.1.2 5.8.0.0/19 UE Europe RU Russie

Recherche IPv4 : renvoyer les lignes correspondantes et sans correspondance

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

Sortie

ip réseau continent_code continent_name country_iso_code country_name
2.20.183.12 2.20.183.0/24 UE Europe Go Royaume-Uni
5.8.1.2 5.8.0.0/19 UE Europe RU Russie
192.165.12.17

Recherche IPv4 : utilisation de la source dans 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)

Sortie

ip réseau 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 UE Europe Go Royaume-Uni 0 0
5.8.1.2 5.8.0.0/19 2017370 UE Europe RU Russie 0 0
192.165.12.17 192.165.8.0/21 2661886 UE Europe SE Suède 0 0

Recherche IPv4 : utilisation de colonnes supplémentaires pour la correspondance

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)

Sortie

ip continent_name country_iso_code réseau geoname_id continent_code country_name is_anonymous_proxy is_satellite_provider
2.20.183.12 Europe Go 2.20.183.0/24 2635167 UE Royaume-Uni 0 0
5.8.1.2 Europe RU 5.8.0.0/19 2017370 UE Russie 0 0