Dela via


ipv4_lookup plugin

Plugin-programmet ipv4_lookup letar upp ett IPv4-värde i en uppslagstabell och returnerar rader med matchade värden. Plugin-programmet anropas med operatorn evaluate .

Syntax

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

Parametrar

Namn Typ Obligatorisk Beskrivning
T string ✔️ Tabellindata vars kolumn SourceIPv4Key används för IPv4-matchning.
LookupTable string ✔️ Tabell- eller tabelluttryck med IPv4-uppslagsdata, vars kolumn LookupKey används för matchning av IPv4. IPv4-värden kan maskeras med IP-prefixnotation.
SourceIPv4Key string ✔️ Kolumnen I T med IPv4-strängen som ska slås upp i LookupTable. IPv4-värden kan maskeras med IP-prefixnotation.
IPv4LookupKey string ✔️ Kolumnen i LookupTable med IPv4-strängen som matchas mot varje SourceIPv4Key-värde .
ExtraKey1 .. ExtraKeyN string Ytterligare kolumnreferenser som används för uppslagsmatchningar. join Liknar åtgärden: poster med samma värden betraktas som matchande. Kolumnnamnsreferenser måste finnas både är källtabellen T och LookupTable.
return_unmatched bool En boolesk flagga som definierar om resultatet ska innehålla alla eller endast matchande rader (standard: false – endast matchande rader som returneras).

IP-prefixnotation

IP-prefixnotation (kallas även CIDR-notation) är ett koncist sätt att representera en IP-adress och dess associerade nätverksmask. Formatet är <base IP>/<prefix length>, där prefixets längd är antalet inledande 1 bitar i nätmasken. Prefixets längd avgör intervallet med IP-adresser som tillhör nätverket.

För IPv4 är prefixets längd ett tal mellan 0 och 32. Notationen 192.168.2.0/24 representerar alltså IP-adressen 192.168.2.0 med en nätmask på 255.255.255.0. Den här nätmasken har 24 inledande 1 bitar eller en prefixlängd på 24.

För IPv6 är prefixets längd ett tal mellan 0 och 128. Så notationen fe80::85d:e82c:9446:7994/120 representerar IP-adressen fe80::85d:e82c:9446:7994 med en netmask av ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffffff:ffffff:ffffff:ffff:ffffff:ffffff:ffffff:ffffff:ffff00. Den här nätmasken har 120 inledande 1 bitar eller en prefixlängd på 120.

Returer

Plugin-programmet ipv4_lookup returnerar ett resultat av koppling (uppslag) baserat på IPv4-nyckel. Schemat för tabellen är en union av källtabellen och uppslagstabellen, ungefär som resultatet av operatornlookup.

Om argumentet return_unmatched är inställt på trueinnehåller den resulterande tabellen både matchade och omatchade rader (fyllda med nullvärden).

Om argumentet return_unmatched anges till falseeller utelämnas (standardvärdet false för används) har den resulterande tabellen lika många poster som matchande resultat. Den här varianten av sökningen har bättre prestanda jämfört med return_unmatched=true körning.

Anteckning

  • Det här plugin-programmet beskriver scenariot med IPv4-baserad koppling, förutsatt att en liten uppslagstabellstorlek (100 000–200 000 rader) har en större storlek.
  • Prestanda för plugin-programmet beror på storleken på uppslags- och datakälltabellerna, antalet kolumner och antalet matchande poster.

Exempel

IPv4-sökning – endast matchande rader

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

Resultat

Ip network continent_code continent_name country_iso_code country_name
2.20.183.12 2.20.183.0/24 EU Europa GB Storbritannien
5.8.1.2 5.8.0.0/19 EU Europa RU Ryssland

IPv4-sökning – returnerar både matchande och icke matchande rader

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

Resultat

Ip network continent_code continent_name country_iso_code country_name
2.20.183.12 2.20.183.0/24 EU Europa GB Storbritannien
5.8.1.2 5.8.0.0/19 EU Europa RU Ryssland
192.165.12.17

IPv4-sökning – med källan i 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)

Resultat

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 EU Europa GB Storbritannien 0 0
5.8.1.2 5.8.0.0/19 2017370 EU Europa RU Ryssland 0 0
192.165.12.17 192.165.8.0/21 2661886 EU Europa SE Sverige 0 0

IPv4-sökning – använda extra kolumner för matchning

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)

Resultat

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 EU Storbritannien 0 0
5.8.1.2 Europa RU 5.8.0.0/19 2017370 EU Ryssland 0 0