GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Stellen Sie fest, ob eine Netzwerkschnittstelle drahtlos oder kabelgebunden ist

Wenn Ihr Gerätename NETDEVICE ist , eine Überprüfung der Existenz von /sys/class/net/NETDEVICE/wireless Verzeichnis ist ein Prädikat, das Sie verwenden können. Dies ist jedoch ein reiner Linux-Ansatz und geht davon aus, dass /sys montiert ist, was fast immer der Normalfall ist. Es ist auch einfacher, diese Methode aus Skripten heraus einzusetzen, anstatt sich mit ioctl()s herumzuschlagen.


Sie können ioctl(fd, SIOCGIWNAME) anrufen die die Version des drahtlosen Erweiterungsprotokolls zurückgibt, die nur auf drahtlosen Schnittstellen verfügbar ist.

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

Ein vollständiges Beispiel finden Sie unter:https://gist.github.com/edufelipe/6108057


Sie können den Befehl iwconfig von der Befehlszeile aus verwenden:

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

Wenn Sie es von C aus verwenden müssen, wie der Link von @opaque oben erklärt, holen Sie sich die Quellen oder verwenden Sie strace, um zu sehen, welches ioctls() Sie verwenden müssen:

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

Siehe Verwendung von 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. Konfigurieren Sie die Netzwerkschnittstelle als DHCP-Client unter RHEL7 Linux

  2. Konfigurieren der Netzwerkschnittstelle mit statischer IP-Adresse auf RHEL 7

  3. Wie starte ich eine Netzwerkschnittstelle neu?

  4. Kanal der Funkschnittstelle bestimmen

  5. Verdrahtet zu drahtloser Brücke in Linux

3 Möglichkeiten, eine Netzwerkschnittstelle in Linux zu konfigurieren

Verwenden von ifstat für Linux-Netzwerkstatistiken

Drahtloses Netzwerk verbindet sich in KDE nicht automatisch wieder

Netzwerkkonfiguration

Linux ifconfig-Befehl

5 Wege zum Hacken von drahtlosen Netzwerken