android获取Mac地址和IP地址
- 格式:doc
- 大小:81.00 KB
- 文档页数:9
获取MAC地址和ip地址方法
一、获取本机MAC地址和ip地址方法:
方法一:
在桌面右下角找到“两个小电视”的图标(如果右下角没有,就在桌面右击“网上邻居”点属性,找到“本地连接”双击,也会出现本地属性状态窗口)
鼠标指向它右击---点状态
在状态窗口中点击“支持”标签
接着点击“详细信息”标签
实际地址就是MAC地址,其它信息还有ip地址,子网掩码,网关,还有dns服务器地址方法二:
点开始-运行,输入cmd,回车,然后输入:ipconfig(空格)/all 命令,回车,就一目了然的看到了
二、通过网络获取其它电脑MAC地址方法:
方法一:
点开始-运行,输入cmd,回车,然后输入:arp –a命令,回车,就看到局域网内所有电脑的MAC地址。
方法二:
点开始-运行,输入cmd,回车,然后输入:nbtstat -a 10.3.222.12 ,这样就可以查看某台具体机器的MAC地址(我这里举例查看的就是10.3.222.12这台机器的MAC地址)。
三、查看路由器MAC地址:
登录到路由器界面,找到状态,在状态中查看WAN口MAC地址。
大家看清楚,上报表中填写的路由器mac地址是要wan口的mac地址,而不是lan口的。
Android系统设备如何查看WiFi的MAC地址
安卓系统的平板电脑,在设置里面可以查看到Wi-Fi 的MAC 地址。
MAC(Media Access Control,媒体接入控制)地址是指定给接口的唯一编号,通常由接口卡制造商指定。
现在就来看一下吧!
步骤如下:
(1)在主屏幕上轻按“设置”按钮。
或者,按下物理按钮“Menu”,选择“设置”。
(2)在设置的列表下,轻按选择“关于本机”按钮。
(3)然后,轻按“状态消息”按钮。
(4)查看“Wi-Fi MAC 地址”。
在拨号键盘上查询的代码:
*#62209526# 查询WLAN MAC 地址
编者按:安卓系统平板电脑中Wi-Fi 的MAC 地址,对于普通用户,很少能用得着。
只要我们能够通过无线信号,接入Wi-Fi 进行无线连接就好。
其实,Wi-Fi 的MAC 地址就是该无线设备接口的地址。
如果您对教程内容有新的看法,或者没有找到您想要的教程,欢迎拿起手机,开启微信,扫描上面的微信二维码添加“手机世界”为您的微信好友,也可以在微信里搜“www3533com”,或关注新浪官方微博:/waptt私信联系我们。
获取设备信息——获取客户端ip地址和mac地址1、获取本地IP(有可能是内⽹IP,192.168.xxx.xxx)/*** 获取本地IP** @return*/public static String getLocalIpAddress() {try {Enumeration<networkinterface> en = NetworkInterface.getNetworkInterfaces();while (en.hasMoreElements()) {NetworkInterface ni = en.nextElement();Enumeration<inetaddress> enIp = ni.getInetAddresses();while (enIp.hasMoreElements()) {InetAddress inet = enIp.nextElement();if (!inet.isLoopbackAddress()&& (inet instanceof Inet4Address)) {return inet.getHostAddress().toString();}}}} catch (SocketException e) {// TODO Auto-generated catch blocke.printStackTrace();}return "0";}</inetaddress></networkinterface>2.获取⽹络ip,⽐上述⽅法更加精确,但是要异步执⾏。
public class GetLocalHostIP implements Callable<String>{private GetLocalHostIP(){super();}public static String getIP(){ExecutorService executorService = Executors.newCachedThreadPool();Future<String> localIP = executorService.submit(new GetLocalHostIP());String ip = null;try {ip = localIP.get();}catch (InterruptedException e){e.printStackTrace();}catch (ExecutionException e){e.printStackTrace();}if(ip == null || ip.startsWith("192.168")){return "10.142.92.242";}else{return ip;}}@Overridepublic String call() throws Exception {URL infoUrl = null;String ipLine = "";try {infoUrl = new URL("");BufferedReader in = new BufferedReader(new InputStreamReader(infoUrl.openStream()));ipLine = in.readLine();} catch (Exception e) {try {infoUrl = new URL("/");BufferedReader in = new BufferedReader(new InputStreamReader(infoUrl.openStream()));ipLine = in.readLine();} catch (Exception e2) {e2.printStackTrace();}}return ipLine;}}上述⽅法可以获取ip,但是获取速度较慢,对⽹速要求较⾼。
JAVA如何获取客户端IP地址和MAC地址在Java中获取客户端IP地址和MAC地址需要使用Java的网络编程API,具体步骤如下:1.获取客户端IP地址获取客户端IP地址有多种方法,下面介绍两种常用的方法。
方法1:使用`InetAddress`类的`getLocalHost`方法```javaInetAddress localIp = InetAddress.getLocalHost(;String ip = localIp.getHostAddress(;System.out.println("客户端的IP地址是:" + ip);```方法2:使用`HttpServletRequest`类的`getRemoteAddr`方法```javaString ip = request.getRemoteAddr(;System.out.println("客户端的IP地址是:" + ip);```获取客户端MAC地址需要通过运行操作系统的命令来获取,下面介绍一种通用的方法。
方法:使用`InetAddress`类的`getByName`方法和`NetworkInterface`类的`getHardwareAddress`方法```javaInetAddress localHost = InetAddress.getByName("localhost");NetworkInterface networkInterface =NetworkInterface.getByInetAddress(localHost);byte[] mac = networkInterface.getHardwareAddress(;// 将mac地址转换成字符串形式StringBuilder sb = new StringBuilder(;for (int i = 0; i < mac.length; i++)sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));String macAddress = sb.toString(;System.out.println("客户端的MAC地址是:" + macAddress);```需要注意的是,获取MAC地址的方法在不同的操作系统上可能有所不同,在Linux、Windows等操作系统上应该是可行的,但在部分其他操作系统上可能无法获取MAC地址。
android模拟器与pc,模拟器与模拟之间用socket进行通信和获得模拟器ip地址程序在本机上启动两个模拟器,本机(PC)和模拟器的信息如下:大家可以看到,两个模拟器的IP地址都是完全一样的,所以要实现两个模拟器之间的通信,使用模拟器的IP地址是办不到的。
获取模拟器名称:>adb devicesList of devices attachedemulator-5554 deviceemulator-5556 device模拟器提供了一个特殊的IP,此IP的地址为10.0.2.2,此IP地址可以说等同于PC本机的IP地址127.0.0.1 。
所以,通过此特殊IP地址,实现PC本机与模拟器的通信是没有问题。
【PC-SERVER / 模拟器-CLIENT】目的:通过7100端口跟服务器进行通信。
实施方法比较简单,直接按照下面的方法就可以了。
方法1:PC-SERVER:ServerSocket server = new ServerSocket(7100);模拟器-CLIENT:Socket socket = new Socket("192.168.1.3", 7100);方法2:PC-SERVER:ServerSocket server = new ServerSocket(7100);模拟器-CLIENT:Socket socket = new Socket("10.0.2.2", 7100);【模拟器-SERVER / PC-CLIENT】目的:连接到服务器的7100端口。
实施操作稍微复杂一些,不能按照前面的方法来进行。
要达到此目的,先要进行端口映射。
把本机端口TCP/6100映射到模拟器TCP/7100端口(UDP也是一样)。
>adb –s emulator-5554 forward tcp:6100 tcp:7100端口映射成功后,再进行下面的实验。
Android获得设备状态信息、Mac地址、IP地址的⽅法前⾔在APP开发时,经常会遇到要获取⼿机状态信息的场景,像升级时获取版本号,像发⽣异常时要收集⼿机信息等等。
有些软件还要根据Mac地址来判定当前⽤户以前是否登录过。
下⾯将⼀⼀介绍获取这些⼿机状态信息的⽅法。
1 通过build获取⼿机硬件信息运⽤反射获取Build信息,然后从build中得到对应字段的值。
这种情况适⽤于获取所有的build信息。
或者直接调⽤Build类直接拿⾥⾯的字段名,如:android.os.Build.MODEL; // ⼿机型号。
这是为了获取单独某个⼿机信息的⽅法,直接调⽤Build的字段即可拿到对应信息,简单快捷。
别忘了加权限<uses-permission android:name="android.permission.READ_PHONE_STATE"/>下⾯是Build类的字段所对应的信息String BOARD The name of the underlying board, like "goldfish".基板名String BOOTLOADER The system bootloader version number.String BRAND The brand (e.g., carrier) the software is customized for, if any.品牌名String CPU_ABI The name of the instruction set (CPU type + ABI convention) of native code.String CPU_ABI2 The name of the second instruction set (CPU type + ABI convention) of native code.String DEVICE The name of the industrial design.品牌型号名,如⼩⽶4对应cancroString DISPLAY A build ID string meant for displaying to the userString FINGERPRINT A string that uniquely identifies this build.包含制造商,设备名,系统版本等诸多信息String HARDWARE The name of the hardware (from the kernel command line or /proc).String HOSTString ID Either a changelist number, or a label like "M4-rc20".String MANUFACTURER The manufacturer of the product/hardware.String MODEL The end-user-visible name for the end product.String PRODUCT The name of the overall product.String RADIO The radio firmware version number.String SERIAL A hardware serial number, if available.String TAGS Comma-separated tags describing the build, like "unsigned,debug".long TIME 当前时间,毫秒值String TYPE The type of build, like "user" or "eng".String UNKNOWN Value used for when a build property is unknown.String USER//运⽤反射得到build类⾥的字段Field[] fields = Build.class.getDeclaredFields();//遍历字段名数组for (Field field : fields) {try {//将字段都设为public可获取field.setAccessible(true);//filed.get(null)得到的即是设备信息haspmap.put(field.getName(), field.get(null).toString());Log.d("CrashHandler", field.getName() + " : " + field.get(null));} catch (Exception e) {}}下⾯是⼩⽶4对应的设备信息D/CrashHandler: BOARD : MSM8974D/CrashHandler: BOOTLOADER : unknownD/CrashHandler: BRAND : XiaomiD/CrashHandler: CPU_ABI : armeabi-v7aD/CrashHandler: CPU_ABI2 : armeabiD/CrashHandler: DEVICE : cancroD/CrashHandler: DISPLAY : MMB29MD/CrashHandler: FINGERPRINT : Xiaomi/cancro_wc_lte/cancro:6.0.1/MMB29M/V8.1.3.0.MXDCNDI:user/release-keysD/CrashHandler: HARDWARE : qcomD/CrashHandler: HOST : c3-miui-ota-bd43D/CrashHandler: ID : MMB29MD/CrashHandler: IS_DEBUGGABLE : falseD/CrashHandler: MANUFACTURER : XiaomiD/CrashHandler: MODEL : MI 4LTED/CrashHandler: PRODUCT : cancro_wc_lteD/CrashHandler: RADIO : unknown//设备的序列号码-SERIALD/CrashHandler: SERIAL : abcdefghD/CrashHandler: SUPPORTED_32_BIT_ABIS : [ng.String;@76b6d2bD/CrashHandler: SUPPORTED_64_BIT_ABIS : [ng.String;@e42c588D/CrashHandler: SUPPORTED_ABIS : [ng.String;@9cdbb21D/CrashHandler: TAG : BuildD/CrashHandler: TAGS : release-keysD/CrashHandler: TIME : 1478606340000D/CrashHandler: TYPE : userD/CrashHandler: UNKNOWN : unknownD/CrashHandler: USER : builder2.通过getSystemService()来获取Ip地址Context.getSystemService()这个⽅法是⾮常实⽤的⽅法,只须在参数⾥输⼊⼀个String 字符串常量就可得到对应的服务管理⽅法,可以⽤来获取绝⼤部分的系统信息,各个常量对应的含义如下。
安卓手机怎么修改mac地址今天给大家带来的是修改安卓手机mac地址的方法,这个手机mac修改可是难倒了不少人,下面大家跟着店铺一起来了解一下安卓手机mac地址的修改方法吧。
安卓手机修改mac地址方法什么是MAC地址简单来说,每个能够接入网络的设备,无论是平板、手机、电脑、电视都有一个专门的序号,这个序号就被称为MAC,正常来说可以看做是这款设备的唯一标识,手机里的MAC其实是特指Wi-Fi无线网卡的MAC地址。
MAC地址一般长度为48位,通常表示为12个16进制数,每2个16进制数之间会用冒号隔开,比如03:03:30:3A:3B:3C就是一个MAC地址,其中前6位16进制数03:03:30代表网络硬件制造商的编号,而后3位16进制数3A:3B:3C代表该制造商所制造的某个网络产品(如网卡)的系列号。
每个网络制造商必须确保它所制造的每个以太网设备都具有相同的前三个字节以及不同的后三个字节,这样就可保证世界上每个以太网设备都具有唯一的MAC地址。
MAC地址与IP地址的联系和区别IP地址是指使用TCP/IP协议指定给主机的32位地址,由用点分隔开的4个8八位组构成,如192.168.1.101就是一个IP地址,现在有很多计算机都是通过先组建局域网,然后通过交换机和网络连接的,然后给每个用户分配固定的IP地址,由管理中心统一管理。
为了管理方便,就需要使用MAC地址来标志用户,防止发生混乱,明确责任(比如网络犯罪)。
MAC地址同IP地址的区别就在于,虽然他们在局域网中是一一对应的关系,不过IP地址是跟据现在的IPv4(还有IPv6)标准指定的,不受硬件限制比较容易记忆的地址,而Mac地址却是用网卡的物理地址,多少与硬件有关系,比较难于记忆。
为何要修改手机MAC地址前面我们说了,MAC地址相当于你的网络标识。
在局域网里,管理人员常常会将网络端口与客户机的MAC地址绑定,这种情况学校的校内网以及一些公司的网络环境中最为常见,方便管理,不过弊端是如果你的网卡坏了,换一张网卡必须向管理人员申请绑定新的MAC地址,比较麻烦。
关于无线设备MAC地址获取方法
文·王坤下面以最常见的三种系统为例介绍一下如何获取系统的mac 地址的方法。
第一种,也是我们最常用的windows操作系统,所有版本的微软操作系统都可以使用如下方法获取mac地址:
①、按下键盘上的徽标键(就是这个)+R或者是点击开始→运行,打开如下窗口:
②、在里面输入cmd,然后回车,打开如下窗口:
③、在黑色对话框中输入ipconfig/all,然后回车;
④、在上述对话框中找到“无线局域网适配器”或者“无线网络连接”等相关描述,然后找到对应的物理地址,即为该设备的无线mac地址
第二种,就是我们的手机,首先我们先介绍一下android系统获取mac地址的方法:
①、首先进入系统的【设置】,找到【WLAN】选项,点击进入,选择【高级】或者【高级设置】,在里面找到一项【mac】地址(如下图1所示)
注意:每个android手机的系统选项可能略有差异,高级设置选项可能需要按一下菜单选项才能找到。
图1
第三种,就是苹果手机,关于苹果手机的IOS系统获取mac 地址的方法很简单:
进入系统,点击【设置】→【通用】→【关于本机】→【无限局域网地址】
注意:关于【无线局域网地址】这个选项的描述,每个版本的手机可能略有不同,可能港版与美版显示的是wifi地址,国行一般显示的都是【无线局域网地址】。
如何查看自己手机的MAC地址
一、Android手机查看自己的mac地址:
1、首先打开手机的【设置】—【关于手机】—【状态信息】—查看mac地址。
2、同样打开手机的【设置】—【无线网络】—【高级设置】—查看mac地址。
详细请查看后面附一的图片。
二、Iphone手机查看自己的mac地址:
1、首先打开手机的【设置】—【通用】—【关于本机】—查看wifi地址。
详细请查看后面附二的图片。
按住ctrl+鼠标左键点击直接跳转到相应页面。
因为手机因为系统的不同,可能会有一点点不同,请各位咨询一下或者百度一下。
附一(andriod手机):
方法/步骤1
1、首先打开手机的【设置】——【关于手机】栏。
2、在关于手机页面点击——【状态信息】栏。
3、那么此时就可以在【WLAN MAC 地址】下查看到自己手机的MAC地址窜号了。
方法/步骤2
同时也可在【WLAN】下查看MAC地址。
1、同样打开手机——【设置】——【无线网络】——【WLAN】
2、进入WLAN页面后,触摸手机【菜单键】选择——【高级】
3、在WLAN高级设置界面也可查看到MAC地址窜号。
附二(iphone手机):
1、第一步,点击“设置” 图标
2、点击“通用” 按钮
3、点击“关于本机” 按钮
4、轻按屏幕向上滑动
?
5、WI-FI地址后边的那十二位就是MAC地址。
如何查看⼿机mac地址查询⼿机mac和IP地址的详细图⽂
教程
虽然⼿机MAC地址在⽇常⽣活中⾃⼰实⽤时不常⽤到,但⼿机也是像电脑⼀样的。
你现在点进来是因为要进⼊WIFI⽹络的IP限制设置吗?不管你是不是,下⾯教⼤家怎么查看⼿机的IP地址。
mac地址是什么
MAC(Medium/Media Access Control)地址,或称为 MAC地址、物理地址,⽤来表⽰互联⽹上每⼀个站点的标识符,采⽤⼗六进制数表⽰,共六个字节(48位)。
其中,前三个字节是由IEEE的注册管理机构RA负责给不同⼚家分配的代码(⾼位24位),也称为“编制上唯⼀的标识符”(Organizationally Unique Identifier),后三个字节(低位24位)由各⼚家⾃⾏指派给⽣产的适配器接⼝,称为扩展标识符(唯⼀性)。
⼀个地址块可以⽣成2^24个不同的地址。
MAC地址实际上就是适配器地址或适配器标识符EUI-48。
查询教程
1.进⼊⼿机设定中⼼,在⽹络和wlan⾥⾯,会有⼀个关于wifi设置的⾼级设置
2,从⽹络中⼼⾥⾯按功能键进⼊⾼级设定。
3.进⼊⾼级设定之后就会有MAC地址和ip地址了
当然,⼿机IP不肯能只是⼩编说的wifi IP限制那么的简单,还有很多的地⽅需要使⽤到⼿机的Ip和mac地址。
浅谈MAC地址作用及获取方法浅谈MAC地址的作用及获取方法(稽查一处赵强强)【摘要】电子取证就是指对存储在计算机系统或网络设备中潜在的电子证据进行识别、收集、保护、检查、分以及法庭出示的过程,相关技术包括IP地址和MAC地址的获取和识别技术、身份认证技术、电子邮件的取证和鉴定技术等。
本文主要说明MAC地址的作用及获取方法。
随着技术的发展,我们在工作中需要获取MAC地址的设备种类愈发丰富,既有常见的台式电脑、笔记本电脑,又有最近几年流行的智能手机和平板电脑等。
本文按照操作系统的不同,分别探讨了几种常规的MAC地址获取方法。
【关键词】电子取证MAC地址获取操作系统智能手机一、概述MAC地址(Medium/Media Access Control,介质访问控制),或称为逻辑地址,用来定义网络设备的位置,由48比特长,12位的16进制数字组成,0到23位是厂商向IETF等机构申请用来标识厂商的代码,也称为“编制上唯一的标识符”(Organizationally Unique Identifier)。
地址的24到47位由厂商自行分派,是各个厂商制造的所有网卡的一个唯一编号。
在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责MAC 位址。
MAC地址是保存在Network Interface Card(网卡,NIC)里的,通常是由网卡生产厂家烧入网卡的EPROM(一种闪存芯片,通常可以通过程序擦写),它存储的是传输数据时真正赖以标识发出数据的电脑和接收数据的主机的地址,因此一个网卡会有一个全球唯一固定的MAC地址,但可对应多个IP地址,也就是说,在网络底层的物理传输过程中,是通过物理地址来识别主机的,它是全球唯一的。
比如,主流的以太网卡,其物理地址是48bit(比特位)的整数,如:44-45-5A-C4-00-E0(一般以16进制的方式表示),以机器可读的方式存入主机接口中。
以太网地址管理机构IEEE(电气和电子工程师协会)将以太网地址,也就是48比特的不同组合,分为若干独立的连续地址组,生产以太网网卡的厂家就购买其中一组,具体生产时,逐个将唯一地址赋予以太网卡。
[转载]Android配置ip地址原⽂地址:Android配置ip地址作者:本拉耕busybox ifconfig eth0 up //启动eth0设备busybox ifconfig eth0 192.168.1.2 //更改ip地址netcfg eth0 dhcpbusybox route add default gw 192.168.0.1 netmask 0.0.0.0 eth0/system/bin/setprop net.dns1 (ip address)命令:ifconfig补充说明补充说明:ifconfig可设置⽹络设备的状态,或是显⽰⽬前的设置。
补充说明参数参 数: [⽹络设备] ⽹络设备的名称。
down 关闭指定的⽹络设备。
up 启动指定的⽹络设备。
-arp 打 参 数开或关闭指定接⼝上使⽤的ARP协议。
前⾯加上⼀个负号⽤于关闭该选项。
-allmuti 关闭或启动指定接⼝的⽆区别模式。
前⾯加上⼀个负号⽤于关闭该选项。
-promisc 关闭或启动指定⽹络设备的promiscuous模式。
前⾯加上⼀个负号⽤于关闭该选项。
add<地址> 设置⽹络设备IPv6的IP地址。
del<地址> 删除⽹络设备IPv6的IP地址。
media<⽹络媒介类型> 设置⽹络设备的媒介类型。
mem_start<内存地址> 设置⽹络设备在主内存所占⽤的起始地址。
metric<数⽬> 指定在计算数据包的转送次数时,所要加上的数⽬。
mtu<字节> 设置⽹络设备的MTU。
netmask<⼦⽹掩码> 设置⽹络设备的⼦⽹掩码。
tunnel<地址> 建⽴IPv4与IPv6之间的隧道通信地址。
-broadcast<地址> 将要送往指定地址的数据包当成⼴播数据包来处理。
-pointopoint<地址> 与指定地址的⽹络设备建⽴直接连线,此模式具有保密功能。
Androidshell命令查询ip,⽹关,DNS 查看所有⽹络信息C:\>adb shellroot@android:/ # netcfgnetcfgip6tnl0 DOWN 0.0.0.0/0 0x00000080 00:00:00:00:00:00gre0 DOWN 0.0.0.0/0 0x00000080 00:00:00:00:00:00eth0 UP 192.168.0.180/24 0x00001043 00:00:00:ec:0a:00sit0 DOWN 0.0.0.0/0 0x00000080 00:00:00:00:00:00lo UP 127.0.0.1/8 0x00000049 00:00:00:00:00:00tunl0 DOWN 0.0.0.0/0 0x00000080 00:00:00:00:00:00查看 eth0root@android:/ # ifconfig eth0ifconfig eth0eth0: ip 192.168.0.180 mask 255.255.255.0 flags [up broadcast running multicast]查看DNSroot@android:/ # getprop net.eth0.dns1getprop net.eth0.dns18.8.8.8root@android:/ # getprop net.eth0.dns2getprop net.eth0.dns28.8.4.4查看iproot@android:/ # ifconfig eth0 192.168.0.173 netmask 255.255.255.0ifconfig eth0 192.168.0.173 netmask 255.255.255.0root@android:/ # ifconfig eth0ifconfig eth0eth0: ip 192.168.0.173 mask 255.255.255.0 flags [up broadcast running multicast]设置⽹关root@android:/ # route add default gw 192.168.0.1 dev eth0route add default gw 192.168.0.1 dev eth0添加dnsroot@android:/ # setprop net.eth0.dns1 8.8.8.8setprop net.eth0.dns1 8.8.8.8root@android:/ # setprop net.eth0.dns2 8.8.4.4setprop net.eth0.dns2 8.8.4.4查询eth0配置root@android:/ # getprop | grep eth0getprop | grep eth0[dhcp.eth0.dns1]: [192.168.0.1][dhcp.eth0.dns2]: [][dhcp.eth0.dns3]: [][dhcp.eth0.dns4]: [][dhcp.eth0.gateway]: [192.168.0.1][dhcp.eth0.ipaddress]: [192.168.0.180][dhcp.eth0.leasetime]: [3600][dhcp.eth0.mask]: [255.255.255.0][dhcp.eth0.pid]: [13800][dhcp.eth0.reason]: [PREINIT][dhcp.eth0.result]: [failed][dhcp.eth0.server]: [192.168.0.1][dhcp.eth0.vendorInfo]: [][net.change]: [net.eth0.dns2][net.eth0.dns1]: [8.8.8.8][net.eth0.dns2]: [8.8.4.4]ifconfig eth0配置以下各值常见于所有的基本配置⽂件中:* DEVICE=name,这⾥name是物理设备的名字(动态分配的PPP设备应当除外,它的名字是“逻辑名”。
android获取Mac地址和IP地址获取Mac地址实际项目中测试了如下几种方法:(1)设备开通Wifi连接,获取到网卡的MAC地址(但是不开通wifi,这种方法获取不到Mac 地址,这种方法也是网络上使用的最多的方法)//根据Wifi信息获取本地Macpublic static String getLocalMacAddressFromWifiInfo(Context context){WifiManager wifi = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);WifiInfo info = wifi.getConnectionInfo();return info.getMacAddress();}(2)调用Linux的busybox,通过linux命令来获取//根据busybox获取本地Macpublic static String getLocalMacAddressFromBusybox(){ String result = "";String Mac = "";result = callCmd("busybox ifconfig","HWaddr");//如果返回的result == null,则说明网络不可取if(result==null){return "网络出错,请检查网络";}//对该行数据进行解析//例如:eth0 Link encap:Ethernet HWaddr00:16:E8:3E:DF:67if(result.length()>0 && result.contains("HWaddr")==true){ Mac = result.substring(result.indexOf("HWaddr")+6, result.length()-1);Log.i("test","Mac:"+Mac+" Mac.length: "+Mac.length());/*if(Mac.length()>1){Mac = Mac.replaceAll(" ", "");result = "";String[] tmp = Mac.split(":");for(int i = 0;i<tmp.length;++i){result +=tmp[i];}}*/result = Mac;Log.i("test",result+" result.length:"+result.length());}return result;}private static String callCmd(String cmd,String filter) { String result = "";String line = "";try {Process proc = Runtime.getRuntime().exec(cmd);InputStreamReader is = newInputStreamReader(proc.getInputStream());BufferedReader br = new BufferedReader (is);//执行命令cmd,只取结果中含有filter的这一行while ((line = br.readLine ()) != null &&line.contains(filter)== false) {//result += line;Log.i("test","line: "+line);}result = line;Log.i("test","result: "+result);}catch(Exception e) {e.printStackTrace();}return result;}(3)调用android 的API:NetworkInterface. getHardwareAddress ()该API的level为9,只有android 2.3以上才有该接口//根据IP获取本地Macpublic static String getLocalMacAddressFromIp(Context context) {String mac_s= "";try {byte[] mac;NetworkInterfacene=NetworkInterface.getByInetAddress(InetAddress.getByName(getLoca lIpAddress()));mac = ne.getHardwareAddress();mac_s = byte2hex(mac);} catch (Exception e) {e.printStackTrace();}return mac_s;}public static String byte2hex(byte[] b) {StringBuffer hs = new StringBuffer(b.length);String stmp = "";int len = b.length;for (int n = 0; n < len; n++) {stmp = Integer.toHexString(b[n] & 0xFF);if (stmp.length() == 1)hs = hs.append("0").append(stmp);else {hs = hs.append(stmp);}}return String.valueOf(hs);}其中getLocalIpAddress是获取本地IP地址//获取本地IPpublic static String getLocalIpAddress() {try {for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();en.hasMoreElements();) {NetworkInterface intf =en.nextElement();for(Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();enumIpAddr.hasMoreElements();) {InetAddress inetAddress =enumIpAddr.nextElement();if(!inetAddress.isLoopbackAddress()) {returninetAddress.getHostAddress().toString();}}}} catch (SocketException ex) {Log.e("WifiPreference IpAddress",ex.toString());}return null;}获取本地IP地址在网络上搜索一下,一般就有如下的代码://获取本地IPpublic static String getLocalIpAddress() {try {for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();en.hasMoreElements();) {NetworkInterface intf =en.nextElement();for(Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();enumIpAddr.hasMoreElements();) {InetAddress inetAddress =enumIpAddr.nextElement();if(!inetAddress.isLoopbackAddress()) {returninetAddress.getHostAddress().toString();}}}} catch (SocketException ex) {Log.e("WifiPreference IpAddress",ex.toString());}return null;}但是经过测试该方法在android2.3, 2.2...较老版本有效,但是在android较新版本(例如4.0等)获取的数据不正确。
获取到了类似fe80::b607:f9ff:fee5:487e..这样的IP地址。
经过一番努力,终于找出原因。
上面的IP地址是IPV6的地址形式(大概这个意思,具体没有太深入研究)。
解决方法是,在上面代码中的最内层的for循环的if语句中对inetAddress进行格式判断,只有其是IPV4格式地址时,才返回值。
修改后代码如下:(下面的方法也是网络上的方法,没有结果验证)public String getLocalIpAddress() {try {String ipv4;List nilist =Collections.list(NetworkInterface.getNetworkInterfaces());for (NetworkInterface ni: nilist){List ialist =Collections.list(ni.getInetAddresses());for (InetAddress address: ialist){if (!address.isLoopbackAddress() && InetAddressUtils.isIPv4Address(ipv4=address.getHostAddress())) {return ipv4;}}}} catch (SocketException ex) {Log.e(LOG_TAG, ex.toString());}return null;}网络上还有一种方法来获取本地IP地址(不过是在wifi状态下)通过WifiManager,DhcpInfo获取IP地址以及网关等信息(在android4.0等版本也适用)package com.jason.demo.androidip;import android.content.Context;import .DhcpInfo;import .wifi.WifiInfo;import .wifi.WifiManager;import android.text.format.Formatter;public class IPAddress {public String getIPAddress(Context ctx){WifiManager wifi_service = (WifiManager)ctx.getSystemService(Context.WIFI_SERVICE);DhcpInfo dhcpInfo = wifi_service.getDhcpInfo();WifiInfo wifiinfo = wifi_service.getConnectionInfo();System.out.println("Wifiinfo----->"+wifiinfo.getIpAddress());System.out.println("DHCP infogateway----->"+Formatter.formatIpAddress(dhcpInfo.gateway));System.out.println("DHCP infonetmask----->"+Formatter.formatIpAddress(mask));//DhcpInfo中的ipAddress是一个int型的变量,通过Formatter 将其转化为字符串IP地址return Formatter.formatIpAddress(dhcpInfo.ipAddress);}}加入permission<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>不过我自己在做项目过程中,用另外一种方法也解决了android4.0获取IP错误的问题://获取本地IPpublic static String getLocalIpAddress() {try {for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();en.hasMoreElements();) {NetworkInterface intf =en.nextElement();for(Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();enumIpAddr.hasMoreElements();) {InetAddress inetAddress =enumIpAddr.nextElement();if(!inetAddress.isLoopbackAddress()&& !inetAddress.isLinkLocalAddress()) {returninetAddress.getHostAddress().toString();}}}} catch (SocketException ex) {Log.e("WifiPreference IpAddress",ex.toString());}return null;}参考博文:/Amandaliu/archive/2011/11/06/2238177.html Android获取Mac地址/ccf0703/article/details/7451274解决安卓4.0获取本地IP地址问题。