GNU/Linux >> Linux の 問題 >  >> Linux

ネットワーク インターフェイスがワイヤレスか有線かを判断する

デバイス名が NETDEVICE の場合 、 /sys/class/net/NETDEVICE/wireless の存在のチェック directory は、使用できる述語です。ただし、これは Linux のみのアプローチであり、/sys を想定しています。 ほとんどの場合、通常のケースです。また、ioctl() を処理するよりも、スクリプトからこのメソッドを使用する方が簡単です。


ioctl(fd, SIOCGIWNAME) を呼び出すことができます ワイヤレス拡張プロトコルのバージョンを返します。これは、ワイヤレスのインターフェースでのみ使用できます。

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

完全な例については、https://gist.github.com/edufelipe/6108057 を参照してください。


コマンドラインから iwconfig コマンドを使用できます:

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

上記の @opaque のリンクで説明されているように、C から使用する必要がある場合は、ソースを取得するか、strace を使用して、どの ioctls() を使用する必要があるかを確認してください。

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

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. RHEL7LinuxでネットワークインターフェイスをDHCPクライアントとして構成する

  2. Linux で有線から無線へのブリッジ

  3. Linux のコマンドラインからワイヤレス ネットワーク名を決定する

  1. RHEL7で静的IPアドレスを使用してネットワークインターフェイスを構成する

  2. ネットワークインターフェイスを再起動する方法は?

  3. Ifconfig:ネットワーク インターフェイスを構成する 7 つの例

  1. クラウドネットワークインターフェイスをクラウドサーバーに追加します

  2. WiFi ネットワーク インターフェイスの MAC アドレスを取得する方法を教えてください。

  3. Kubuntu で非表示のワイヤレス ネットワークに接続する