问题
前端能否获取本机MAC地址和IP地址,如果不能,为什么?
MAC地址
MAC地址,全称:Media Access Control Address
,中文翻译:媒体存取控制位址。也被称为物理地址、硬件地址、局域网地址或以太网地址。
格式
由12位16进制数组成,且每2位用一个冒号隔开:
ff:ff:ff:ff:ff:ff
如何查看
以Windows
系统为例,通过cmd打开的命令行窗口后,键入ipconfig/all
,回车后就会出现很多配置信息,其中就有物理地址,你可能也会发现,物理地址可能存在多个,这个说明你电脑有多个网卡,每个网卡上的MAC地址基本是唯一不变的。
它可以算作是计算机的物理属性,我们都知道,在TCP/IP协议和ISO网络分层模型中都存在MAC层,在这一层的寻址操作针对的就是MAC地址。
那前端能否获取MAC地址,我想应该是不能的,MAC地址是物理层面,前端的操作主要是通过JavaScript,你可能会想到Node.js,它提供的api是可以的。我们主要说的基于客户端浏览器,宿主变成浏览器,那对硬件信息的获取能力就非常有限了,主要就是一些浏览器和JavaScript本身的api了。
IP地址
IP地址,全称:Internet Protocal Address
。中文翻译:互联网协议地址。有时也称为网际协议地址。IP协议规定在互联网的世界中,需要给每台入网的计算机分配一个IP地址,它是可以动态变化的。
那JavaScript能获取吗?
同样,Nodejs是可以获取的。nodejs的OS操作系统模块提供了个方法networkInterfaces
返回的基本与ipconfig/all
列表一致,虽然返回的信息中包含了MAC地址和IP地址,但怎么确定当前机器正在使用的是哪个呢?没有字段来说明。
let os = require('os')
let interfaces = os.networkInterfaces()
console.log(interfaces)
// interfaces返回的字段有:
{
address: '127.0.0.1',
netmask: '255.0.0.0',
family: 'IPv4',
mac: '00:00:00:00:00:00',
internal: true,
cidr: '127.0.0.1/8'
}
这里仅仅说了前端能不能获取,如果概念仅局限宿主是浏览器,那就是不能了。nodejs之所以能,首先nodejs是用C++写的,调用了与硬件交互的底层类库来实现的。