GNU/Linux >> Tutoriels Linux >  >> Linux

Déterminer si une interface réseau est sans fil ou câblée

Si le nom de votre appareil est NETDEVICE , une vérification de l'existence du /sys/class/net/NETDEVICE/wireless directory est un prédicat que vous pouvez utiliser. Il s'agit d'une approche Linux uniquement, cependant, et elle suppose que /sys est monté, ce qui est presque toujours le cas normal. Il est également plus facile d'employer cette méthode à partir de scripts, plutôt que de traiter avec des ioctl()s.


Vous pouvez appeler le ioctl(fd, SIOCGIWNAME) qui renvoie la version du protocole d'extension sans fil, qui n'est disponible que sur les interfaces sans fil.

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

Pour un exemple complet, voir :https://gist.github.com/edufelipe/6108057


Vous pouvez utiliser la commande iwconfig depuis la ligne de commande :

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

Si vous avez besoin de l'utiliser depuis C, comme l'explique le lien de @opaque ci-dessus, récupérez les sources ou utilisez strace pour voir quel ioctls() vous devez utiliser :

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

Voir l'utilisation 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. Configuration de l'interface réseau avec une adresse IP statique sur RHEL 7

  2. Comment redémarrer une interface réseau ?

  3. Connexion à un réseau sans fil caché sur Kubuntu

  4. Câblé au pont sans fil sous Linux

  5. Déterminez le nom du réseau sans fil à partir de la ligne de commande sous Linux

3 façons de configurer une interface réseau sous Linux

Utilisation d'ifstat pour les statistiques réseau Linux

Le réseau sans fil ne se reconnecte pas automatiquement dans KDE

Configuration du réseau

Commande Linux ifconfig

5 façons de pirater un réseau sans fil