Получить имя интерфейса Wifi на Android
Возможный дубликат:
Как получить имя сетевого интерфейса wifi в java
В настоящее время я разрабатываю своего рода wifi-сниффер. Для этого я использую двоичный файл tcpdump, скомпилированный для руки. Но предположим, что я знаю имя интерфейса Wifi.
Согласно документации SDK NetworkInterface предоставить метод getName().
Я планирую использовать этот метод, поэтому первый шаг - получить объект NetworkInterface, соответствующий моему интерфейсу wifi.
Для этого я использую WifiInfo для получения ip-адреса, затем получаю InetAddress, соответствующий этому IP-адресу, и, наконец, получите экземпляр NetworkInterface, используя статический метод getByInetAddress (адрес InetAddress).
Вот мой код:
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.
Я не понимаю, что происходит...
Любая помощь будет оценена.
Ответы
Ответ 1
Попробуйте это
for(Enumeration<NetworkInterface> list = NetworkInterface.getNetworkInterfaces(); list.hasMoreElements();)
{
NetworkInterface i = list.nextElement();
Log.e("network_interfaces", "display name " + i.getDisplayName());
}
Ответ 2
Все, что вам нужно сделать, это изменить
Log.e("MyTemp",netInterface.getName());
к
Log.e("MyTemp",netInterface.getDisplayName());
Ответ 3
Используйте это: Строковый интерфейсName = SystemInfo.getInstance(). GetProperty ( "wifi.interface" );
Это определенно сработает.
Ответ 4
Вы можете вызвать /system/ip link
и проанализировать результаты.
bash-3.2# ip link
ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: usb0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 6e:3d:7a:3a:62:ee brd ff:ff:ff:ff:ff:ff
3: usb1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether da:bb:3f:04:1b:cd brd ff:ff:ff:ff:ff:ff
4: sit0: <NOARP> mtu 1480 qdisc noop state DOWN
link/sit 0.0.0.0 brd 0.0.0.0
5: ip6tnl0: <NOARP> mtu 1460 qdisc noop state DOWN
link/tunnel6 :: brd ::
6: ifb0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN qlen 32
link/ether 76:3c:4e:23:cc:f8 brd ff:ff:ff:ff:ff:ff
7: ifb1: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN qlen 32
link/ether 02:17:54:31:ff:bd brd ff:ff:ff:ff:ff:ff
8: tun: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 500
link/ether b2:b7:11:da:7c:6a brd ff:ff:ff:ff:ff:ff
16: tiwlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 100
link/ether 40:fc:89:e4:67:4c brd ff:ff:ff:ff:ff:ff