无法使用 Android 的以太网管理器检索有线网络的 IP 和 MAC 地址
Unable to retrieve IP & MAC Address for wired network using Ethernet Manager for Android
我已经为 Android 4.4 设备开发了一个应用程序,我试图在其中使用 EthernetManager 检索 IP 地址和 MAC 地址有线网络。现在,当我尝试在 Android 5.1.1 设备上 运行 此应用程序时,我没有获得 IP 地址和 MAC 地址。我已经提供了超级用户访问权限。
我无法正常工作:
public string GetInterfaceName()=>(string)ethernetManager.Class.GetMethod("getEthernetIfaceName").Invoke(ethernetManager);
错误日志:
2020-02-18 16:20:37.8485 [INFO] [4] HttpService - Attempting to get wired network connection data via 'GetWiredNetworkConfiguration' call.
2020-02-18 16:20:37.9114 [ERROR] [4] HttpService - getEthernetIfaceName []
2020-02-18 16:20:37.9114 [INFO] [4] HttpServer - Response to request /wired-network/configuration:
Java.Lang.NoSuchMethodException: getEthernetIfaceName []
at Java.Interop.JniEnvironment+InstanceMethods.CallObjectMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x0006e] in :0
at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeAbstractObjectMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x00014] in :0
at Java.Lang.Class.GetMethod (System.String name, Java.Lang.Class[] parameterTypes) [0x00043] in :0
at PatientPoint.Droid.NetworkConfiguration.Wired.EthernetManagerProxy.GetInterfaceName () [0x00015] in <3433561ce2794b26999a934f0ccf7c2a>:0
at PatientPoint.Droid.NetworkConfiguration.Wired.WiredNetworkConnectionProvider.GetWiredNetworkConfiguration () [0x00000] in <3433561ce2794b26999a934f0ccf7c2a>:0
at Deadpool.Droid.Core.HttpService.GetWiredNetworkConfiguration () [0x00015] in <33f384394b3e44efac7c863885fc43f1>:0
--- End of managed Java.Lang.NoSuchMethodException stack trace ---
java.lang.NoSuchMethodException: getEthernetIfaceName []
at java.lang.Class.getMethod(Class.java:664)
at java.lang.Class.getMethod(Class.java:643)
获取MAC地址的函数:
private string GetMacAddress(string interfaceName)
{
var ethernetInterface = NetworkInterface.GetByName(interfaceName);
if (ethernetInterface != null)
{
var bytes = ethernetInterface.GetHardwareAddress();
if (bytes != null)
{
var result = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
result.Append($"{bytes[i]:X2}");
if (i != bytes.Length - 1)
{
result.Append(":");
}
}
return result.ToString();
}
}
return "Not Available";
}
请告知上述方法是否适用于 Android 4.4 还是我必须使用其他方法才能用于 Android 5.1.1 还是我在这里做错了什么?
如果你想获取android设备的mac地址,你可以试试下面的代码。我没有 Android 4.4 和 5.1.1,我在未经许可的情况下测试 Android 6.0,它运行良好。
public static string getMacAddress()
{
string macAddress = string.Empty;
var all = Collections.List(Java.Net.NetworkInterface.NetworkInterfaces);
foreach (var interfaces in all)
{
if (!(interfaces as Java.Net.NetworkInterface).Name.Contains("wlan0")) continue;
var macBytes = (interfaces as
Java.Net.NetworkInterface).GetHardwareAddress();
if (macBytes == null) continue;
var sb = new System.Text.StringBuilder();
foreach (var b in macBytes)
{
string convertedByte = string.Empty;
convertedByte = (b & 0xFF).ToString("X2") + ":";
if (convertedByte.Length == 1)
{
convertedByte.Insert(0, "0");
}
sb.Append(convertedByte);
}
macAddress = sb.ToString().Remove(sb.Length - 1);
return macAddress;
}
return "02:00:00:00:00:00";
}
从代码中获取:
从 Android 设备获取:
我从类似的线程中获取代码:
我已经为 Android 4.4 设备开发了一个应用程序,我试图在其中使用 EthernetManager 检索 IP 地址和 MAC 地址有线网络。现在,当我尝试在 Android 5.1.1 设备上 运行 此应用程序时,我没有获得 IP 地址和 MAC 地址。我已经提供了超级用户访问权限。
我无法正常工作:
public string GetInterfaceName()=>(string)ethernetManager.Class.GetMethod("getEthernetIfaceName").Invoke(ethernetManager);
错误日志:
2020-02-18 16:20:37.8485 [INFO] [4] HttpService - Attempting to get wired network connection data via 'GetWiredNetworkConfiguration' call. 2020-02-18 16:20:37.9114 [ERROR] [4] HttpService - getEthernetIfaceName [] 2020-02-18 16:20:37.9114 [INFO] [4] HttpServer - Response to request /wired-network/configuration: Java.Lang.NoSuchMethodException: getEthernetIfaceName [] at Java.Interop.JniEnvironment+InstanceMethods.CallObjectMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x0006e] in :0 at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeAbstractObjectMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x00014] in :0 at Java.Lang.Class.GetMethod (System.String name, Java.Lang.Class[] parameterTypes) [0x00043] in :0 at PatientPoint.Droid.NetworkConfiguration.Wired.EthernetManagerProxy.GetInterfaceName () [0x00015] in <3433561ce2794b26999a934f0ccf7c2a>:0 at PatientPoint.Droid.NetworkConfiguration.Wired.WiredNetworkConnectionProvider.GetWiredNetworkConfiguration () [0x00000] in <3433561ce2794b26999a934f0ccf7c2a>:0 at Deadpool.Droid.Core.HttpService.GetWiredNetworkConfiguration () [0x00015] in <33f384394b3e44efac7c863885fc43f1>:0 --- End of managed Java.Lang.NoSuchMethodException stack trace --- java.lang.NoSuchMethodException: getEthernetIfaceName [] at java.lang.Class.getMethod(Class.java:664) at java.lang.Class.getMethod(Class.java:643)
获取MAC地址的函数:
private string GetMacAddress(string interfaceName)
{
var ethernetInterface = NetworkInterface.GetByName(interfaceName);
if (ethernetInterface != null)
{
var bytes = ethernetInterface.GetHardwareAddress();
if (bytes != null)
{
var result = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
result.Append($"{bytes[i]:X2}");
if (i != bytes.Length - 1)
{
result.Append(":");
}
}
return result.ToString();
}
}
return "Not Available";
}
请告知上述方法是否适用于 Android 4.4 还是我必须使用其他方法才能用于 Android 5.1.1 还是我在这里做错了什么?
如果你想获取android设备的mac地址,你可以试试下面的代码。我没有 Android 4.4 和 5.1.1,我在未经许可的情况下测试 Android 6.0,它运行良好。
public static string getMacAddress()
{
string macAddress = string.Empty;
var all = Collections.List(Java.Net.NetworkInterface.NetworkInterfaces);
foreach (var interfaces in all)
{
if (!(interfaces as Java.Net.NetworkInterface).Name.Contains("wlan0")) continue;
var macBytes = (interfaces as
Java.Net.NetworkInterface).GetHardwareAddress();
if (macBytes == null) continue;
var sb = new System.Text.StringBuilder();
foreach (var b in macBytes)
{
string convertedByte = string.Empty;
convertedByte = (b & 0xFF).ToString("X2") + ":";
if (convertedByte.Length == 1)
{
convertedByte.Insert(0, "0");
}
sb.Append(convertedByte);
}
macAddress = sb.ToString().Remove(sb.Length - 1);
return macAddress;
}
return "02:00:00:00:00:00";
}
从代码中获取:
从 Android 设备获取:
我从类似的线程中获取代码: