JS 根据子网掩码,网关计算出所有的IP范围
// 验证IP的正则
var ip_reg = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; // 验证子网掩码的正则
var mask_reg = /^(254|252|248|240|224|192|128|0)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(254|252|248|240|224|192|128|0)$/; /**
* 把IP地址转换成二进制格式
* @param string ip 待转换的IP的地址
*/
function ip_to_binary(ip)
{
if (ip_reg.test(ip)) {
var ip_str = "",
ip_arr = ip.split("."); for (var i = 0; i < 4; i++) {
curr_num = ip_arr[i];
number_bin = parseInt(curr_num);
number_bin = number_bin.toString(2);
count = 8 - number_bin.length;
for (var j = 0; j < count; j++) {
number_bin = "0" + number_bin;
}
ip_str += number_bin;
}
return ip_str;
} return '';
} /**
* 把二进制格式转换成IP地址
* @param string binary 待转换的二进制
*/
function binary_to_ip(binary)
{
if (binary.length == 32) {
a = parseInt(binary.substr(0, 8), 2);
b = parseInt(binary.substr(8, 8), 2);
c = parseInt(binary.substr(16, 8), 2);
d = parseInt(binary.slice(-8), 2); return a + '.' + b + '.' + c + '.' + d;
} return '';
} /**
* 根据子网掩码和网关计算网络地址和广播地址
* @param string mask 子网掩码
* @param string gateway 网关
*/
function get_network_broadcast_addr(mask, gateway)
{
network_broadcast = [];
network_addr = ""; mask_arr = mask.split(".");
ip_arr = ip.split("."); // 计算IP的网络地址 与(&)运算
for (var i = 0; i < 4; i++) {
number1 = parseInt(mask_arr[i]);
number2 = parseInt(ip_arr[i]);
network_addr += number1 & number2;
if( i < 3 ){
network_addr += ".";
}
}
network_broadcast.push(network_addr); // 计算广播地址
// 子掩码后面有几个0,就去掉IP地址后几位再补1
mask_binary = ip_to_binary(mask);
gateway_binary = ip_to_binary(ip); mask_zero = mask_binary.split(0).length - 1;
one_number = new Array(mask_zero + 1).join('1'); // IP地址后位补1
gateway_hou_wei_bu_yi = gateway_binary.slice(0, -mask_zero) + one_number; network_broadcast.push(binary_to_ip(gateway_hou_wei_bu_yi)); return network_broadcast;
} // 全排列组合算法(两两递归组合)
function doExchange(doubleArrays)
{
var len = doubleArrays.length;
if(len >= 2){
var len1 = doubleArrays[0].length;
var len2 = doubleArrays[1].length;
var newlen = len1 * len2;
var temp = new Array(newlen);
var index = 0;
for(var i = 0; i < len1; i++){
for(var j = 0; j < len2; j++){
temp[index] = doubleArrays[0][i] + '.' + doubleArrays[1][j];
index++;
}
} var newArray = new Array(len - 1);
for(var i = 2; i < len; i++){
newArray[i - 1] = doubleArrays[i];
}
newArray[0] = temp; return doExchange(newArray); } else{
return doubleArrays[0];
}
} /**
* 获取由网络地址和广播址组成的所有IP组合
* @param string network_addr 网络地址
* @param string broadcast_addr 广播地址
* @param string gateway 网关
*/
function return_ip(network_addr, broadcast_addr, gateway)
{
range = [];
start = network_addr.split(".");
end = broadcast.split("."); // range格式为[[192], [168], [0,1,2...254], [0,1,2...254]]
for (var i = 0; i < 4; i++) {
if (start[i] == end[i]) {
range[i] = [start[i]];
} else {
min = Math.min(start[i], end[i]);
max = Math.max(start[i], end[i]);
temp = [];
if (i == 3) min = 199; // 从200起计
for (var j = min; j <= max; j++) {
temp.push(j);
}
range[i] = temp;
}
} ip_list = doExchange(range);
ip_list.shift(); // 去掉网络地址
ip_list.pop(); // 去掉广播地址
gateway_index = -1; // 去掉网关
for (var k = 0; k < ip_list.length; k++) {
if (ip_list[k] == gateway) {
gateway_index = k;
break;
}
}
if (gateway_index > -1) {
ip_list.splice(gateway_index, 1);
} return ip_list;
}
JS 根据子网掩码,网关计算出所有的IP范围的更多相关文章
- 在java代码中执行js脚本,实现计算出字符串“(1+2)*(1+3)”的结果
今天在公司项目中,发现一个计算运费的妙招.由于运费规则各种各样,因此写一个公式存到数据库.下次需要计算运费时,直接取出这个公式,把公式的未知变量给替换掉,然后计算出结果就是ok了. 一 ...
- HCNP学习笔记之子网掩码的计算和划分详细
0x00 子网掩码的计算 TCP/IP网间网技术产生于大型主流机环境中,它能发展到今天的规模是当初的设计者们始料未及的.网间网规模的迅速扩展对IP地址模式的威胁并不是它不能保证主机地址的唯一性,而是会 ...
- 子网掩码!如何划分子网掩码,计算IP地址
作者:chli1806 一.子网掩码的含义和根据子网掩码划分子网一个IP地址必然属于某一个网络,或者叫子网.子网掩码就是用来指定某个IP地址的网络地址的,换一句话说,就是用来划分子网的.例如,一个A类 ...
- ip地址 与子网掩码 的计算
ip地址 与子网掩码 的计算 128.0.0.0=1 192.0.0.0=2224.0.0.0=3 240.0.0.0=4 248.0.0.0=5 252.0.0.0=6 254.0.0.0=7 25 ...
- python爬虫(正则取数据)读取表格内的基金代码后爬取基金最新净值,同时写到对应的表格中,基于最近一次购买净值计算出涨跌幅(名字有点长)
最近基金跌的真够猛,虽说是定投,但大幅度下跌,有时候适当的增加定投数也是降低平均成本的一种方式 每天去看去算太费时间,写了个爬虫,让他自动抓数据后自动计算出来吧 实现逻辑: 1.创建了一个excel表 ...
- 根据地图上的两个点各自的x,y坐标,计算出2点之间的直线距离。显示为公里、米
/** * calc_map_distance() , 根据地图上的两个点各自的x,y坐标,计算出2点之间的直线距离 * @param array $point_1 第1个点的x,y坐标 array( ...
- Excel中利用IF和TIME函数计算出上下班状态!
大家都知道现在上下班实行打卡制,制作考勤的人员需要对你上下班的时间,计算出上下班的状态,比如:迟到.早退.加班.正常等.下面为您介绍一个“帮手”. 1.打开Excel文档.如下图 ...
- PHP 计算出内存最高占用.
PHP 计算出内存最高占用. 代码可以计算出内存是否完全被使用, ini设置处:memory_limit = 1024M 代码跑完将显示如下信息: memory_limit:320M all ...
- js制作带有遮罩弹出层实现登录小窗口
要实现的效果如下 点击“登录”按钮后,弹出登录小窗口,并且有遮罩层(这个名词还是百度知道的,以前只知道效果,却不知道名字) 在没有点击“登录”按钮之前登录小窗口不显示,点击“登录”按钮后小窗口显示,并 ...
随机推荐
- [转] CDH6 安装文章链接收集
CentOS 7下Cloudera Manager及CDH 6.0.1安装过程详解 http://blog.51cto.com/wzlinux/2321433?source=dra Cloudera ...
- Eclipse打开时“发现了以元素'd:skin'”开头的无效内容。此处不应含有子元素的解决方法
把有问题的 devices.xml 文件删除,再在sdk 里面 tools\lib 下找到devices.xml 文件,将这个文件拷贝到你删除的那个文件夹里,重启 eclipse 就 OK 啦!
- 关于Java的权限修饰符(public,private,protected,默认friendly)
以前对访问修饰符总是模棱两可,让自己仔细解释也是经常说不很清楚.这次要彻底的搞清楚. 现在总结如下: 一.概括总结 各个访问修饰符对不同包及其子类,非子类的访问权限 Java访问权限修饰符包含四个:p ...
- 爬虫URL去重
这个要看你想抓取的网页数量是哪种规模的.如果是千万以下用hash表, set, 布隆过滤器基本可以解决,如果是海量的......嗯我也没做过海量的,不过hash表之类的就别想了,内存根本不够,分割线下 ...
- 机器学习 损失函数(Loss/Error Function)、代价函数(Cost Function)和目标函数(Objective function)
损失函数(Loss/Error Function): 计算单个训练集的误差,例如:欧氏距离,交叉熵,对比损失,合页损失 代价函数(Cost Function): 计算整个训练集所有损失之和的平均值 至 ...
- 一头扎进 Java IO中-------java IO文件
Java IO: 文件 在Java应用程序中,文件是一种常用的数据源或者存储数据的媒介.所以这一小节将会对Java中文件的使用做一个简短的概述.这篇文章不会对每一个技术细节都做出解释,而是会针对文件存 ...
- Linux Directory Structure
Note: Files are grouped according to purpose. Ex: commands, data files, documentation. Parts of a Un ...
- 【转】winform程序textbox滚动条保持在最下面 内容不闪烁
在开发winform程序时,会用到textbox控件来显示信息,当把textbox的Multiline属性改为Ture时(即多行显示状态),ScrollBars属性改为Vertical(内容过多时,显 ...
- IOS项目之弹出动画终结篇
在之前写过IOS项目之弹出动画一.IOS项目之弹出动画二.IOS项目之弹出动画三,今天来一个终极封装已经上传到Github上弹出动画总结篇UIPopoverTableView. UIPopoverTa ...
- 搭建Web部署环境
这里使用Web轻量级的服务器Tomcat Tomcat常用作servlet的运行容器,在JavaWeb开发中广泛使用,当然,Tomcat也可为提供HTML页面服务. 主要步骤: Tomcat下载安装 ...