最近高通平台Android5.1项目中有个关于设置以太网MAC的需求,大致流程是windows写到一块flash片区去保存序列号和以太网MAC地址,然后Android客户端通过相关接口去读取该字符串并加以显示,需要将其MAC地址同步到Android系统中MAC地址。

首先我加了个设备信息显示序列号和以太网的应用程序,通过LOCAL_JAVA_LIBRARIES加载所需要加载的相关接口库,然后再manifest中通过加载相关声明(注:此声明在application节点下)。这样一来我们的应用层可以正常读取相关flash片区的保存的内容了。

那么后面问题来了,我们如何同步Android系统内的保存的以太网的MAC地址呢?通过网上查询相关资料文献发现,我们可以通过执行相关Linux命令得到结果。通过串口执行相关命令发现如下命令是可以有效的修改Android5.1的/sys/class/net/eth0/address内保存的地址的:

netcfg(ifconfig) eth0 down

netcfg eth0 hwaddr 10:10:10:10:10:10

netcfg(ifconfig) eth0 up

所以通过增加Java代码执行这三条命令即可:

private void executeCMD(String cmd){

try {

Log.w(TAG, "cmd= " +cmd);

Runtime runtime = Runtime.getRuntime();

Process proc = runtime.exec(cmd);

} catch (IOException e) {

Log.w(TAG, "exe fail!!!!");

e.printStackTrace();

}

}

我们依次执行上述三条linux命令应该就可达到我们的需求。Okay,基本逻辑已经完成,下面进入调试阶段,笔者调试的是项目中的产品MSM8909 Android5.1的一款平板电脑。当我们编译结束后,通过运行应用程序查看日志发现我们的应用确实已经读取到了保存的序列号和MAC地址,可是后面设置系统MAC地址时报了Permission Denied!那么这样一来,就进入了Android权限的赋予和调试的阶段。首先,我们需要给我们的apk是system apk,于是我将其放到系统/system/app下,后面运行发现仍然报IOExeption:Permission Denied!那么后面我在manifest中加入了android:sharedUserId="android.uid.system"让其运行的进程uid为system,然后需要给其签名platform证书,我也对其进行了相关的签名。后面抱着满满的信息去调试的时候发现又有新的权限异常,后面便进入了Adnroid5.1引入的SElinux相关的权限调试当中,过滤有效日志如下:

avc: denied { net_admin } for capability=12 scontext=u:r:system_app:s0 tcontext=u:r:system_app:s0

tclass=capability permissive=0

如此avc权限问题一般都是selinux相关的问题所在,selinux中我们的解决思路就是缺什么权限我们就加什么权限,这样至少不会导致权限的乱序了。关于selinux的赋权都在源码目录/external/sepolicy/文件下进行代码编辑,下面我们顺藤摸瓜找到我们的system_app的权限配置文件(system_app.te),加上对日志的理解我们尝试着加入为我们的apk赋权的语句:

allow system_app system_app:capability { net_admin };

