Plug-In „ipv4_lookup“

Das Plug-In ipv4_lookup schlägt in einer Nachschlagetabelle einen IPv4-Wert nach und gibt Zeilen mit entsprechenden Werten zurück. Das Plug-In wird mit dem evaluate Operator aufgerufen.

Syntax

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

Parameter

Name Typ Erforderlich Beschreibung
T string ✔️ Die tabellarische Eingabe, deren Spalte SourceIPv4Key für den IPv4-Abgleich verwendet wird.
LookupTable string ✔️ Tabellen- oder Tabellarischer Ausdruck mit IPv4-Nachschlagedaten, deren Spalte LookupKey für den IPv4-Abgleich verwendet wird. IPv4-Werte können mithilfe der IP-Präfixnotation maskiert werden.
SourceIPv4Key string ✔️ Die Spalte von T mit IPv4-Zeichenfolge, die in LookupTable gesucht werden soll. IPv4-Werte können mithilfe der IP-Präfixnotation maskiert werden.
IPv4LookupKey string ✔️ Die Spalte von LookupTable mit IPv4-Zeichenfolge, die mit jedem SourceIPv4Key-Wert abgeglichen wird.
ExtraKey1 .. ExtraKeyN string Zusätzliche Spaltenverweise, die für Suchbesprechungen verwendet werden. Ähnlich wie beim join Vorgang: Datensätze mit gleichen Werten gelten als übereinstimmend. Spaltennamenverweise müssen sowohl für die Quelltabelle T als LookupTableauch für vorhanden sein.
return_unmatched bool Ein boolesches Flag, das definiert, ob das Ergebnis alle oder nur übereinstimmende Zeilen enthalten soll (Standard: false - nur übereinstimmende Zeilen zurückgegeben).

IP-Präfixnotation

IP-Präfixnotation (auch als CIDR-Notation bezeichnet) ist eine präzise Möglichkeit, eine IP-Adresse und die zugehörige Netzwerkmaske darzustellen. Das Format ist <base IP>/<prefix length>, wobei die Präfixlänge die Anzahl der führenden 1 Bits in der Netzmaske ist. Die Präfixlänge bestimmt den Bereich der IP-Adressen, die zum Netzwerk gehören.

Bei IPv4 ist die Präfixlänge eine Zahl zwischen 0 und 32. Die Notation 192.168.2.0/24 stellt also die IP-Adresse 192.168.2.0 mit einer Netzmaske von 255.255.255.255.0 dar. Diese Netzmaske hat 24 führende 1 Bits oder eine Präfixlänge von 24.

Für IPv6 ist die Präfixlänge eine Zahl zwischen 0 und 128. Die Notation fe80::85d:e82c:9446:7994/120 stellt also die IP-Adresse fe80:::85d:e82c:9446:7994 mit einer Netzmaske von ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00 dar. Diese Netzmaske hat 120 führende 1 Bits oder eine Präfixlänge von 120.

Gibt zurück

Das ipv4_lookup Plug-In gibt ein Ergebnis des Joins (Lookup) basierend auf dem IPv4-Schlüssel zurück. Das Schema der Tabelle ist die Union der Quelltabelle und der Nachschlagetabelle, ähnlich dem Ergebnis des lookup Operators.

Wenn das argument return_unmatched auf truefestgelegt ist, enthält die resultierende Tabelle sowohl übereinstimmende als auch nicht übereinstimmende Zeilen (gefüllt mit NULL-Werten).

Wenn das argument return_unmatched auf falsefestgelegt oder nicht angegeben ist (der Standardwert von false wird verwendet), enthält die resultierende Tabelle so viele Datensätze wie übereinstimmende Ergebnisse. Diese Variante der Suche hat eine bessere Leistung im Vergleich zur return_unmatched=true Ausführung.

Hinweis

  • Dieses Plug-In deckt das Szenario des IPv4-basierten Joins ab, wobei eine kleine Nachschlagetabellengröße (100K-200K Zeilen) vorausgesetzt wird, wobei die Eingabetabelle optional eine größere Größe aufweist.
  • Die Leistung des Plug-Ins hängt von der Größe der Nachschlage- und Datenquellentabellen, der Anzahl der Spalten und der Anzahl übereinstimmenden Datensätzen ab.

Beispiele

IPv4-Suche – nur übereinstimmende Zeilen

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

Ausgabe

ip Netzwerk continent_code continent_name country_iso_code country_name
2.20.183.12 2.20.183.0/24 EU Europa GB United Kingdom
5.8.1.2 5.8.0.0/19 EU Europa RU Russland

IPv4-Suche : Gibt übereinstimmende und nicht übereinstimmende Zeilen zurück

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

Ausgabe

ip Netzwerk continent_code continent_name country_iso_code country_name
2.20.183.12 2.20.183.0/24 EU Europa GB United Kingdom
5.8.1.2 5.8.0.0/19 EU Europa RU Russland
192.165.12.17

IPv4-Suche: Verwenden der Quelle in 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)

Ausgabe

ip Netzwerk 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 Vereinigtes Königreich 0 0
5.8.1.2 5.8.0.0/19 2017370 EU Europa RU Russland 0 0
192.165.12.17 192.165.8.0/21 2661886 EU Europa SE Schweden 0 0

IPv4-Suche : Verwenden zusätzlicher Spalten für den Abgleich

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)

Ausgabe

ip continent_name country_iso_code Netzwerk 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 Vereinigtes Königreich 0 0
5.8.1.2 Europa RU 5.8.0.0/19 2017370 EU Russland 0 0