获取MAC/IP地址

5,504 阅读2分钟

问题

前端能否获取本机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++写的,调用了与硬件交互的底层类库来实现的。