对于此语句的语法我们可以网上百度或者参照原本有的内容进行理解,allow后面跟的几个参数分别是scontext(表示一个group),后面跟上需要为此组所添加的权限,分别是tcontext和tclass和权限的名称(关于权限的分类我们可以参考out/target/product/msm8909/obj/ETC/sepolicy_intermediates/policy.conf相关即可。好了,做完这步我们需要重新编译内核bootimage进行烧写。抱着满满的自信心进行编译,结果发现天哪竟然编译不过,看看服务器报的错误信息发现,也就是说在app.tc中不允许添加类似的capability相关类的权限,我们进入app.tc中发现如下语句:

neverallow { appdomain -bluetooth } self:capability *;

初步的理解是绝不能允许appdomain除了是bluetooth group的,而我们的system_app.tc中恰好定义了appdomain,那么我们大胆的理解我们可以在app.tc中将我们的group也加进去就行啦。于是就有下面的修改:

neverallow { appdomain -bluetooth -system_app} self:capability *;

Okay , 大功告成,再次对内核进行编译。哈哈,竟然编译通过了,这时候感觉比之前的每次调试都更加信心满满了。拷贝出bootimage后进行烧录,重启,运行,查看日志,netcfg查看以太网MAC地址。哈哈,Android系统的MAC地址已经改为我所读出来的MAC地址了,此项需求圆满结束!

通过此次的需求变更,这让我对Android5.1的SElinux又有了更加深层次的认识了。遇到问题,不慌不忙,我们慢慢的分析问题,定位问题,解决问题(离不开对日志的重要信息的提取和理解)。

android 修改以太网mac地址_Android5.1修改以太网MAC地址(SElinux)相关推荐

  1. mac office2019 瘦身_WiFiSpoof for Mac(Mac地址修改工具)

    WiFiSpoof Mac特别版是一款Mac平台上的Mac地址修改工具,有了这款软件您将可以快速通过MenuBar或热键更改你的mac地址了,WiFiSpoof Mac可以轻松实现新MAC地址输入.一 ...

  2. Mac OS 命令行修改IP地址

    1.查看网络服务 # networksetup -listallnetworkservices Ethernet 以太网 # ifconfig 查看网卡名称 2. 设置IP地址 # networkse ...

  3. 修改mac地址_交换机工作基础——MAC地址表的构成与安全

    SW转发流程 拓扑 1---MAC地址表老化时间调整 修改SW-1的MAC地址表老化时间为10000S [SW-1]mac-address aging-time 10000 //修改本SW的动态MAC ...

  4. 网关屏蔽mac地址,linux下修改mac地址方法

    局域网里有一台机器,同一网段内的机器,只有部分能够ping通,也无法ping通网关,现象很奇怪,尝试过修改IP,重启网络服务,都无法解决问题. 最后怀疑是不是网关将该机器mac地址给屏蔽掉了,因此修改 ...

  5. linux脚本自动修改网卡,Linux脚本程序自动修改网卡配置文件中的MAC地址

    在玩Linux虚拟机的时候,一个安装好linux系统的virtual HDD会用于创建多个虚拟机,这样就不需要在创建每个虚拟机都安装一遍系统了.virtual HDD加载到虚拟机后,新的虚拟机的MAC ...

  6. 服务器怎么修改mac地址怎么办,服务器修改mac地址重启后会恢復原mac吗?

    个人认为改不改回去无所谓,只要你在你们那个局域网内是唯一的就可以了.反正他就是一个48比特的一个组合,就跟IP地址一个道理,那只是他一个名字而已.确保网内唯一就OK.如果你是上网绑定了MAC地址,那你 ...

  7. linux服务器远程修改mac地址,linux下修改MAC地址问题解决方法

    linux下修改MAC地址问题解决方法 作者:佚名 来源:网络整理 2013-4-17 在linux中,修改MAC地址 # ifdown eth0 # ifconfig eth0 hw ether 1 ...

  8. 锐捷客户端认证失败:用户物理MAC地址已被修改问题的解决方案

    在校园内使用锐捷客户端认证总会出现[认证失败:用户物理MAC地址已被修改]的问题,只需简单几步,即可正常认证. Step 1:下载锐捷客户端(任意学校的,西安邮电大学内使用闽南师范大学锐捷客户端进行认 ...

  9. linux电脑mac地址修改不了怎么办,linux下修改MAC地址问题解决方法

    在linux中,修改MAC地址 # ifdown eth0 # ifconfig eth0 hw ether 12:34:56:78:90:12 (修改的MAC地址跟原来的地址不同) # ifup e ...

  10. 2003服务器修改网卡mac,网卡MAC地址修改神器 修改MAC地址、一键更换网卡MAC地址信...

    网卡MAC地址修改神器支持Win XP,Win7,Win200,Win2003等并自动读取本机网卡所有列表信息,可自动生成随机网卡MAC地址,软件全自动禁启用网卡,可以全自动扫描网卡地址,修改多处网卡 ...

最新文章

  1. @bzoj - 4384@ [POI2015] Trzy wieże
  2. 网易云信获中国IM云服务领域首个CSA STAR认证
  3. 新手教程:用像素游戏制作大师MV开发游戏(一)
  4. ASP.NET Core在 .NET Core 3.1 Preview 1中的更新
  5. 判断是否存在此对象_JVM的垃圾回收机制,判断对象是否死亡
  6. 除了 Tensorflow、PyTorch ,还有哪些深度学习框架值得期待?
  7. Myeclipse修改设置Default VM Arguments
  8. 【鲲鹏 DevKit黑科技解读】│如何实现全链路系统问题90%精准诊断?
  9. 留言系统 php 防攻击,php 留言板防刷新
  10. 快速发布发包平台技术论坛
  11. warning C4996 sprintf This function or variable may be unsafe
  12. java怎么实现直方图均衡化_直方图均衡化原理与实现
  13. C语言设计模式——简单工厂模式
  14. 2021年T电梯修理免费试题及T电梯修理试题及解析
  15. mysql recordcount_[已解决]为什么RecordCount的值为-1??
  16. 美团2017校园招聘编程题
  17. 认识电信产品生命周期管理PLM及其PLM服务
  18. R语言和Julia以及Python使用Feather包共享数据
  19. 群晖Synology DS918+使用笔记-基础篇
  20. 计算机向u盘拷贝速度慢,U盘复制速度慢的解决措施

热门文章

  1. 百度联盟广告代码php,仿百度联盟对联广告实现代码
  2. 用户个人中心页面html5源码,橙色的商城个人中心全部页面模板html源码
  3. dell 7040m 黑苹果_王者做图显示器,戴尔(DELL)U2417全面介绍
  4. cloud2声卡_带你解惑HyperX Cloud2(飓风)和Alpha(阿尔法)的终极选择
  5. iphone 4 到iphone 6s plus的屏幕尺寸
  6. 完成网络传真,网络扫描。
  7. 找到某个关键字 同义词词林 python_读一读我——无废话Python(三)条件、循环、函数、表达式
  8. 从《华为的冬天》到AI的冬天 | 甲子光年
  9. Java多线程编程模式实战指南(一):Active Object模式
  10. 溜客php0day挖掘,【漏洞预警】PHP7被发现三个0day漏洞,其中一个还