找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 4977|回复: 6

shell脚本操作mac地址加减

[复制链接]
发表于 2017-6-20 16:59 | 显示全部楼层 |阅读模式
最近做9531项目,发现用以前的patch,2G,5G的wifi无线mac地址不对,所以想自己写一个脚本来修改mac地址。在eth1的mac地址基础上加1.这个就需要用shell脚本来实现了。
这个函数传一个参数,是mac增加的量,函数里在参数基础上再加1
  1. mac_add_with_parameter()
  2. {
  3. local count = $( expr $1 + 1 )
  4. local eth1_mac = $(cat /sys/class/net/eth1/address)
  5.        
  6. local machex=$( echo "$eth1_mac" | tr -d ':' ) # to remove colons(:)
  7. local macdec=$( printf "%d\n" 0xC4B9837FFFAC ) # to convert to decimal  
  8. local macdec1=$( expr $macdec + $count ) # to subtract one   
  9. local machex1=$(echo $macdec1 |awk '{printf("%x\n", $0)}') # to convert to hex again
  10. local machex2=$(echo $machex1 | sed 's/\(..\)/\1:/g;s/:$//' ) # add :
  11. echo "$machex2"
  12. }
复制代码


评分

参与人数 1恩山币 +1 收起 理由
muzhi + 1 强大的恩山!(以下重复1万次)

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2017-6-20 20:05 | 显示全部楼层
上面没有注意那个十六进制转十进制那里的mac地址我没修改。修改完了是这样的
  1. mac_add_with_parameter()
  2. {
  3. local count = $( expr $1 + 1 )
  4. local eth1_mac = $(cat /sys/class/net/eth1/address)
  5.         
  6. local machex=$( echo "$eth1_mac" | tr -d ':' ) # to remove colons(:)
  7. local macdec=$( printf "%d\n" 0x$eth1_mac ) # to convert to decimal  
  8. local macdec1=$( expr $macdec + $count ) # to subtract one   
  9. local machex1=$(echo $macdec1 |awk '{printf("%x\n", $0)}') # to convert to hex again
  10. local machex2=$(echo $machex1 | sed 's/\(..\)/\1:/g;s/:$//' ) # add :
  11. echo "$machex2"
  12. }
复制代码
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2017-6-20 20:08 | 显示全部楼层
上面的程序在电脑的linux系统上面是运行正常的,但是在openwrt上面运行会出错。因为十进制转十六进制的时候,值太大了,计算不了。
可以用下面这个程序替代,但是下面这个程序有BUG,就是我只计算mac地址最后2位,如果mac地址最后两位是ff的话,就没有进位,
这种情况比较少,用用还是可以的。
  1. mac_add() {
  2.         local count=$( expr $1 + 1 )

  3.         local eth1_mac=$(cat /sys/class/net/eth1/address)
  4.         #echo "$eth1_mac"
  5.        
  6.         last_mac="${eth1_mac:15:2}"
  7.         #echo "$last_mac"
  8.         head_mac="${eth1_mac:0:15}"
  9.         #echo "$head_mac"
  10.         local macdec=$( printf "%d\n" 0x$last_mac)
  11.         #echo "$macdec"
  12.         local macdec1=$( expr $macdec + $count ) # to subtract one
  13.         #echo "$macdec1"
  14.         local machex1=$(echo $macdec1 |awk '{printf("%x\n", $0)}') # to convert to hex again
  15.         #echo "$machex1"
  16.        
  17.         mac_md="$head_mac""$machex1"
  18.         echo "$mac_md"
  19. }
复制代码
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2017-6-20 22:03 | 显示全部楼层
本帖最后由 zeng362424 于 2017-6-20 22:04 编辑

解决如果最后两位mac地址是ff,+1的话会超过ff,变成三位,mac地址就出错了。所以判断修改了一下。

  1. #!/bin/bash

  2. count=1

  3. eth1_mac="f8:aa:bb:cc:dd:ff"
  4. echo "$eth1_mac"
  5. last_mac=${eth1_mac:15:2}
  6. echo "$last_mac"
  7. head_mac="${eth1_mac:0:15}"
  8. echo "$head_mac"
  9. macdec=$( printf "%d\n" 0x$last_mac)
  10. echo "$macdec"
  11. macdec1=$( expr $macdec + $count ) # to subtract one
  12. if [ $macdec1 -gt 255 ]; then
  13.         macdec1=$( expr $macdec1 - 255 )
  14. fi
  15. echo "$macdec1"
  16. machex1=$(echo $macdec1 |awk '{printf("%02x\n", $0)}') # to convert to hex again
  17. echo "$machex1"

  18. mac_md="$head_mac""$machex1"
  19. echo "$mac_md"
复制代码


我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2017-6-20 23:08 | 显示全部楼层

虽好像用不到,但还是谢谢楼主的分享!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2019-3-20 10:35 | 显示全部楼层
十分感谢  找遍百度谷歌 才发现大恩山有如此大神 shell处理mac地址的思路帮了我大忙  万分感谢分享

点评

恭喜楼主重复造轮子 OpenWrt 中其实已经有相关函数 文件在,/lib/functions/system.sh,使用前 source 一下即可,函数名打开文件看  详情 回复 发表于 2019-3-20 11:14
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2019-3-20 11:14 来自手机 | 显示全部楼层
muzhi 发表于 2019-3-20 10:35
十分感谢  找遍百度谷歌 才发现大恩山有如此大神 shell处理mac地址的思路帮了我大忙  万分感谢分享

恭喜楼主重复造轮子
OpenWrt 中其实已经有相关函数
文件在,/lib/functions/system.sh,使用前 source 一下即可,函数名打开文件看
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-3-29 13:06

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表