Wi-Fi Directo y "normal" Wi-Fi – ¿Diferentes MAC?

Actualmente estoy tratando de conectar dos teléfonos que conocen la dirección MAC de cada uno a través de Wi-Fi Direct, y tropezó con el siguiente problema: La dirección MAC, que recibo de

WifiManager wifiMan = (WifiManager) this .getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInf = wifiMan.getConnectionInfo(); MAC_ADDRESS = wifiInf.getMacAddress(); 

Es ligeramente diferente de la que recibo del WifiP2pManager al descubrir y solicitar a compañeros. Ejemplo: a0:xx:xx:... convierte en a2:xx:xx.... ¿Alguien sabe por qué? No encontré ninguna forma de obtener la "dirección MAC directa Wi-Fi", y como pensé que la dirección MAC debería ser única, y es el mismo módulo Wi-Fi que maneja ambos (Wi-Fi normal y P2P / Direct) . Esto es muy raro .. ¿Qué debo hacer? Para los dos dispositivos (Galaxy Nexus) que tengo, siempre es sólo los dos primeros caracteres que difieren en las direcciones MAC – ¿Debo simplemente descartarlos? ¿Es demasiado alta la probabilidad de encontrar problemas (dos dispositivos que sólo difieren en la primera parte de la dirección MAC)?

Gracias.

Lectura sobre la dirección MAC en wikipedia.

Las direcciones pueden ser direcciones universalmente administradas o direcciones administradas localmente.

Las direcciones universalmente administradas y administradas localmente se distinguen estableciendo el segundo bit menos significativo del byte más significativo de la dirección. Este bit también se conoce como el bit U / L, abreviatura de Universal / Local, que identifica cómo se administra la dirección. Si el bit es 0, la dirección es universalmente administrada. Si es 1, la dirección se administra localmente.

MAC 48 Dirección

Dado que Wi-Fi Direct es sólo otra pila en la parte superior de MAC, también debe comprobar lo que ese bit puede significar para él. He encontrado alguna discusión del correo que arroja algo de luz sobre esto. Al parecer, la siguiente cita es de una especificación WFA.

El dispositivo P2P asignará una dirección de interfaz P2P, correspondiente al formato descrito en §7.1.3.3.1 de IEEE Std 802.11-2007 1 , que se utiliza para comunicarse con el propietario o los clientes del grupo P2P dentro de un grupo P2P. No se requiere que una dirección de interfaz P2P sea globalmente única y se puede administrar localmente. Una dirección de interfaz P2P puede ser la misma que la dirección de dispositivo P2P siempre que se cumplan los requisitos para la dirección de interfaz P2P en esta cláusula.

Así que creo que la respuesta a esta pregunta es, usted no debe tomar la dirección MAC de WifiManager y utilizarlo con conexiones Wi-Fi P2P .

Había estado buscando esto durante mi proyecto. Mis requisitos eran identificar únicamente los dispositivos en una red adhoc P2p formada con WiFi Direct. Cada dispositivo debe identificar su dispositivo de amigo la próxima vez cuando se trata de proximidad. Necesitaba mi propio WiFi (Direct) MAC y mis amigos para crear una clave para esta creación de zona de amigo.

Mi investigación: El diseño es de tal manera que existe una identificación universal única y una identificación local. Razón: El ID universal sólo se puede utilizar para conectarse a redes de modo Infraestructura. El ID local se podría utilizar para las redes en modo "ad-hoc" (dispositivo a dispositivo). En este modo ad-hoc, existen posibilidades de que un único dispositivo pueda pertenecer simultáneamente a varios grupos ad-hoc.

  1. Por tanto, para soportar estas operaciones concurrentes, los dispositivos P2p admiten varias entidades MAC, posiblemente en diferentes canales.
  2. Para cada sesión, un grupo persistente PUEDE utilizar un canal diferente y un dispositivo MAC para cada sesión.
  3. Los dispositivos P2P usan su dirección MAC global como ID de dispositivo durante la detección y negociación y una dirección MAC local temporal para todos los marcos de un grupo. Entendido desde aquí

Sin embargo, no hay manera directa de obtener su propio WiFi P2p MAC dirección. Número 53437: Android .

En este tema de discusión, el miembro del proyecto de google ha sugerido que esto es posible y sólo que no ha sido documentado

Solución: Utilizando el filtro intencional WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION y el extra de la intención WifiP2pManager.EXTRA_WIFI_P2P_DEVICE

