Преобразование максимальных адресов хоста в маску сети CIDR - PullRequest
0 голосов
/ 08 декабря 2018

Я пытаюсь преобразовать числовое значение максимального используемого адреса хоста 'в IP-обозначение CIDR, например: 192.168.1.1/28 имеет доступное пространство хоста 14. Однако и 192.168.1.1/30, и / 31 оба имеютполезное пространство хоста 2, где проблема вступает в игру.В приведенном ниже коде показаны ожидаемые и фактические значения:

    let ip = "192.168.1.1";

    console.log("max hosts of 14, expected: 255.255.255.240, got: " + test(ip, 14));
        //the problem, these should give the correct result respectively
        console.log("max hosts of 2, expected: 255.255.255.254, got: " + test(ip, 2));
        console.log("max hosts of 2, expected: 255.255.255.252, got: " + test(ip, 2));

    let test = function(ip, maxHosts){
        let numericNetmask = (maxHosts ^ 0xFFFFFFFF) - 1;
        let str = [];
        for (let shift = 24; shift > 0; shift -= 8) {
            str.push(((numericNetmask >>> shift) & 0xFF).toString());
        }
        str.push((numericNetmask & 0xFF).toString());
        return str.join(".");
    };

Теперь, конечно, я понимаю, что в этом случае невозможно преобразовать максимальное количество хостов самостоятельно в маску сети, однако возможно ли это, учитываяАйпи адрес?(примечание: это суперсетевое соединение класса).

Конечно, в обычном случае использования, например, для формы, которую можно «взломать», сохраняя в качестве значения сетевую маску CIDR, но я надеялся на альтернативу.

...