Plug-in ipv4_lookup
O plug-in ipv4_lookup
pesquisa um valor de IPv4 em uma tabela de pesquisa e retorna linhas com valores correspondentes. O plug-in é invocado com o evaluate
operador .
Syntax
T|
evaluate
ipv4_lookup(
LookupTable,
SourceIPv4Key,
IPv4LookupKey [,
ExtraKey1 [.. ,
ExtraKeyN [,
return_unmatched ]]] )
Parâmetros
Nome | Tipo | Obrigatório | Descrição |
---|---|---|---|
T | string |
✔️ | A entrada tabular cuja coluna SourceIPv4Key é usada para correspondência IPv4. |
LookupTable | string |
✔️ | Expressão tabela ou tabular com dados de pesquisa IPv4, cuja coluna LookupKey é usada para correspondência IPv4. Os valores IPv4 podem ser mascarados usando notação de prefixo IP. |
SourceIPv4Key | string |
✔️ | A coluna de T com cadeia de caracteres IPv4 a ser pesquisada em LookupTable. Os valores IPv4 podem ser mascarados usando notação de prefixo IP. |
IPv4LookupKey | string |
✔️ | A coluna de LookupTable com cadeia de caracteres IPv4 que corresponde a cada valor SourceIPv4Key . |
ExtraKey1 .. ExtraKeyN | string |
Referências de coluna adicionais usadas para correspondências de pesquisa. Semelhante à join operação: registros com valores iguais são considerados correspondentes. As referências de nome de coluna devem existir tanto é tabela T de origem quanto LookupTable . |
|
return_unmatched | bool |
Um sinalizador booliano que define se o resultado deve incluir todas ou apenas linhas correspondentes (padrão: false - somente linhas correspondentes retornadas). |
Notação de prefixo IP
A notação de prefixo IP (também conhecida como notação CIDR) é uma maneira concisa de representar um endereço IP e sua máscara de rede associada. O formato é <base IP>/<prefix length>
, em que o comprimento do prefixo é o número de 1 bits à esquerda na máscara de rede. O comprimento do prefixo determina o intervalo de endereços IP que pertencem à rede.
Para IPv4, o comprimento do prefixo é um número entre 0 e 32. Portanto, a notação 192.168.2.0/24 representa o endereço IP 192.168.2.0 com uma máscara de rede de 255.255.255.0. Essa máscara de rede tem 24 bits à esquerda ou um comprimento de prefixo de 24.
Para IPv6, o comprimento do prefixo é um número entre 0 e 128. Portanto, a notação fe80::85d:e82c:9446:7994/120 representa o endereço IP fe80::85d:e82c:9446:7994 com um netmask de ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00. Essa máscara de rede tem 120 bits à esquerda ou um tamanho de prefixo de 120.
Retornos
O ipv4_lookup
plug-in retorna um resultado de junção (pesquisa) com base na chave IPv4. O esquema da tabela é a união da tabela de origem e da tabela de pesquisa, semelhante ao resultado do lookup
operador.
Se o argumento return_unmatched estiver definido true
como , a tabela resultante incluirá linhas correspondentes e não correspondidas (preenchidas com nulos).
Se o argumento return_unmatched for definido como false
ou omitido (o valor padrão de false
é usado), a tabela resultante terá tantos registros quanto resultados correspondentes. Essa variante de pesquisa tem melhor desempenho em comparação com a return_unmatched=true
execução.
Observação
- Esse plug-in aborda o cenário de junção baseada em IPv4, supondo um pequeno tamanho de tabela de pesquisa (linhas de 100K-200K), com a tabela de entrada opcionalmente tendo um tamanho maior.
- O desempenho do plug-in dependerá dos tamanhos das tabelas de pesquisa e fonte de dados, do número de colunas e do número de registros correspondentes.
Exemplos
Pesquisa IPv4 – somente linhas correspondentes
// 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)
Saída
ip | network | continent_code | continent_name | country_iso_code | country_name |
---|---|---|---|---|---|
2.20.183.12 | 2.20.183.0/24 | UE | Europa | GB | United Kingdom |
5.8.1.2 | 5.8.0.0/19 | UE | Europa | RU | Rússia |
Pesquisa IPv4 – retornar linhas correspondentes e não correspondentes
// 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)
Saída
ip | network | continent_code | continent_name | country_iso_code | country_name |
---|---|---|---|---|---|
2.20.183.12 | 2.20.183.0/24 | UE | Europa | GB | United Kingdom |
5.8.1.2 | 5.8.0.0/19 | UE | Europa | RU | Rússia |
192.165.12.17 |
Pesquisa IPv4 – usando a origem em 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)
Saída
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 | UE | Europa | GB | Reino Unido | 0 | 0 |
5.8.1.2 | 5.8.0.0/19 | 2017370 | UE | Europa | RU | Rússia | 0 | 0 |
192.165.12.17 | 192.165.8.0/21 | 2661886 | UE | Europa | SE | Suécia | 0 | 0 |
Pesquisa IPv4 – usando colunas extras para correspondência
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)
Saída
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 | UE | Reino Unido | 0 | 0 |
5.8.1.2 | Europa | RU | 5.8.0.0/19 | 2017370 | UE | Rússia | 0 | 0 |
Conteúdo relacionado
- Visão geral das funções IPv4/IPv6
- Visão geral das funções de correspondência de texto IPv4
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de