3 votos

¿Hay alguna forma de detectar si estás conectado a través de un punto de acceso WiFi compartido?

Cuando se conecta al punto de acceso personal de su iPhone, el icono WiFi cambia de la "V" de intensidad de señal a un eslabón de cadena. Como en la imagen copiada de otra pregunta de StackExchange a continuación:

Image of a linked wifi

He escrito un script que puede averiguar qué interfaz de red se está utilizando (de los 14 o así que me devuelve de la route , ifconfig y networksetup ), pero nada de lo que veo en ellos ayudaría a diferenciar una conexión WiFi normal de una conexión hotspot. Lo mejor que he sido capaz de hacer hasta ahora es suponer que si estoy en WiFi y la puerta de enlace de red es 172.20.*, entonces sé que debe ser mi iPhone.

Me pregunto para determinar si estoy en un punto de acceso ya que el Mac, obviamente, sabe por el icono que está utilizando para la conexión.

¿Puede un programa o script decir esto en MacOS Ventura 13.2.1?

3voto

thewade Puntos 88

El enfoque de pasarela de red es probablemente el más sencillo. No puedo encontrar ninguna salida en cualquiera de los comandos comunes para indicar si se trata de un punto de acceso.

Como se indica en esta pregunta existe la propiedad isPersonalHotspot que forma parte de la API CoreWLAN.

He escrito un simple Python3 script para utilizar esa API:

#!/usr/bin/env python3
from CoreWLAN import CWInterface

interface = CWInterface.interface()
network = interface.lastNetworkJoined()
if network:
    if network.isPersonalHotspot():
        print(f"SSID: {network.ssid()}, is a personal hotspot.")
    else:
        print(f"SSID: {network.ssid()}, is not a personal hotspot.")
else:
    print(f"Not connected to WiFi.")

Para ejecutar este script es necesario instalar python3, así como pip3 install pyobjc-framework-CoreWLAN .

El script también podría ejecutar python2, pero como se eliminó en MacOS 12.3 es mejor usar python3.

1voto

thewade Puntos 88

Otro método si no desea utilizar CoreWLAN es analizar la salida de airport -s --xml .

Si aún no lo has hecho, puedes añadir un enlace simbólico al aeropuerto: sudo ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/local/bin/airport

La salida contiene todas las redes cercanas, por lo que tendrá que encontrar la red que le interesa entre los resultados.

Si la red que te interesa tiene la propiedad IOS_IE es probable que sea un hotspot personal.

Por ejemplo

      <key>IOS_IE</key>
      <dict>
         <key>IOS_IE_FEATURES</key>
         <data>AQAA</data>
         <key>IOS_IE_FEATURE_VERSION</key>
         <integer>1</integer>
         <key>IOS_IE_FEATURE_WOW_DISALLOWED</key>
         <true />
      </dict>

Un usuario de github utilizó este método para comprobar si hay tethering .

Sin embargo, este enfoque sería muy burdo y podría dar lugar a falsas detecciones, ya que el elemento de información podría utilizarse para otras cosas, como CarPlay.

He publicado un pregunta en reverseengineering.stackexchange.com para ver si podemos entender mejor cómo funciona el elemento de información.

Pero si este enfoque funciona para sus necesidades, incluso con la posibilidad de falsas detecciones, he decidido ofrecerlo aquí también.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X