【发布时间】:2011-05-12 15:54:30
【问题描述】:
我目前正在开发一种 wifi 嗅探器。为此,我使用为 arm 编译的 tcpdump 二进制文件。但假设我知道 Wifi 接口的名称。
根据 SDK 文档 NetworkInterface 提供一个 getName() 方法。
我打算用这个方法,所以第一步是获取我的wifi接口对应的NetworkInterface对象。
为此,我使用 WifiInfo 获取 ip 地址,然后获取与该 IP 对应的 InetAddress,最后使用静态方法 getByInetAddress(InetAddress address) 获取 NetworkInterface 的实例。
这是我的代码:
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
byte[] bytes = BigInteger.valueOf(ipAddress).toByteArray();
InetAddress addr = InetAddress.getByAddress(bytes);
NetworkInterface netInterface = NetworkInterface.getByInetAddress(addr);
Log.e("MyTemp",netInterface.getName());
输出:
SSID: Nancy-Universite, BSSID: 00:19:30:6a:a9:40, MAC: B4:07:F9:D5:7C:8C, Supplicant state: COMPLETED, RSSI: -80, Link speed: 11, Net ID: 6
但我除了:
eth0
我也尝试了 isVirtual() 方法,但它无法编译,并且我收到一条错误消息,指出方法 isVirtual() 没有为 NetworkInterface 类型定义。
我不明白发生了什么...
任何帮助将不胜感激。
【问题讨论】:
-
取决于手机,我是eth0,你可以通过adb运行netcfg命令来显示网络接口列表。
-
How to get the wifi network interface name in java 与此问题有关,但不完全相同。在这里,我专门询问了 Android,而不是如何在纯 Java 中做到这一点。另一个问题值得一读,但我认为您应该在可用时使用特定的 Android API,因为它们应该更可靠。
-
@a.b.d 您是否能够从所有接口列表中找出这一点,您将如何区分用于 Wi-Fi 的接口?当用户离线时,您的解决方案是否也有效?
标签: android android-networking