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 plugin é invocado com o evaluate operador.

Sintaxe

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

Parâmetros

Nome Digitar Obrigatória Descrição
T string ✔️ A entrada tabular cuja coluna SourceIPv4Key é usada para correspondência IPv4.
Tabela de pesquisa string ✔️ Tabela ou expressão tabular com dados de pesquisa IPv4, cuja coluna LookupKey é usada para correspondência IPv4. Os valores IPv4 podem ser mascarados usando a notação de prefixo IP.
FonteIPv4Key string ✔️ A coluna de T com cadeia de caracteres IPv4 a ser pesquisada em LookupTable. Os valores IPv4 podem ser mascarados usando a notação de prefixo IP.
IPv4LookupKey string ✔️ A coluna de LookupTable com cadeia de caracteres IPv4 que é correspondida em relação a cada valor SourceIPv4Key.
ExtraKey1 .. ExtraKeyN string Referências de coluna adicionais que são 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 na tabela T de origem quanto LookupTableno .
return_unmatched bool Um sinalizador booleano que define se o resultado deve incluir todas ou somente linhas correspondentes (padrão: false - somente linhas correspondentes retornadas).

Notação de prefixo IP

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>, onde 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. Assim, 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. Esta máscara de rede tem 24 bits de 1 bits à esquerda, ou um comprimento de prefixo de 24.

Para IPv6, o comprimento do prefixo é um número entre 0 e 128. Assim, a notação fe80::85d:e82c:9446:7994/120 representa o endereço IP fe80::85d:e82c:9446:7994 com uma máscara de rede de ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00. Essa máscara de rede tem 120 bits à esquerda de 1 bits, ou um comprimento de prefixo de 120.

Devoluções

O ipv4_lookup plugin 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 for definido como true, a tabela resultante incluirá linhas correspondentes e não correspondentes (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 os resultados correspondentes. Essa variante de pesquisa tem melhor desempenho em comparação com a return_unmatched=true execução.

Observação

  • Este plugin cobre o cenário de junção baseada em IPv4, assumindo um tamanho de tabela de pesquisa pequeno (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 Reino Unido
5.8.1.2 5.8.0.0/19 UE Europa RU Rússia

Pesquisa IPv4 - retorna 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 Reino Unido
5.8.1.2 5.8.0.0/19 UE Europa RU Rússia
192.165.12.17

Pesquisa IPv4 - usando o código-fonte 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