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"...