UDP IPv4广播地址计算(附Node.js示例代码)
文章目录
- 目的
- 计算方法
- 示例代码
- 代码演示
- 总结
目的
UDP广播是比较常用的一种功能,应用方面来说经常用在设备发现等功能中。UDP广播需要知道广播地址,这篇文章将介绍通过IPv4地址和子网掩码来计算广播地址。
IPv6是没有广播的。想想看IPv6中一个网段内这么多节点广播就是灾难。
计算方法
广播地址计算方法如下:
广播地址 = IP地址 按位或 ( 按位取反 ( 子网掩码 ) )
下面是一组数据可以用来计算验证:
原始表达 | 二进制表达 | |
---|---|---|
IP地址 |
172.16.1.115
|
10101100.00010000.00000001.01110011
|
子网掩码 |
255.255.252.0
|
11111111.11111111.11111100.00000000
|
子网掩码按位取反 |
00000000.00000000.00000011.11111111
|
|
广播地址 |
172.16.3.255
|
10101100.00010000.00000011.11111111
|
有一种说法是使用 255.255.255.255
作为广播地址,但这是不正确的。如果设备上有多个网络接口,接入了多个网络的话使用这个地址广播结果可能就会不符合预期了。正确的做法是对接入的各个网络单独计算其广播地址。
示例代码
下面代码可以用来获取计算电脑上所有IPv4类型的网络接口的广播地址:
const os = require('os');function getBroadcastAddress() {const broadcastAddress = new Set(); // 使用Set来保存广播地址可以自动去重// 获取网络接口信息// 返回结果结构:{a:[{ ... }, ...], b:[{ ... }, ...], ...}let interfaces = os.networkInterfaces();// 遍历获取需要的网络接口信息for (const key in interfaces) {for (const interface of interfaces[key]) {// 该接口是IPv4,且不是内部回环地址(对于IPv4而言回环地址为127.0.0.1)if (interface.family === 'IPv4' && !interface.internal && interface.address !== '127.0.0.1') {// 将IP地址和子网掩码各自切成四个字段,方便下面计算广播地址let slices = [interface.address.split('.'), interface.netmask.split('.')];let fields = []; for (let i = 0; i < 4; i++) {// 广播地址 = IP | (~MASK)fields[i] = String(Number(slices[0][i]) | ((~Number(slices[1][i])) & 0xff));}// 拼合广播地址为字符串形式并存入SetbroadcastAddress.add(`${fields[0]}.${fields[1]}.${fields[2]}.${fields[3]}`);}}}return broadcastAddress;
}
代码演示
因为工作原因我的电脑上有非常多的实体的或是虚拟的网卡,下面是我电脑上部分网络情况:
下面使用代码来计算获取广播地址:
计算得到广播地址分别为 192.168.56.255
172.27.255.255
192.168.31.255
。
总结
UDP IPv4广播地址计算并不复杂,只要拿到IP地址和子网掩码就行,一般这两个都是比较好获取的。
UDP IPv4广播地址计算(附Node.js示例代码)相关推荐
- WebStorm 打开Node.js的代码提示功能
Node.js coding assistance is disabled,Suggests configuring coding assistance for Node.js core module ...
- RabbitMQ Node.js 示例
RabbitQM 处理和管理消息队列的中间人(broker).可简单理解为邮局,你在程序中写好消息,指定好收件人,剩下的事件就是 RabbitMQ 的工作了,它会保证收件人正确收到邮件. 任何发送邮件 ...
- 使用 husky 和 lint-staged 检查 Node.js 的代码一致性
在软件开发过程中,代码风格检查(Code Linting)是保障代码规范和一致性的有效手段.过去,Lint 的工作一般在 Code Review 或者 CI 的时候进行,但这样会导致问题的反馈链,浪费 ...
- node.js 后台代码怎么部署到服务器上?
服务器先安装node 安装node,进入到想要把node下载到的那个文件夹下.本文是/usr/local cd /usr/local wget https://nodejs.org/dist/v8.9 ...
- c语言触屏滑动图片,微信小程序左右滑动切换图片酷炫效果(附效果)(示例代码)...
开门见山,先上效果吧!感觉可以的用的上的再往下看. 心动吗?那就继续往下看! 先上页面结构吧,也就是wxml文件,其实可以理解成微信自己封装过的html,这个不多说了,不懂也没必要往下看了. 1 2 ...
- JDY-40无线模块的使用(透传、参数设置) 附Arduino 简单示例代码
目录 1.如何与单片机(串口模块)连接? 2.如何在USB转串口模块调试? 3.如何用Arduino 对JDY-40设置参数(其他单片机也可参考,需要自己写代码)? 4.两个模块之间如何通信(透传)? ...
- Apache Ignite的Node.js客户端使用入门
为什么80%的码农都做不了架构师?>>> 介绍 Ignite原生提供了若干种主要编程语言的支持,最近,还通过瘦客户端技术对其它的编程语言提供了支持,其中在2.7版本中新增加的瘦 ...
- 2019 年,19 种方法让自己成为更好的 Node.js 工程师
原文作者:Yoni Goldberg 译者:UC 国际研发 Jothy 写在最前:欢迎你来到"UC国际技术"公众号,我们将为大家提供与客户端.服务端.算法.测试.数据.前端等相关的 ...
- 什么是node网站服务器,node.js
Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动.非阻塞式I/O模型,[1] 让JavaScript 运 ...
最新文章
- Android4.2以及最新SDK的尝鲜使用
- 向Window窗体发送消息,控制程序的运行.
- php 字符串与数字相加,注意!PHP中字符串与数字的比较
- Angular相关的有价值的问题集锦
- java inireader_java读取配置文件 Java中如何设置读取ini配置文件?
- laravel框架之自帶登錄註冊
- matlab实时系统时间,转--MATLAB——时间,日期及显示格式
- 001-为什么Java能这么流行
- python字典操作首字母与星期的对应_python小课堂10 - 基本数据类型终篇集合和字典...
- IE Cookie 文件格式
- 程序员的自我修养 - 符号修饰 函数签名 以及一个引申的问题: extern c
- 并发(二)——linux内核同步机制分析
- 马哥 python培训
- 开源可视化bi工具有哪些,干货推荐
- vue中的横向排列_vue + ElementUI 的横向表格代码
- Android应用获取设备序列号
- DOSBOX + MASM
- cmd中的循环语句for
- docker对已经启动的容器添加目录映射(挂载目录)
- 2D流体火焰,低精度测试。
热门文章
- Linux上基于 Golang 实现 KeyLogger 按键记录
- solidworks安装教程2021
- VC++多线程全面讲解
- YOLOv5的Tricks | 【Trick7】指数移动平均(Exponential Moving Average,EMA)
- 主域名和子域名简单易懂详细讲解
- 基于多特征时空图卷积网络的水运通航密度预测
- android不设密码装证书,安卓4.0不设置锁屏安装根证书教程
- FALSE/TRUE与false/true的区别
- O365用户发送邮件收到退信,故障码是:550 5.7.1 解决办法
- 手机投屏软件直播监控软件可以互联网远程控制