ipv6_compare()

İki IPv6 veya IPv4 ağ adresi dizesini karşılaştırır. İki IPv6 dizesi ayrıştırılır ve karşılaştırılırken bağımsız değişken ön eklerinden hesaplanan birleştirilmiş IP ön eki maskesi ve isteğe bağlı prefix bağımsız değişken hesaplanır.

Not

İşlev, hem IPv6 hem de IPv4 ağ adreslerini temsil eden bağımsız değişkenleri kabul edebilir ve karşılaştırabilir. Ancak, çağıran bağımsız değişkenlerin IPv4 biçiminde olduğunu biliyorsa ipv4_is_compare() işlevini kullanın. Bu işlev daha iyi çalışma zamanı performansına neden olur.

Syntax

ipv6_compare(ip1,ip2[ ,Önek])

Söz dizimi kuralları hakkında daha fazla bilgi edinin.

Parametreler

Ad Tür Gerekli Açıklama
ip1, ip2 string ✔️ IPv6 veya IPv4 adresini temsil eden bir ifade. IPv6 ve IPv4 dizeleri IP ön eki gösterimi kullanılarak maskelenebilir.
Önek int 0 ile 128 arasında bir tamsayı, dikkate alınan en önemli bitlerin sayısını temsil eder.

IP ön eki gösterimi

IP ön eki gösterimi (CIDR gösterimi olarak da bilinir), ip adresini ve ilişkili ağ maskesini temsil etmenin kısa bir yoludur. biçimi, <base IP>/<prefix length>ön ek uzunluğunun netmask içindeki baştaki 1 bitin sayısı olduğu şeklindedir. Ön ek uzunluğu, ağa ait IP adresi aralığını belirler.

IPv4 için ön ek uzunluğu 0 ile 32 arasında bir sayıdır. Dolayısıyla 192.168.2.0/24 gösterimi, 255.255.255.0 net maskesine sahip 192.168.2.0 IP adresini temsil eder. Bu netmask 24 önde gelen 1 bit veya ön ek uzunluğu 24'tür.

IPv6 için ön ek uzunluğu 0 ile 128 arasında bir sayıdır. Bu nedenle gösterimi fe80::85d:e82c:9446:7994/120, ffff:ffff:ffff:ff00 netmask ile fe80::85d:e82c:9446:7994 IP adresini temsil eder. Bu netmask 120 baştaki 1 bit veya ön ek uzunluğu 120'ye sahiptir.

Döndürülenler

  • 0: İlk IPv6 dize bağımsız değişkeninin uzun gösterimi ikinci IPv6 dize bağımsız değişkenine eşitse.
  • 1: İlk IPv6 dize bağımsız değişkeninin uzun gösterimi ikinci IPv6 dize bağımsız değişkeninden büyükse.
  • -1: İlk IPv6 dize bağımsız değişkeninin uzun gösterimi ikinci IPv6 dize bağımsız değişkeninden küçükse.
  • null: İki IPv6 dizeden biri için dönüştürme başarılı olmadıysa.

Örnekler: IPv6/IPv4 karşılaştırma eşitlik durumları

IPv6/IPv4 dizelerinde belirtilen IP ön eki gösterimini kullanarak IP'leri karşılaştırma

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)

Çıkış

ip1_string ip2_string sonuç
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

IPv6/IPv4 dizelerinde belirtilen IP ön eki gösterimini ve işlevin ek bağımsız değişkenini kullanarak IP'leri karşılaştırın ipv6_compare()

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)

Çıkış

ip1_string ip2_string Önek sonuç
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