ipv6_is_match()

Odpovídá dvěma řetězcům síťových adres IPv6 nebo IPv4. Dva řetězce IPv6/IPv4 se analyzují a porovnávají při zohlednění kombinované masky předpon IP vypočítané z předpon argumentů a volitelného prefix argumentu.

Poznámka

Funkce může přijímat a porovnávat argumenty představující síťové adresy IPv6 i IPv4. Pokud volající ví, že argumenty jsou ve formátu IPv4, použijte funkci ipv4_is_match(). Tato funkce bude mít za následek lepší výkon za běhu.

Syntax

ipv6_is_match(ip1,ip2[ ,Předponu])

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Typ Vyžadováno Popis
ip1, ip2 string ✔️ Výraz představující adresu IPv6 nebo IPv4. Řetězce IPv6 a IPv4 je možné maskovat pomocí zápisu předpon IP.
Předponu int Celé číslo od 0 do 128 představující počet nejvýznamnějších bitů, které se berou v úvahu.

Zápis předpony PROTOKOLU IP

Notace předpony IP (označovaná také jako zápis CIDR) je stručný způsob, jak znáznačovat IP adresu a její přidruženou masku sítě. Formát je <base IP>/<prefix length>, kde délka předpony je počet úvodních 1 bitů v síťové maskě. Délka předpony určuje rozsah IP adres, které patří do sítě.

U protokolu IPv4 je délka předpony číslo mezi 0 a 32. Notace 192.168.2.0/24 tedy představuje IP adresu 192.168.2.0 s maskou sítě 255.255.255.0. Tato síťová maska má 24 úvodních 1 bitů nebo délku předpony 24.

U protokolu IPv6 je délka předpony číslo mezi 0 a 128. Notace fe80::85d:e82c:9446:7994/120 tedy představuje IP adresu fe80::85d:e82c:9446:7994 s maskou netffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00. Tato síťová maska má 120 úvodních 1 bitů nebo délku předpony 120.

Návraty

  • true: Pokud se dlouhé vyjádření prvního řetězcového argumentu IPv6/IPv4 rovná druhému řetězcovém argumentu IPv6/IPv4.
  • false:Jinak.
  • null: Pokud převod jednoho ze dvou řetězců IPv6/IPv4 nebyl úspěšný.

Příklady

Případ rovnosti IPv6/IPv4 – zápis předpony IP zadaný v řetězcích IPv6/IPv4

datatable(ip1_string:string, ip2_string:string)
[
 // IPv4 are compared as IPv6 addresses
 '192.168.1.1',    '192.168.1.1',       // Equal IPs
 '192.168.1.1/24', '192.168.1.255',     // 24 bit IP4-prefix is used for comparison
 '192.168.1.1',    '192.168.1.255/24',  // 24 bit IP4-prefix is used for comparison
 '192.168.1.1/30', '192.168.1.255/24',  // 24 bit IP4-prefix is used for comparison
  // IPv6 cases
 'fe80::85d:e82c:9446:7994', 'fe80::85d:e82c:9446:7994',         // Equal IPs
 'fe80::85d:e82c:9446:7994/120', 'fe80::85d:e82c:9446:7998',     // 120 bit IP6-prefix is used for comparison
 'fe80::85d:e82c:9446:7994', 'fe80::85d:e82c:9446:7998/120',     // 120 bit IP6-prefix is used for comparison
 'fe80::85d:e82c:9446:7994/120', 'fe80::85d:e82c:9446:7998/120', // 120 bit IP6-prefix is used for comparison
 // Mixed case of IPv4 and IPv6
 '192.168.1.1',      '::ffff:c0a8:0101', // Equal IPs
 '192.168.1.1/24',   '::ffff:c0a8:01ff', // 24 bit IP-prefix is used for comparison
 '::ffff:c0a8:0101', '192.168.1.255/24', // 24 bit IP-prefix is used for comparison
 '::192.168.1.1/30', '192.168.1.255/24', // 24 bit IP-prefix is used for comparison
]
| extend result = ipv6_is_match(ip1_string, ip2_string)

Výstup

ip1_string ip2_string result
192.168.1.1 192.168.1.1 1
192.168.1.1/24 192.168.1.255 1
192.168.1.1 192.168.1.255/24 1
192.168.1.1/30 192.168.1.255/24 1
fe80::85d:e82c:9446:7994 fe80::85d:e82c:9446:7994 1
fe80::85d:e82c:9446:7994/120 fe80::85d:e82c:9446:7998 1
fe80::85d:e82c:9446:7994 fe80::85d:e82c:9446:7998/120 1
fe80::85d:e82c:9446:7994/120 fe80::85d:e82c:9446:7998/120 1
192.168.1.1 ::ffff:c0a8:0101 1
192.168.1.1/24 ::ffff:c0a8:01ff 1
::ffff:c0a8:0101 192.168.1.255/24 1
::192.168.1.1/30 192.168.1.255/24 1

Porovnání IPv6/IPv4 – zápis předpony IP zadaný v řetězcích IPv6/IPv4 a jako další argument ipv6_is_match() funkce

datatable(ip1_string:string, ip2_string:string, prefix:long)
[
 // IPv4 are compared as IPv6 addresses 
 '192.168.1.1',    '192.168.1.0',   31, // 31 bit IP4-prefix is used for comparison
 '192.168.1.1/24', '192.168.1.255', 31, // 24 bit IP4-prefix is used for comparison
 '192.168.1.1',    '192.168.1.255', 24, // 24 bit IP4-prefix is used for comparison
   // IPv6 cases
 'fe80::85d:e82c:9446:7994', 'fe80::85d:e82c:9446:7995',     127, // 127 bit IP6-prefix is used for comparison
 'fe80::85d:e82c:9446:7994/127', 'fe80::85d:e82c:9446:7998', 120, // 120 bit IP6-prefix is used for comparison
 'fe80::85d:e82c:9446:7994/120', 'fe80::85d:e82c:9446:7998', 127, // 120 bit IP6-prefix is used for comparison
 // Mixed case of IPv4 and IPv6
 '192.168.1.1/24',   '::ffff:c0a8:01ff', 127, // 127 bit IP6-prefix is used for comparison
 '::ffff:c0a8:0101', '192.168.1.255',    120, // 120 bit IP6-prefix is used for comparison
 '::192.168.1.1/30', '192.168.1.255/24', 127, // 120 bit IP6-prefix is used for comparison
]
| extend result = ipv6_is_match(ip1_string, ip2_string, prefix)

Výstup

ip1_string ip2_string Předponu result
192.168.1.1 192.168.1.0 31 1
192.168.1.1/24 192.168.1.255 31 1
192.168.1.1 192.168.1.255 24 1
fe80::85d:e82c:9446:7994 fe80::85d:e82c:9446:7995 127 1
fe80::85d:e82c:9446:7994/127 fe80::85d:e82c:9446:7998 120 1
fe80::85d:e82c:9446:7994/120 fe80::85d:e82c:9446:7998 127 1
192.168.1.1/24 ::ffff:c0a8:01ff 127 1
::ffff:c0a8:0101 192.168.1.255 120 1
::192.168.1.1/30 192.168.1.255/24 127 1