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|
evaluate
ipv4_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 LookupTable auch 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 true
festgelegt ist, enthält die resultierende Tabelle sowohl übereinstimmende als auch nicht übereinstimmende Zeilen (gefüllt mit NULL-Werten).
Wenn das argument return_unmatched auf false
festgelegt 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 |
Verwandte Inhalte
- Übersicht über IPv4/IPv6-Funktionen
- Übersicht über IPv4-Textüberstimmungsfunktionen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für