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 true
sur , 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 false
sur 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 |
Contenu connexe
- Vue d’ensemble des fonctions IPv4/IPv6
- Vue d’ensemble des fonctions de correspondance de texte IPv4
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de l’année 2024, nous abandonnerons progressivement le mécanisme de retour d’information GitHub Issues pour le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultez :Soumettre et afficher des commentaires pour