class Util { static List> subnety() { var list = >[ { "prefix": 30, "hosti": 4, } ]; for (int i = 30; i > 8; i--) { list.add({"prefix": i - 1, "hosti": list[30 - i]["hosti"]! * 2}); } return list; } static List _strToBin(String input) { var list = []; input.split(".").forEach((numero) { var bin = int.parse(numero).toRadixString(2); while (bin.length < 8) { bin = "0$bin"; } list.add(bin); }); return list; } static List _binToStr(List input) { var list = []; for (var numero in input) { list.add(int.parse(numero, radix: 2).toString()); } return list; } static String prefixToMask(String prefix) { var bin = "1" * int.parse(prefix); while (bin.length < 32) { bin += "0"; } var match = RegExp(r"\d{8}").allMatches(bin); return _binToStr(match .map( (e) => e.group(0)!, ) .toList()) .join("."); } static String ipToNetworkAdd(String ip, String nm) { var nmBin = _strToBin(nm); var ipBin = _strToBin(ip); var networkAdd = []; for (int i = 0; i < 4; i++) { var nmBinChar = nmBin[i].split(""); var ipBinChar = ipBin[i].split(""); var networkAddChar = []; for (int j = 0; j < 8; j++) { if (nmBinChar[j] == "1" && ipBinChar[j] == "1") { networkAddChar.add(ipBinChar[j]); } else { networkAddChar.add("0"); } } networkAdd.add(networkAddChar.join()); } return _binToStr(networkAdd).join("."); } static const String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; }