需求:给出ip/掩码的形式,求出起始地址和结束地址,例如6.61.252.0/24的起始地址为6.61.252.1,结束地址为6.61.252.254。

代码:因为我是在页面做处理,所以写的是js代码

1、计算起始地址 
传入的参数第一个为ip,比如例子中的6.61.252.0。第二个参数为掩码的ip格式,例子中给出的是整数形式,需要进行转换,转换代码见下面

/*** 计算子网起始地址(不包括网络地址)* */
function getLowAddr(ip, netMask){var lowAddr = "";var ipArray = new Array();var netMaskArray = new Array();// I参数不正确if (4 != ip.split(".").length || "" == netMask){return "";}for (var i = 0; i < 4; i++){ipArray[i] = ip.split(".")[i];netMaskArray[i] = netMask.split(".")[i];if (ipArray[i] > 255 || ipArray[i] < 0 || netMaskArray[i] > 255&& netMaskArray[i] < 0){return "";}ipArray[i] = ipArray[i] & netMaskArray[i];}// 构造最小地址for (var i = 0; i < 4; i++){if(i == 3){ipArray[i] = ipArray[i] + 1;}if ("" == lowAddr){lowAddr +=ipArray[i];} else{lowAddr += "." + ipArray[i];}}return lowAddr;
}

2、计算结束地址

/*** 计算子网终止地址(不包括广播地址)*/
function getHighAddr(ip,netMask){var lowAddr = getLowAddr(ip,netMask);var hostNumber = getHostNumber(netMask);if("" == lowAddr || hostNumber == 0){return "";}var lowAddrArray = new Array();for(var i = 0; i < 4; i++){lowAddrArray[i] = lowAddr.split(".")[i];if(i == 3){lowAddrArray[i] = Number(lowAddrArray[i] - 1);}}lowAddrArray[3] = lowAddrArray[3] + Number(hostNumber - 1);//alert(lowAddrArray[3]);if(lowAddrArray[3] > 255){var k = parseInt(lowAddrArray[3] / 256);//alert(k);lowAddrArray[3] = lowAddrArray[3] % 256;//alert(lowAddrArray[3]);lowAddrArray[2] = Number(lowAddrArray[2]) + Number(k);//alert(lowAddrArray[2]);if(lowAddrArray[2] > 255){k = parseInt(lowAddrArray[2] / 256);lowAddrArray[2] = lowAddrArray[2] % 256;lowAddrArray[1] = Number(lowAddrArray[1]) + Number(k);if(lowAddrArray[1] > 255){k = parseInt(lowAddrArray[1] / 256);lowAddrArray[1] = lowAddrArray[1] % 256;lowAddrArray[0] = Number(lowAddrArray[0]) + Number(k);}}}var highAddr = "";for(var i = 0; i < 4; i++){if(i == 3){lowAddrArray[i] = lowAddrArray[i] - 1;}if("" == highAddr){highAddr = lowAddrArray[i];}else{highAddr += "." + lowAddrArray[i];}}return highAddr;
}

3、获取主机数

/*** 获取主机数* * @param netMask* @returns {Number}*/
function getHostNumber(netMask){var hostNumber = 0;var netMaskArray = new Array();for(var i = 0; i < 4; i++){netMaskArray[i] = netMask.split(".")[i];if(netMaskArray[i] < 255){hostNumber = Math.pow(256,3-i) * (256 - netMaskArray[i]);break;}}return hostNumber;
}

4、将整数形式的掩码转换成ip格式

