Sdílet prostřednictvím


ipv6_compare()

Platí pro: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

Porovná dva řetězce síťových adres IPv6 nebo IPv4. Dva řetězce IPv6 se analyzují a porovnávají při účtování kombinované masky předpon IP adres 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 však volající ví, že argumenty jsou ve formátu IPv4, použijte funkci ipv4_is_compare(). Výsledkem této funkce bude lepší výkon za běhu.

Syntaxe

ipv6_compare(ip1,ip2[ ,– předpona])

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

Parametry

Název Type Pož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ředpony IP.
předpona int Celé číslo od 0 do 128 představující počet nejvýznamnějších bitů, které jsou přihlédnuty.

Notace předpon IP adres

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

U protokolu IPv4 je délka předpony číslo od 0 do 32. Zápis 192.168.2.0/24 tedy představuje IP adresu 192.168.2.0 s maskou sítě 255.255.255.255.0. Tato maska sítě má 24 úvodních 1 bitů nebo délku předpony 24.

U protokolu IPv6 je délka předpony číslo od 0 do 128. Zápis fe80::85d:e82c:9446:7994/120 představuje IP adresu fe80::85d:e82c:9446:7994 s netmask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00. Tato maska sítě má 120 úvodních 1 bitů nebo délku předpony 120.

Návraty

  • 0: Pokud se dlouhá reprezentace prvního řetězcového argumentu IPv6 rovná druhému řetězci IPv6.
  • 1: Pokud je dlouhé vyjádření prvního argumentu řetězce IPv6 větší než druhý řetězcový argument IPv6.
  • -1: Pokud je dlouhé vyjádření prvního řetězcového argumentu IPv6 menší než druhý řetězcový argument IPv6.
  • null: Pokud převod jednoho ze dvou řetězců IPv6 nebyl úspěšný.

Příklady: Případy rovnosti porovnání IPv6/IPv4

Porovnání IP adres pomocí zápisu předpon IP zadaného 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_compare(ip1_string, ip2_string)

Výstup

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

Porovnání IP adres s notací předpon IP zadaných v řetězcích IPv6/IPv4 a jako další argument ipv6_compare() 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_compare(ip1_string, ip2_string, prefix)

Výstup

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