Así es como lo he usado en mi proyecto:

 @Override public void onReceive(Context context, Intent intent) { .... .... String action = intent.getAction(); if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION .equals(action)) { WifiP2pDevice device = (WifiP2pDevice) intent .getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_DEVICE); String myMac = device.deviceAddress; Log.d(TAG, "Device WiFi P2p MAC Address: " + myMac); /* Saving WiFi P2p MAC in SharedPref */ sharedPref = context.getSharedPreferences(context.getString(R.string.sp_file_name), Context.MODE_PRIVATE); String MY_MAC_ADDRESS = sharedPref.getString(context.getString(R.string.sp_field_my_mac), null); if (MY_MAC_ADDRESS == null || MY_MAC_ADDRESS != myMac) { SharedPreferences.Editor editor = sharedPref.edit(); editor.putString(context.getString(R.string.sp_field_my_mac), myMac); editor.commit(); } 

Espero que esto ayude a alguien!

IFixit dice que el Galaxy Nexus utiliza el BCM4330 para su MAC, Baseband y PHY, así que si tienes amigos en Broadcom puedes preguntarles.

Lamentablemente, la hoja de datos no es pública; Lo mejor que puedo hacer es vincularlo a un diagrama de bloques .

Yo estaba luchando toda la noche para averiguar una manera de recuperar WiFi Direct MAC dirección en su lugar, ya que mis requisitos fueron redactados en torno a la suposición de que es factible.

Es una especie de round alrededor, usted crea un solo grupo del dispositivo y consigue el dueño y la dirección del dispositivo junto con él.

Aquí está el código,

  final WifiP2pManager p2pManager = (WifiP2pManager) getSystemService(WIFI_P2P_SERVICE); final WifiP2pManager.Channel channel = p2pManager.initialize(this, getMainLooper(), null); p2pManager.createGroup(channel, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { p2pManager.requestGroupInfo(channel, new WifiP2pManager.GroupInfoListener() { @Override public void onGroupInfoAvailable(WifiP2pGroup wifiP2pGroup) { Log.i("", wifiP2pGroup.getOwner().deviceAddress); // Following removal necessary to not have the manager busy for other stuff, subsequently p2pManager.removeGroup(channel, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { Log.i("", "Removed"); } @Override public void onFailure(int i) { Log.i("", "Failed " + i); } }); } }); } @Override public void onFailure(int i) { Log.i("", String.valueOf(i)); } }); 

Olvídese del encargado de Wifi. Wifi dirección directa no es igual a la dirección MAC. Los usos directos de la dirección de Wifi para la conexión directa del wifi. No puedes usar nada más.

Para conectar dos dispositivos con dispositivo wifi directo, tienes que crear un WifiP2pGroup con uno de tu dispositivo. Con su otro dispositivo, usted tiene que buscar en el WifiP2pGroups, seleccione el suyo, y conecte.

Usted puede conseguir la dirección directa de WiFi usando el siguiente código:

 public String getWFDMacAddress(){ try { List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface ntwInterface : interfaces) { if (ntwInterface.getName().equalsIgnoreCase("p2p0")) { byte[] byteMac = ntwInterface.getHardwareAddress(); if (byteMac==null){ return null; } StringBuilder strBuilder = new StringBuilder(); for (int i=0; i<byteMac.length; i++) { strBuilder.append(String.format("%02X:", byteMac[i])); } if (strBuilder.length()>0){ strBuilder.deleteCharAt(strBuilder.length()-1); } return strBuilder.toString(); } } } catch (Exception e) { Log.d(TAG, e.getMessage()); } return null; 

}

  • Android Wifip2p: ¿Por qué la información de grupo es nula después de conectarse con el propietario del grupo
  • El estado de WifiP2pDevice permanece en INVITADO después de la invitación directa de Wifi
  • Android 4.2.2 Wifi-Direct adhoc network - acceder a métodos ocultos android para establecer el SSID y contraseña?
  • ¿Cómo ser notificado cuando un compañero ya no está disponible en la gama Wi-Fi Direct?
  • ¿Por qué Android Wi-Fi Direct solo devuelve un servicio a la vez con discoverServices?
  • ¿Existe un equivalente de Wi-Fi Direct / Wi-Fi P2P para Phonegap / Cordova?
  • Cómo alcanzar la exhibición del wifi después de conectar por el wifi directo
  • Wi-Fi Direct Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.