MacOS下arp -a返回的短MAC地址是什么格式?如何转为标准格式?
MAC短格式说明
macOS属于BSD衍生系统,其内置的arp工具默认会对输出的MAC地址做简化展示:每个十六进制分段的前导0会被省略,例如00简化为0、07简化为7。这种短格式和标准MAC地址的语义完全一致,只是展示规则不同。
转换为标准双位分隔格式的方法
手动转换规则
- 按冒号把短格式MAC拆分为6个独立的十六进制分段
- 每个分段如果长度为1,在前面补1个0;长度为2则直接保留
- 用冒号把处理后的6个分段重新拼接,即可得到
FF:FF:FF:FF:FF:FF格式的标准MAC地址
示例:短格式0:22:7:4a:21:d5处理后得到标准格式00:22:07:4a:21:d5
批量自动转换命令
如果需要直接从arp -a的输出中提取标准格式MAC,可直接在终端执行以下awk命令:
arp -a | awk '{split($4,mac,":"); for(i=1;i<=6;i++) mac[i]=sprintf("%02x",("0x"mac[i])); print substr($2,2,length($2)-2), " -> ", mac[1]":"mac[2]":"mac[3]":"mac[4]":"mac[5]":"mac[6]}'
该命令会直接输出每行对应的IP地址和转换后的标准MAC地址。
常驻转换工具配置
如果经常需要做MAC格式转换,可将以下函数添加到~/.zshrc(zsh用户)或~/.bashrc(bash用户)配置文件中:
mac2std() { echo $1 | awk -F ':' '{for(i=1;i<=NF;i++) printf "%02x%s", ("0x"$i), (i==NF?"\n":":")}' }
配置生效后,在终端执行mac2std [短格式MAC]即可直接输出对应的标准格式MAC,例如:
$ mac2std 0:22:7:4a:21:d5 00:22:07:4a:21:d5
内容的提问来源于stack exchange,提问作者asd12tgzxvbgt
相关产品推荐
相关产品推荐

