GNU/Linux >> Tutoriales Linux >  >> Linux

Determinar si una interfaz de red es inalámbrica o cableada

Si el nombre de su dispositivo es NETDEVICE , una comprobación de la existencia del /sys/class/net/NETDEVICE/wireless directorio es un predicado que puede usar. Sin embargo, este es un enfoque solo para Linux y asume que /sys está montado, que es casi siempre el caso normal. También es más fácil emplear este método desde secuencias de comandos, en lugar de lidiar con ioctl().


Puedes 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, consulte:https://gist.github.com/edufelipe/6108057


Puede usar el comando iwconfig desde la línea de comando:

$ iwconfig
lo        no wireless extensions.
eth0      no wireless extensions.

Si necesita usarlo desde C, como explica el enlace de @opaque arriba, obtenga las fuentes o use strace para ver qué ioctls() necesita usar:

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 uso de SIOCGIWNAME:

#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"...

Linux
  1. ¿Cómo reiniciar una interfaz de red?

  2. Agregue una interfaz de red en la nube a un servidor en la nube

  3. Ifconfig:7 ejemplos para configurar la interfaz de red

  4. ¿Cómo obtener la dirección MAC de la interfaz de red WiFi?

  5. Cableado a puente inalámbrico en Linux

3 formas de configurar una interfaz de red en Linux

Uso de ifstat para estadísticas de red de Linux

La red inalámbrica no se vuelve a conectar automáticamente en KDE

configuración de la red

Comando ifconfig de Linux

5 formas de hackear una red inalámbrica