找回密码
 立即注册

QQ登录

只需一步,快速开始

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

shell脚本操作mac地址加减

[复制链接]
最近做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 收起 理由
mu*** + 1 强大的恩山!(以下重复1万次)

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
 楼主| | 显示全部楼层
上面没有注意那个十六进制转十进制那里的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.
回复

使用道具 举报

 楼主| | 显示全部楼层
上面的程序在电脑的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.
回复

使用道具 举报

 楼主| | 显示全部楼层
本帖最后由 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.
回复

使用道具 举报


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

使用道具 举报

十分感谢  找遍百度谷歌 才发现大恩山有如此大神 shell处理mac地址的思路帮了我大忙  万分感谢分享

点评

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

使用道具 举报

来自手机 | 显示全部楼层
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-4-27 13:02

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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

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