¿Cómo puedo detectar si hay algún adaptador de red conectado? Solo puedo encontrar ejemplos sobre el uso de NSReachability para detectar una conexión a Internet, pero quiero detectar incluso una conexión de red que no sea de internet. Obtener la dirección de IP en eth0 debería funcionar? Estoy trabajando solo en Mac.Detectar cualquier red conectada
Respuesta
Getting a List of All IP Addresses en Nota TN1145 técnico de Apple menciona 3 métodos para obtener el estado de las interfaces de red:
-
de configuración del sistema
- API Marco
- Open Transport
- sockets BSD
Marco de configuración del sistema: Este es el camino recomendado por Apple y hay código de muestra en el TN1145. La ventaja es que proporciona una forma de recibir notificaciones de cambios en la configuración de la interfaz.
Open Transport API: También hay código de muestra en TN1145, de lo contrario, no puedo decir mucho al respecto. (Sólo hay documentación "legado" en el sitio web de Apple.)
sockets BSD: Esta parece ser la forma más fácil de obtener la lista de interfaces y para determinar el estado de la conexión (si es que no es necesario dinámico cambiar notificaciones).
El siguiente código muestra cómo encontrar todas las interfaces IPv4 e IPv6 que están "en funcionamiento".
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <ifaddrs.h>
#include <net/if.h>
#include <netdb.h>
struct ifaddrs *allInterfaces;
// Get list of all interfaces on the local machine:
if (getifaddrs(&allInterfaces) == 0) {
struct ifaddrs *interface;
// For each interface ...
for (interface = allInterfaces; interface != NULL; interface = interface->ifa_next) {
unsigned int flags = interface->ifa_flags;
struct sockaddr *addr = interface->ifa_addr;
// Check for running IPv4, IPv6 interfaces. Skip the loopback interface.
if ((flags & (IFF_UP|IFF_RUNNING|IFF_LOOPBACK)) == (IFF_UP|IFF_RUNNING)) {
if (addr->sa_family == AF_INET || addr->sa_family == AF_INET6) {
// Convert interface address to a human readable string:
char host[NI_MAXHOST];
getnameinfo(addr, addr->sa_len, host, sizeof(host), NULL, 0, NI_NUMERICHOST);
printf("interface:%s, address:%s\n", interface->ifa_name, host);
}
}
}
freeifaddrs(allInterfaces);
}
Muchas gracias, la mejor respuesta hasta ahora.No tengo tiempo para probarlo ahora, pero a menos que algo mejor disminuya en las próximas 6 horas, lo aceptaré. –
@ AndreasBergström: Eso está bien. Me alegra que haya sido de ayuda. –
Reachability
(supongo que se refería a la clase de demostración de Apple basada en la API subyacente SCNetworkReachability...
) funciona para cualquier host conectado a IP, incluso en su red local. Puede utilizar el método reachabilityForLocalWiFi
, aunque de acuerdo con this page, devolverá SÍ cuando la red está activa pero no enrutable. Por lo tanto, es posible que prefiera consultar reachabilityWithAddress:
con una dirección local.
This es un reemplazo directo para Reachability
que algunas personas recomiendan.
Puede usar el código de Accesibilidad, proporcionado por Apple. Aquí está el link donde puede obtener el código fuente de "Accesibilidad":
También puede descargar este archivo: TestWifi en Github. Le mostrará cómo implementar la clase Accesibilidad.
Espero que esto te pueda ayudar.
El enlace de accesibilidad que ha proporcionado es para iOS. –
- 1. Detectar automáticamente una nueva computadora conectada a la red
- 2. ¿Cómo puedo detectar si una tarjeta de red no está conectada con Java sin demora?
- 3. Detectar la pantalla externa conectada o eliminada en Windows 7
- 4. ¿Detectado si una máquina está conectada/Disponible?
- 5. Detectar Restauración de red 3G o Wifi
- 6. Obtener el nombre de la red Wi-Fi conectada a OSX
- 7. Cómo recordar la configuración wifi y la red conectada a través de los reinicios
- 8. Android: Detecta una unidad flash USB conectada
- 9. Diferenciar el adaptador de red VMware de los adaptadores físicos de red -o-- Detectar el adaptador de red virtual
- 10. iPhone SDK detectar la red Wifi y Carrier
- 11. ¿Cómo detectar la pérdida de red en Javascript?
- 12. ¿Cómo puedo detectar cuando una unidad flash está conectada en Linux?
- 13. ¿Cómo detectar si una impresora USB conectada está encendida o apagada?
- 14. Detectar si la entidad está conectada a un contexto de datos
- 15. ¿Cómo detectar cambios en la red con Accesibilidad?
- 16. Detectar cuando se desconectó el cable de red
- 17. cómo detectar todos los errores en cualquier acción de scalatra?
- 18. detectar cualquier contacto en una vista (iPhone SDK)
- 19. Verificación de si hay una impresora conectada
- 20. Cómo tratar con gráficos de mejor conectada con Neato
- 21. Detectando el estado de la red (conectado - desconectado) en C#
- 22. Uso de red cautiva
- 23. ¿Cómo puedo detectar las direcciones IP de otros dispositivos en la red local?
- 24. En Linux: ¿cómo puedo determinar mediante programación si una interfaz NIC está habilitada y conectada?
- 25. Detectar unidad USB en Java
- 26. ¿Cómo detectar el estado conectado de energía?
- 27. Cómo cancelo una transición que está conectada a un UIButton
- 28. Error: Vista no conectada al administrador de ventanas
- 29. ¿Cómo saber si la computadora está conectada a internet?
- 30. ¿Escribir cero bytes en una transmisión de red es una manera confiable de detectar conexiones cerradas?
¿Estás trabajando en iOS, Mac o en ambos? – Bryan
Solo Mac, gracias. –
OK, solo he probado esto en el iPhone, por lo que mi respuesta podría no funcionar en Mac. Veré si puedo investigar un poco más. – Bryan