Compartilhar via


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|evaluateipv4_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 truecomo , a tabela resultante incluirá linhas correspondentes e não correspondidas (preenchidas com nulos).

Se o argumento return_unmatched for definido como falseou 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