Показать сообщение отдельно
  #5 (permalink)  
Старый 23.01.2015, 21:25
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,491

Набросал сортировщик по подсетям:
var input = '10.17.0.0/16\n10.18.1.0/24\n9.9.9.9\n10.19.5.12/30\n10.18.1.2\n10.18.1.22\n10.19.5.13\n10.17.0.1\n10.17.1.0\n10.17.1.20\n';
 
alert('На входе:\n' + input)
 
function sortSubnets(input){
    var subnets = {},
        unknown = [];
 
    input = input.replace(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,2}/g, function(subnet){
        var ips = subnets[subnet] = [];
        var subnet = subnet.split(/\D/);
 
        ips.firstIP = new DataView(new Uint8Array(subnet.slice(0,4)).buffer).getUint32(0);
        ips.lastIP = ips.firstIP + Math.pow(2, 32 - subnet[4]) - 1;
 
        return '';
    })
 
    var subnetsKeys = Object.keys(subnets);
 
    input.replace(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/g, function(ip){
        var uintIP = new DataView(new Uint8Array(ip.split(/\D/)).buffer).getUint32(0);
        if(
            !subnetsKeys.some(function(subnet){
                subnet = subnets[subnet];
                if(subnet.firstIP <= uintIP && subnet.lastIP >= uintIP) {
                    return subnet.push(ip)
                };
            })
        ) unknown.push(ip);
 
        return '';
    })
 
    if(unknown.length){
        subnets.unknown = unknown;
    }
 
    return subnets
}
 
alert('На выходе:\n' + JSON.stringify(
    sortSubnets(input)
, 0, '\t'));

На вход принимает строку содержащую ip и подсети и раскидывает как надо, на выходe объект.
Вообще это задачка не для js.)
__________________
29375, 35

Последний раз редактировалось Aetae, 23.01.2015 в 21:38.
Ответить с цитированием