一汁三菜

自分が楽しいと思うこと、マラソン、旅行、その他日々の記録をしたい。

無線LANのパラメータ取得 (iwlib版)

とりあえずは手軽なところで、iwlibを使ってみます。試しにESSIDでも表示してみます。ソースコード中の"wlan0"は適宜それぞれの環境にあわせて変えてみて下さい。

#include <iwlib.h>
#include <stdio.h>

int main(void)
{
  wireless_config info;

  int sk = iw_sockets_open();
  iw_get_basic_config(sk, "wlan0", &info);

  if(info.has_essid)
    printf("ESSID: %s\n", info.essid);
  else
    printf("no ESSID\n");

  iw_sockets_close(sk);
  return 0;
}

コンパイルする時はlibiw.soをリンクするのを忘れずに。

$ gcc iwconfsample.c -liw

ESSID付きのアクセスポイントに接続した状態でこれで実行してみると、

$ ./iwconfsample
ESSID: hogefuga

なんて感じで、接続しているアクセスポイントのESSIDが表示されると思います。

ここではESSIDを表示してみましたが、iw_get_basic_config()を実行した後のwireless_config構造体には、次のメンバ変数がセットされています。

変数名 説明
name char [IFNAMSIZ + 1] プロトコル名 (例: "IEEE 802.11a")
has_nwid int メンバ変数nwidが有効かどうか
nwid iwparam ネットワークID。BSSIDやESSIDと勘違いされやすいですが別物です。
has_freq int メンバ変数freqが有効かどうか
freq double 通信している周波数。単位はMHz。
has_key int メンバ変数key_size, key_flagsが有効かどうか
key_size int 鍵長
key_flags int フラグ。wireless.h中のIW_ENCODE_*の論理和です。
has_essid int メンバ変数essidが有効かどうか
essid char [IW_ESSID_MAX_SIZE] ESSID
has_mode int メンバ変数modeが有効かどうか
mode int wireless.h中のIW_MODE_*が設定されています。