mac android sdk 路径怎样使自己的网络请求使用虚拟mac地址

Android M 如何获取 Wifi MAC地址 - 简书
Android M 如何获取 Wifi MAC地址
今天在撸代码时发现,之前能获取mac地址的方法在nexus 6上返回了“02:00:00:00:00:00”,进入设置查看mac地址,结果不相同,肯定有问题,于是就开始上网查资料一探究竟。原先获取mac地址的代码段:
6.0之前获取mac地址方法
对于在Android Mashmallow返回地址“02:00:00:00:00:00”,官方其实是有说明的:。
android 官方说明
然后就找到了,里面详细的介绍了一种方法获取。用Java获取设备网络设备信息的API——NetworkInterface.getNetworkInterfaces()——仍然可以间接地获取到MAC地址。
NetworkInterface.getNetworkInterfaces
注意:在使用上述代码时,记得添加以下权限:
使用NetworkInterface.getNetworkInterfaces在手机上的输出结果为:
猜想wlan0对应的mac地址应该就是我们要找的。既然NetworkInterface可以正常获取,那得好好看看它在 Android framework 中的实现源码:
原来MAC地址是直接从"/sys/class/net/" + name + "/address"文件中读取的!这个name是什么呢?继续翻源码:
可以看出/sys/class/net目录下的一个文件夹即对应一个NetworkInterface的name。
从路由器上在线设备的MAC地址列表,可以验证我这台设备Wifi的name是wlan0那么读取文件/sys/class/net/wlan0/address就轻松得到了这台设备的MAC地址:
不出所料!进而,问题又变成如何获取设备的Wifi的interface name?回到开头,我们是通过context.getSystemService(Context.WIFI_SERVICE)获取的WifiManager。而WifiManager肯定是与远程系统服务的IBinder在交互,而系统服务都是在SystemServer.run()中被启动的。在SystemServer.java中搜索关键字”WIFI_SERVICE”,很容易便找到mSystemServiceManager.startService(WIFI_SERVICE_CLASS);顺藤摸瓜,又找到系统服务实现类com.android.server.wifi.WifiService,WifiService中的逻辑很简单,构造真正的实现类com.android.server.wifi.WifiServiceImpl对象并注册到系统服务中:
WifiService.java
打开WifiServiceImpl.java,从构造方法处,一眼就看到了关键代码:mInterfaceName = SystemProperties.get("wifi.interface", "wlan0");
如此这般终于找到定义设备的Wifi的interface name的地方:SystemProperties通过adb可以很容易得到这个属性值:adb shell getprop wifi.interface那么在我们应用里可以通过Java的反射获取SystemProperties,进而调用静态方法get即可拿到Wifi的interface name。如果是系统应用,可以直接添加下面的权限,之前的方法仍旧可以返回正确的mac地址:
Life is short,make it worth.在Android的开发调试过程中,特别是针对网络编程的情况,很多时候我们希望能够对Android的网络请求进行抓包,用来定位以及分析我们程序的问题。下面我介绍使用Fiddler对Android模拟器的网络请求进行抓包的方法。
Fiddler介绍
Fiddler是一个调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指,html,js,css等文件,这些都可以让你胡乱修改的意思)。
Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式。
安装使用Fiddler
下载安装Fiddler的方法这里就略过了,一路Next就行了。装好之后运行软件,正常情况这个时候我们已经可以对电脑的网络请求进行抓包了。Fiddler默认的代理地址是127.0.0.1,端口是8888。此时打开IE浏览器,默认是通过代理地址上网的,所以可以对所有网络访问抓包。
对Android模拟器网络请求抓包
我使用的Android模拟器是Genymotion模拟器,使用Android原生模拟器的朋友,其使用方法大体相同,不同之处会标明。
1.打开模拟器设置(Settings),点击Wi-Fi。
模拟器设置界面
2.长按WiredSSID,选择Modify network(修改网络)
修改网络设置
3.勾上Show advanced options,输入代理服务器地址和端口(关键)。
输入代理地址
注意:代理地址和端口的设置是关键,Genymotion模拟器中ip为10.0.3.2,Android模拟器中ip为10.0.2.2,端口为FIddler监听的端口,默认为8888,最后保存确认。
Android模拟器网络请求抓包测试
经过以上的设置,Fiddler就可以抓包到Android模拟器的网络请求了。使用Android原生浏览器打开网页,测试通过。
测试Android网络访问
Fiddler抓包结果
今天的介绍就到此为止了,以上只是Fiddler的基本使用,其实还有域名过滤呀之类的,朋友们可以在使用的过程中自己摸索,我后面会再写一篇更加详细的Fiddler使用介绍,觉得有用的朋友请点个赞,谢谢!
本文已收录于以下专栏:
相关文章推荐
利用Fiddler对Android模拟器网络请求进行抓包
字数685 阅读1;评论5 喜欢14
在Android的开发调试过程中,特别是针对网络编程的情况,很多时候我们希望能够...
在Android的开发调试过程中,特别是针对网络编程的情况,很多时候我们希望能够对Android的网络请求进行抓包,用来定位以及分析我们程序的问题。下面我介绍使用Fiddler对Android模拟器的...
在Android的开发调试过程中,特别是针对网络编程的情况,很多时候我们希望能够对Android的网络请求进行抓包,用来定位以及分析我们程序的问题。下面我介绍使用Fiddler对Android模拟器的...
抓包方法主要介绍Android及IPhone手机上如何利用Fiddler进行网络数据抓包,比如我们想抓某个应用的网络通信请求就可以利用这个方法。相对于tcpdump配合wireshark抓包的优势在于...
作者:程序员小冰 (转载请说明出处)博客地址:http://blog.csdn.net/qq_大家都知道抓包的方法很多。我这里给大家介绍介绍一种,利用fiddler进行抓包,当然比如W...
web开发中Chrome、IE、firefox等浏览器都自带提供了插件帮助开发者跟踪http数据,在手机客户端怎么实现http数据抓包呢?Fiddler可以实现真机调试抓包。Fiddler支持Any
主要介绍Android及IPhone手机上如何利用Fiddler进行网络数据抓包,比如我们想抓某个应用(微博、微信、墨迹天气)的网络通信请求就可以利用这个方法。
Mac 下请使用 Ch...
【转自:/android/android-network-sniffer/】
主要介绍Android及IPhone手机上如何利用Fiddler进行网络数据抓...
Android利用Fiddler进行网络数据抓包
主要介绍Android及IPhone手机上如何利用Fiddler进行网络数据抓包,比如我们想抓某个应用(微博、微信、墨迹天气)的网络通信请求就可以利用这个方法。
Mac 下请使用 Ch...
他的最新文章
讲师:王哲涵
讲师:王渊命
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)通过InetAddress.getLocalHost()得到始终是&127.0.0.1&,要想得到真正的网络ip地址要通过下面的方法:
首先新建一个工程,修改AndroidManifest.xml文件增加用户权限,如下:
&uses-permission android:name="android.permission.INTERNET"/&
&!--必写--&
&uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/&
&uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /&
&uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/&
&!--必写&&
&uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /&
主要函数代码如下:
// 得到本机ip地址
public String getLocalHostIp()
String ipaddress = "";
Enumeration&NetworkInterface& en = NetworkInterface
.getNetworkInterfaces();
// 遍历所用的网络接口
while (en.hasMoreElements())
NetworkInterface nif = en.nextElement();// 得到每一个网络接口绑定的所有ip
Enumeration&InetAddress& inet = nif.getInetAddresses();
// 遍历每一个接口绑定的所有ip
while (inet.hasMoreElements())
InetAddress ip = inet.nextElement();
if (!ip.isLoopbackAddress()
&& InetAddressUtils.isIPv4Address(ip
.getHostAddress()))
return ipaddress = "本机的ip是" + ":" + ip.getHostAddress();
catch (SocketException e)
Log.e("feige", "获取本地ip地址失败");
e.printStackTrace();
// 得到本机Mac地址
public String getLocalMac()
String mac = "";
// 获取wifi管理器
WifiManager wifiMng = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfor = wifiMng.getConnectionInfo();
mac = "本机的mac地址是:" + wifiInfor.getMacAddress();
我是天王盖地虎的分割线&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
获取MAC地址.zip
转载请注明出处:
阅读(...) 评论()内容简介:
Android系统平板电脑/手机的Wi-Fi 的 MAC 地址,对于普通用户,很少能用得着。只要我们能够通过无线信号,
接入 Wi-Fi 进行无线连接就好。其实,Wi-Fi 的 MAC 地址 就是该无线设备接口的地址。步骤...
最新下载:
安卓教程热点

我要回帖

更多关于 android sdk mac 下载 的文章

 

随机推荐