Tengo un programa que tiene dos secciones separadas: una de ellas debe ejecutarse cuando la interfaz de red es LAN inalámbrica y la otra cuando es una conexión LAN cableada . ¿Cómo puedo saber eso dentro de mi programa? ¿Qué función debería usar para obtener esa información?(C, Linux) Saber si una interfaz de red es inalámbrica o cableada
Respuesta
Puede utilizar el comando iwconfig desde la línea de comandos:
$ iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
Si necesita usar desde C, como @ enlace opaca anterior explica, descarga las fuentes o utilizar strace para ver qué ioctls() es necesario utilizar:
ioctl(3, SIOCGIWNAME, 0x7fff82c0d040) = -1 EOPNOTSUPP (Operation not supported)
ioctl(3, SIOCGIFFLAGS, {ifr_name="lo", ifr_flags=IFF_UP|IFF_LOOPBACK|IFF_RUNNING}) = 0
write(2, "lo no wireless extensions"..., 35lo no wireless extensions.
) = 35
ioctl(3, SIOCGIWNAME, 0x7fff82c0d040) = -1 EOPNOTSUPP (Operation not supported)
ioctl(3, SIOCGIFFLAGS, {ifr_name="eth0", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0
write(2, "eth0 no wireless extensions"..., 35eth0 no wireless extensions.
) = 35
Ver SIOCGIWNAME usage:
#define SIOCGIWNAME 0x8B01 /* get name == wireless protocol */
/* SIOCGIWNAME is used to verify the presence of Wireless Extensions.
* Common values : "IEEE 802.11-DS", "IEEE 802.11-FH", "IEEE 802.11b"...
uhmm ... lo siento, soy bastante nuevo aquí. ¿Puedo elegir tanto su respuesta como opaque como "la" respuesta correcta? – deinocheirus
Lamentablemente, no;) Puede revocarlos a ambos, pero debe aceptar el que mejor responda a su pregunta. Es su decisión :) –
Implementé un código de ejemplo aquí: https://gist.github.com/edufelipe/6108057 –
Es posible obtenerlo de C, por supuesto.
Consulte esto link para obtener información sobre una pregunta similar.
Si el nombre del dispositivo es NETDEVICE
, una comprobación de la existencia del directorio /sys/class/net/NETDEVICE/wireless
es un predicado que puede usar. Sin embargo, este es un enfoque solo de Linux y supone que se monta /sys
, que casi siempre es el caso normal. También es más fácil emplear este método a partir de scripts, en lugar de tratar con ioctl() s.
Si se dirige a NetworkManager, eche un vistazo a su API, C examples y NMDeviceType.
Puede llamar al ioctl(fd, SIOCGIWNAME)
que devuelve la versión del protocolo de extensión inalámbrica, que solo está disponible en interfaces que son inalámbricas.
int check_wireless(const char* ifname, char* protocol) {
int sock = -1;
struct iwreq pwrq;
memset(&pwrq, 0, sizeof(pwrq));
strncpy(pwrq.ifr_name, ifname, IFNAMSIZ);
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
return 0;
}
if (ioctl(sock, SIOCGIWNAME, &pwrq) != -1) {
if (protocol) strncpy(protocol, pwrq.u.name, IFNAMSIZ);
close(sock);
return 1;
}
close(sock);
return 0;
}
Para ver un ejemplo completo: https://gist.github.com/edufelipe/6108057
- 1. Conectarse a una red inalámbrica en C#
- 2. API inalámbrica para Linux en C o Java
- 3. ¿Es posible especificar qué interfaz de red para una JVM (o IDE) utilizar
- 4. Hacer interfaz de red virtual en Linux?
- 5. AS3 - ¿Puedo saber si una clase implementa una interfaz (o es una subclase de otra clase)?
- 6. ¿Cómo conecto/desconecto/configuro una red inalámbrica en python?
- 7. Usando C#, cómo saber si una carpeta está ubicada en una red o no
- 8. Administración de la conexión de red inalámbrica en C#
- 9. saber si .lib es estático o importar
- 10. Determine si Linux o Windows en C++
- 11. ¿Cómo olvidar una red inalámbrica en Android programáticamente?
- 12. Acceso a la interfaz inalámbrica (802.11) en la capa MAC (Linux)
- 13. cómo saber si una cadena es base64 o no
- 14. ¿alguna forma de detectar iPads o iPhones en una red inalámbrica? Bonjour?
- 15. ¿Cómo puedo saber si una ruta determinada es un directorio o un archivo? (C/C++)
- 16. En Linux: ¿cómo puedo determinar mediante programación si una interfaz NIC está habilitada y conectada?
- 17. ¿Cómo puedo saber si un proceso tiene una interfaz gráfica?
- 18. ¿Cómo saber si SQL Server es local o remoto?
- 19. En Linux, ¿cómo puedo saber si estoy enlazando a una biblioteca estática o dinámica?
- 20. ¿Cómo saber si una cadena es xml?
- 21. ¿Cómo saber con Objective-C si el iPhone está conectado a una red wifi?
- 22. ¿Cómo saber si una URL es una url de intranet?
- 23. Cómo saber si un Tipo es una lista o matriz o IEnumerable o
- 24. Implementación de red inalámbrica Ad-Hoc para Windows 7
- 25. Linux: ¿Cómo forzar el uso de una interfaz de red específica?
- 26. cómo saber si una variable de JavaScript es una función
- 27. ¿Cómo saber si se ejecuta en una consola de linux frente a una sesión de ssh?
- 28. ¿Cómo puedo saber si una variable de python es una cadena o una lista?
- 29. Obtenga una notificación sobre el cambio de la interfaz de red en Linux
- 30. ¿Cómo identificar si la referencia de clase es una interfaz?
¿Qué pasa si hay varias interfaces de red que están siendo utilizados en paralelo? – unwind
La parte inalámbrica del código se ejecutará para aquellos que son inalámbricos y la parte cableada para los que están cableados, en paralelo. – deinocheirus