关于mac地址的浅显探究

前言

与好友修好了路由器,但是之前没有备份eeprom.bin,导致MAC地址丢失了。
寻找修改MAC地址的途中,探究一下MAC地址。

MAC科普

MAC地址可以比作网卡的身份证。

查看自身MAC地址

网线直连时,显示的是以太网网卡的mac地址。
连接WIFI时:

  1. 对于Windows PC,默认使用的是本机MAC,也就是无线网卡。
  2. 对于手机,默认使用随机MAC地址,我们一般把他叫做WLAN MAC

手机查看MAC地址

一般的手机,直接在WIFI页面就能看到自身对路由器暴露的MAC地址。(可能是随机MAC也可能是本机MAC,默认随机,一般都会显示)
但是我朋友的小米手机不能在WIFI页面看到MAC地址
我的一个比较老的手机,没有找到随机mac的选项,自始至终用的本机MAC。

手机,关于--状态信息,可以看到WLAN MAC和本机MAC
image

我们发现,即使取消保存WIFI,手机使用的随机地址依然固定。

未经过详细论证,我们可以猜测,手机的随机mac是根据自身MAC以及WIFI的SSID,经过某种算法进行映射,得出一个MAC地址。简而言之,他可能是一种单向加密。

Windows查看MAC地址

连接网络的情况下,直接查看对应网络的属性即可。以下是通用的方法。

Win+X,a。打开Powershell

Get-NetAdapter

下面的马赛克部分就是mac地址
image

或者

ipconfig -all

或者
win+q,输入系统信息,打开后,在左侧按图找到适配器。
image

获取路由器MAC

windows获取路由器的MAC地址

arp -a 192.168.31.1

我们此处写的IP地址指定的是DNS主机,也就是路由器。

image

后面的图片是没有指定IP的情况,也就是执行arp -a所展示的,192.168.31.104是路由器分配
给主机的内网IPv4,刚好展示在最后的部分。(不指定ip会有很长的输出)

image

我对比了一下,虽然我们是通过WIFI连接的,但是这个获取的是LAN MAC而不是WLAN MAC

安卓手机以及linux获取路由器的MAC地址

需要Root权限。

安卓手机上没有arp命令,我们可以选用ip命令,大多数手机都自带。

以下是该命令的路径

/system/bin/ip

打开MT管理器的终端,输入如下命令。

su
ip neigh show

题外话: 也许有人会说,Termux中带有arp命令。不过Termux虽然好,他的命令默认情况下都是只能自己使用,如果切换成root用户,PATH变量就会变。
如果查看Termux中su命令的源码,会发现他是一个shell脚本,他在调用原命令前,覆盖了PATH环境变量。(然而直接执行/system/bin/su会发现PATH变量依然变了,实在不明白为什么,然而在MT管理器中没有这种情况)
那么想要使用Termux带的命令就得手动加PATH,对于本文章来说增加了不必要的复杂度,因此选用MT管理器的终端。而且MT管理器的市场占有率很高,我根据感受以及脑测,其在国内至少比Termux的用户量高一个量级。

路由器修改MAC地址

大致思路有两种:

  1. 使用breed内提供的修改
  2. 使用十六进制编辑工具,直接修改eeprom.bin文件(这里面存放MAC地址的信息)

看了几篇教程,发现不同牌子MAC地址的位置都是一样的。sn号好像不太一样。

https://www.right.com.cn/forum/thread-430518-1-1.html
https://www.right.com.cn/forum/thread-221145-1-1.html

  • LAN MAC 我们将其设为x
  • WAN MAC x+1
  • RF1 WLAN MAC 不确定,红米4A千兆版是 x+2。
  • RF2 WLAN MAC 不确定,红米4A千兆版是 x+3。

比较重要的是LAN和WAN的MAC。

  • LAN MAC是我们用arp命令能够看到的MAC,也就是路由器暴露给外界的MAC
  • WAN MAC是路由器背面标签上面写的MAC值。

BSSID

红米4A千兆版为例子,RF1是2.4Ghz WIFI MAC
经我后期思考,RF1和2分别对应2.4Ghz和5Ghz的无线网的BSSID

什么是BSSID

进过无线网后台的都知道,无线网名称(SSID)是可以随便设置的,那么我们发射的无线网络就有一定的概率和其他人的网络名称完全相同。那么使用SSID来分辨WIFI无线网络就是不严谨的了,这在一些特定情境下会有不方便的情况。BSSID就解决了这个问题。
BSSID本质上就是MAC地址,作用也是一样的,作为身份证而存在。

获取BSSID

Windows获取BSSID

连接WIFI后,打开powershell。

netsh wlan show interfaces

此处的物理地址,是本机的网卡MAC物理地址,或者是随机生成的。总之,是本机向外暴露的MAC地址,和路由器以及WIFI无关

image

linux获取BSSID

需要使用iwconfig命令
以Ubuntu为例:

# 安装应用包(包含上面的命令)
apt install wireless-tools
iwconfig

或者安装iw,用iw获取也行。

安卓获取BSSID

很遗憾,安卓系统中没有内置的工具可以看到信息
DevCheck这个软件可以看到WIFI的BSSID,而且看样子不需要root。
下面的不用看了,折腾半天才发现软件就能解决。

后面的操作需要Root权限。
下载安装并打开Termux

# 订阅root存储库
pkg i root-repo
# 安装对应工具
```bash
pkg i iw

查看无线网卡列表,找到对应的网卡,有ssid字段。
如果是中文的,ssid的中文部分会转化为十六进制(前缀\x去掉,然后用十六进制解码就能得到原来的中文。)

sudo iw dev

image

手机上一般无线网卡都叫做wlan0,上面这步不执行也没啥问题。

sudo iw dev wlan0 link

image
connect to后面跟的就是BSSID。

题外话: iwconfig不知为何,在某些设备上获取不到信息(即使直接su切换用户),因此采用了iw命令。

热点的MAC地址

一台机器开热点时,我们可以把他看作是一台路由器,于是自然而然也有MAC地址

手机热点的MAC地址

每次开关手机热点,获取到的MAC地址不同,即使热点名称不变。

Windows热点的MAC地址

无论开关还是改名称,MAC都没变,但是这个MAC是应该是随机出来的。(类似于上面手机的WIFI随机MAC)

posted @ 2024-12-07 02:44  魂祈梦  阅读(618)  评论(1)    收藏  举报