GNU/Linux >> Linux Esercitazione >  >> Linux

Determinare se un'interfaccia di rete è wireless o cablata

Se il nome del tuo dispositivo è NETDEVICE , un controllo dell'esistenza del /sys/class/net/NETDEVICE/wireless directory è un predicato che puoi usare. Questo è un approccio solo per Linux, tuttavia, e presuppone che /sys è montato, che è quasi sempre il caso normale. È anche più facile utilizzare questo metodo dagli script, piuttosto che gestire ioctl().


Puoi chiamare ioctl(fd, SIOCGIWNAME) che restituisce la versione del protocollo di estensione wireless, che è disponibile solo su interfacce wireless.

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;
}

Per un esempio completo vedi:https://gist.github.com/edufelipe/6108057


Puoi utilizzare il comando iwconfig dalla riga di comando:

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

Se hai bisogno di usarlo da C, come spiega il link di @opaque sopra, ottieni i sorgenti o usa strace per vedere quale ioctls() devi usare:

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

Vedere l'utilizzo di 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. Configurazione dell'interfaccia di rete con indirizzo IP statico su RHEL 7

  2. Come riavviare un'interfaccia di rete?

  3. Aggiungi un'interfaccia di rete cloud a un server cloud

  4. Ifconfig:7 esempi per configurare l'interfaccia di rete

  5. Come ottenere l'indirizzo MAC dell'interfaccia di rete WiFi?

3 modi per configurare un'interfaccia di rete in Linux

Utilizzo di ifstat per le statistiche di rete Linux

La rete wireless non si riconnette automaticamente in KDE

Configurazione di rete

Comando ifconfig di Linux

5 modi per hackerare la rete wireless