GNU/Linux >> Znalost Linux >  >> Linux

Určete, zda je síťové rozhraní bezdrátové nebo kabelové

Pokud je název vašeho zařízení NETDEVICE , kontrola existence /sys/class/net/NETDEVICE/wireless adresář je predikát, který můžete použít. Toto je však přístup pouze pro Linux a předpokládá, že /sys je namontován, což je téměř vždy normální případ. Je také snazší použít tuto metodu ze skriptů, než se zabývat ioctl()s.


Můžete zavolat na číslo ioctl(fd, SIOCGIWNAME) která vrací verzi protokolu bezdrátového rozšíření, která je dostupná pouze na rozhraních, která jsou bezdrátová.

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

Úplný příklad viz:https://gist.github.com/edufelipe/6108057


Můžete použít příkaz iwconfig z příkazového řádku:

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

Pokud jej potřebujete použít z C, jak vysvětluje výše uvedený odkaz @opaque, získejte zdroje nebo použijte strace, abyste zjistili, které ioctls() musíte použít:

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

Viz použití 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. Nakonfigurujte síťové rozhraní jako klienta DHCP na RHEL7 Linux

  2. Připojení ke skryté bezdrátové síti na Kubuntu

  3. Kabelové připojení k bezdrátovému mostu v Linuxu

  1. Konfigurace síťového rozhraní se statickou IP adresou na RHEL 7

  2. Jak restartovat síťové rozhraní?

  3. Přidejte cloudové síťové rozhraní ke cloudovému serveru

  1. Ifconfig:7 příkladů konfigurace síťového rozhraní

  2. Jak získat MAC adresu WiFi síťového rozhraní?

  3. Určete kanál bezdrátového rozhraní