我有一个使用rest来与服务器通信的应用程序,我想获取iphone的mac地址或设备ID以进行唯一性验证,如何做到这一点?
有人可以给我一些关于从HTTP请求中获取用户MAC地址的指示吗?
用户将来自我的网络外部.
我可以用
ip = InetAddress.getLocalHost();
NetworkInterface.getByInetAddress(ip);
Run Code Online (Sandbox Code Playgroud)
获取mac地址,但是如果我在离线机器中使用此代码则不起作用.
那么,我怎样才能获得Mac地址?
Pre Marshmallow我的应用程序将获得它的设备MAC地址 BluetoothAdapter.getDefaultAdapter().getAddress().
现在有了Marshmallow Android正在回归02:00:00:00:00:00.
我看到一些链接(抱歉不知道现在在哪里)说你需要添加额外的权限
<uses-permission android:name="android.permission.LOCAL_MAC_ADDRESS"/>
Run Code Online (Sandbox Code Playgroud)
能够得到它.但它对我不起作用.
获取mac地址需要一些额外的权限吗?
我不确定这是否相关,但清单还包括
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
Run Code Online (Sandbox Code Playgroud)
那么有没有办法获得本地蓝牙mac地址?
目前提到MAC地址的所有解决方案始终使用eth0.但是如果不是eth0我的接口以eth1开头.同样在OS X上,接口名称也不同.
接口eth0也可以存在但未使用.即不活跃,它没有IP.
那么我有没有办法获得第一个可用的活动接口的MAC地址.(即它有一个inet地址,我甚至不希望有一个inet6).
对于Eg
eth0 Link encap:Ethernet HWaddr <some addr>
inet6 addr: <some addr> Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:123
RX packets:123 errors:123 dropped:123 overruns:123 frame:123
TX packets:123 errors:123 dropped:123 overruns:123 carrier:123
collisions:123 txqueuelen:123
RX bytes:123 (123 MB) TX bytes:123 (123 KB)
Interrupt:123 Memory:00000000-00000000
eth1 Link encap:Ethernet HWaddr <some addr>
inet addr:<some addr> Bcast:<some addr> Mask:<some addr>
inet6 addr: <some addr> Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:123 Metric:123
RX packets:123 errors:123 dropped:123 overruns:123 frame:123
TX packets:123 errors:123 dropped:123 …Run Code Online (Sandbox Code Playgroud) 我需要找到一个解决方案,如何从WiFi网络中的其他设备获取MAC地址.有一个很好的方法如何为IPv4执行此操作(iOS应用程序如何获取MAC地址?),但如何为IPv6执行此操作?由于ARP被NDP(邻居发现协议)取代,后一种方法不起作用.如果有人能帮助我,我将不胜感激.
我试图从计算机中获取唯一的标识符,并希望每次都可以可靠地返回相同的MAC地址.相信我,我有使用MAC地址的原因,并阅读了许多关于备用唯一ID方法的帖子(是的,如果他们没有任何网卡,我会考虑).
问题出在.NET中我无论如何都不知道特定的NetworkInterface是否是一个物理硬件网卡,例如"Nortel IPSECSHM Adapter - Packet Scheduler Miniport",它会在您连接到某些VPN或WiFi网络时添加.
我知道如何通过使用类似于此的代码获取Mac地址:
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
log.Debug("NIC " + nic.OperationalStatus + " " + nic.NetworkInterfaceType + " " + nic.Speed + " " + nic.GetPhysicalAddress() + " " + nic.Description);
}
Run Code Online (Sandbox Code Playgroud)
可以理解的是,没有100%的方法可以确保我获得内部网卡,但我想选择MAC地址来返回最不可能改变的给定机器.独立于诸如以下因素 - 无论是否连接到wifi ......通过某种类型的系绳连接进行连接......或者他们安装了一些新的vpn软件,增加了新的界面.
1)选择第一个"Up"界面.这在我的笔记本电脑上失败了,因为"Packet Miniport"总是在运行.此外,如果我将手机连接到笔记本电脑,这也会显示为第一张卡.
2)选择最合适的类型......这个失败b/c基本上所有东西都显示为"以太网",包括WiFi适配器和我的iPHone网络连接.
3)选择具有IP地址的NIC.由于以下几个原因导致失败:1)网卡可能未连接到LAN 2)有多个可能具有IP地址的网卡.
4)只需发送所有MAC地址......问题是列表会根据安装的软件而改变,并且很难进行比较.
5)以最快的速度选择mac地址.我想这可能是我最好的选择.我认为可以说最快的界面通常是最永久的.
或者,可能还有其他方法可以检测.NET中的物理卡,或者如果您可以推荐一个提供不同信息的API调用,我会考虑调用其他API调用.
还有其他想法吗?
这里演示的是当我的iphone被束缚时上面的示例代码的输出:
DEBUG - NIC Down Ethernet 500000 0021E98BFBEF Apple Mobile Device Ethernet - Packet Scheduler Miniport
DEBUG - NIC Up Ethernet 10000000 …Run Code Online (Sandbox Code Playgroud) 如何获取没有Wifi接口的android设备的网络接口的MAC地址(例如android模拟器)?通过WifiManager获得的WifiInfo返回null.
编辑
更清楚一点:我必须在本地网络上与现有网络协议(不是由我设计)进行通信,在注册阶段我必须在有效负载内发送通信接口的mac地址.
据我了解,MAC地址是仅在LAN中用于识别设备的物理地址。
然而,本地IP 地址也可以识别本地网络上的设备,因为它是唯一的。那么,当我们只能在 LAN 和 WAN 中使用 IP 地址时,为什么还要费心包含 MAC 地址呢?
我知道这就是 OSI 模型和某些协议的基础,但我的问题是为什么首先要这样做?似乎需要通过网络发送额外的不必要的数据,并且 MAC 地址可能会被欺骗。
我正在寻找一种方法(使用python)从本地网络上的设备获取第二层地址.第三层地址是已知的.
目标是构建一个脚本,定期轮询IP地址数据库,确保mac地址没有改变,如果有,则向我自己发送电子邮件警报.
mac-address ×10
android ×2
ios ×2
ip-address ×2
networking ×2
.net ×1
asp.net ×1
bluetooth ×1
c# ×1
device ×1
ipv6 ×1
java ×1
linux ×1
objective-c ×1
osi ×1
python ×1
shell ×1
sockets ×1
tvos ×1