我目前正在开发一种 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 类型定义。我不明白发生了什么......
任何帮助将不胜感激。