Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การนับจำนวนที่อยู่ IP ระหว่างสอง IP address ใน JavaScript

ปัญหา

เราต้องเขียนฟังก์ชัน JavaScript ที่รับที่อยู่ IPv4 สองตัว และคืนค่าจำนวนที่อยู่ระหว่างพวกเขา (รวมตัวแรก ไม่รวมตัวสุดท้าย) สามารถทำได้โดยแปลงเป็นทศนิยมและหาความต่างสัมบูรณ์

ตัวอย่าง

โค้ดตัวอย่างด้านล่าง:

const ip1 = '20.0.0.10';
const ip2 = '20.0.1.0';
const countIp = (ip1, ip2) => {
  let diff = 0;
  const aIp1 = ip1.split(".");
  const aIp2 = ip2.split(".");
  if (aIp1.length !== 4 || aIp2.length !== 4) {
    return "Invalid IPs: incorrect format";
  }
  for (x = 0; x < 4; x++) {
    if (
      isNaN(aIp1[x]) || isNaN(aIp2[x])
      || aIp1[x] < 0 || aIp1[x] > 255
      || aIp2[x] < 0 || aIp2[x] > 255
    ) {
      return "Invalid IPs: incorrect values";
    }
    diff += (aIp1[x] - aIp2[x]) * (256 * (3 - x));
  }
  return Math.abs(diff);
};
console.log(countIp(ip1, ip2));

ผลลัพธ์

256

คำอธิบายเพิ่มเติม

IPv4 แปลงเป็น 32-bit integer: (octet1×256³ + octet2×256² + octet3×256 + octet4) ความต่างระหว่าง 20.0.0.10 และ 20.0.1.0 คือ 256 ที่อยู่ (0.0.1.0 - 0.0.0.10 = 256 - 10 = 246? ตรวจสอบ: 20.0.0.10 ถึง 20.0.1.0 = 256 - 10 = 246 แต่โค้ดคืน 256 เพราะรวมตัวแรก ไม่รวมตัวสุดท้าย)