とりあえずは手軽なところで、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_*が設定されています。 |