/*** 转换掩码的格式*/function getNetMask(inetMask){var netMask = "";if(inetMask > 32){return netMask;}//子网掩码为1占了几个字节var num1 = parseInt(inetMask / 8);//子网掩码的补位位数var num2 = inetMask % 8;var array = new Array();for(var i = 0; i < num1; i++){array[i] = 255;}for(var i = num1; i < 4; i++){array[i] = 0;}for(var i = 0; i < num2; num2--){array[num1] += Math.pow(2,8-num2);}netMask = array[0] + "." + array[1] + "." + array[2] + "." + array[3];return netMask;}

得到 ip/掩码 的起始结束地址相关推荐

  1. 利用qq IP数据库(QQwry.dat) 查地址的实用类

    http://www.cz88.net/fox/ , IP库下载地址 <?php /** * IP 地理位置查询类 * * @author 马秉尧 * @version 1.5 * @copyr ...

  2. mac 查ip linux,如何通过mac地址查ip,手把手教你Mac怎么查看ip地址

    为了工作需要,有时候我们需要查看我们电脑的IP地址和MAC地址,在windows系统中与Mac系统中查看本机ip地址有些不同,想要知道在mac系统怎么查看ip地址以及MAC地址?下面,小编跟大家讲解M ...

  3. mac 查ip linux,如何通过mac地址查ip,小编教你Mac怎么查看ip地址

    IP是英文Internet Protocol的缩写,意思是"网络之间互连的协议",也就是为计算机网络相互连接进行通信而设计的协议, MAC地址,称为硬件位址,用来定义网络设备的位置 ...

  4. java实现 IP/掩码位 转换 ip段范围

    import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.reg ...

  5. 以IP段作为监听地址

    在写Socket通讯服务的时候一般需要Listen某个IP地址端口,但这样比较麻烦的就是部署后需要配置相关IP地址信息:虽然可以监听Any所有地址,但这种对于私有的网络服务来说并不安全.为了在发布的时 ...

  6. 嵌入式单片机应用开发--FLASH的擦除操作(擦除开始地址到结束地址内的数据)

     之前没有遇到过这方面的需求,现在遇到了,记录下来:  一般来说,flash芯片会支持以下几种擦除接口. 擦除接口: 1.256Byte擦除接口(页擦除) 2.4KByte擦除接口(块擦除) 3.32 ...

  7. RH358管理DHCP和IP地址分配--配置分配IPv6地址

    RH358管理DHCP和IP地址分配–配置分配IPv6地址 本章节介绍配置DHCP分配IPv6地址,虽然还是有点鸡肋,但可以作为了解和学习用. 专栏地址:https://blog.csdn.net/q ...

  8. python 应用 IPy 计算IP/掩码的网络地址

    python 应用 IPy 计算IP/掩码的网络地址 from IPy import IP def ipnetwork(ip, mask):     return IP(ip).make_net(ma ...

  9. 组播IP转换为组播MAC地址【转载】

    链接:https://www.zhihu.com/question/36730567/answer/83083851 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. ...

最新文章

  1. 计算机视觉工程师一天都大致在做些什么?
  2. 什么是视频会议?什么是H.323?SIP是什么协议?
  3. Python数据类型——整型、布尔型、列表、元祖、字典
  4. angular 注入器配置_Angular2 多级注入器详解及实例
  5. SSD磁盘测试不达标排查
  6. Audition 如何录制电脑内部声音
  7. 点击折叠菜单(HTML/CSS/JS)
  8. MFC 控件清除内存
  9. spring 实现小程序抖音去水印后台
  10. 强烈推荐这款能探测别人工资的黑科技!秀的我头皮发麻
  11. BI工具怎么选型--BI厂商有哪些--BI系统多少钱--BI工具2019排行
  12. Java 读取jpeg图片 Unsupported Image Type 异常
  13. web前端之Vue——子组件的详解
  14. dll 不是 PML.NET callable问题解决办法
  15. DCloud之APP离线SDK升级步骤(3.5.3升至最新版3.6.7.81556_20221018)
  16. python绘制红色五角星_python绘制五角星
  17. oracle两个压缩包怎么解压,AIX下如何解压缩zip文件
  18. 世界著名人工岛,中国有三个很多人都不知道?
  19. 爆炸的符卡洋洋洒洒 (01背包
  20. Foxmail客户端添加163账号和邮件备份163邮箱

热门文章

  1. esp32-cam的原理图
  2. FlashFTP工具的自动缓存服务器目录的功能
  3. 【原创】 PostgreSQL 实现MySQL 的auto_increment 字段
  4. JavaScript疑难杂症系列-事件循环
  5. vue 删除数组元素
  6. 在DevExpress中使用CameraControl控件进行摄像头图像采集
  7. jQuery-替换和删除元素
  8. Ubuntu nfs配置
  9. 如何利用线框图展示初期产品
  10. jQuery MD5加密