GNU/Linux >> Belajar Linux >  >> Linux

Tentukan apakah antarmuka jaringan nirkabel atau kabel

Jika nama perangkat Anda adalah NETDEVICE , pemeriksaan keberadaan /sys/class/net/NETDEVICE/wireless direktori adalah predikat yang dapat Anda gunakan. Ini adalah pendekatan khusus Linux, dan mengasumsikan bahwa /sys dipasang, yang hampir selalu merupakan kasus normal. Juga lebih mudah untuk menggunakan metode ini dari skrip, daripada berurusan dengan ioctl()s.


Anda dapat menghubungi ioctl(fd, SIOCGIWNAME) yang mengembalikan versi protokol ekstensi nirkabel, yang hanya tersedia pada antarmuka yang nirkabel.

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

Untuk contoh lengkap, lihat:https://Gist.github.com/edufelipe/6108057


Anda dapat menggunakan perintah iwconfig dari baris perintah:

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

Jika Anda perlu menggunakannya dari C, seperti yang dijelaskan oleh tautan @ buram di atas, dapatkan sumbernya atau gunakan strace untuk melihat ioctls() mana yang perlu Anda gunakan:

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

Lihat penggunaan 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. Bagaimana Cara Memulai Ulang Antarmuka Jaringan?

  2. Menghubungkan ke jaringan nirkabel tersembunyi di Kubuntu

  3. Tentukan saluran antarmuka nirkabel

  1. Konfigurasikan antarmuka jaringan sebagai klien DHCP di RHEL7 Linux

  2. Mengonfigurasi antarmuka jaringan dengan alamat IP Statis pada RHEL 7

  3. Tambahkan antarmuka Jaringan Cloud ke Server Cloud

  1. Ifconfig:7 Contoh Konfigurasi Antarmuka Jaringan

  2. Bagaimana cara mendapatkan alamat MAC dari antarmuka jaringan WiFi?

  3. Kabel ke jembatan nirkabel di Linux