Cukup mudah untuk melakukan pemindaian di baris perintah. Halaman manual adalah teman Anda di sini (lihat iwconfig dan iwlist ). Namun menggunakan antarmuka C sedikit lebih sulit, jadi saya akan fokus pada hal itu.
Pertama-tama, seperti yang disebutkan orang lain, unduh kode sumber alat nirkabel. Semua dokumentasi untuk antarmuka pemrograman ada di .c file. Sejauh yang saya tahu, tidak ada dokumentasi web untuk api. Namun, kode sumbernya cukup mudah dibaca. Anda hanya perlu iwlib.h dan iwlib.c untuk pertanyaan ini.
Meskipun Anda dapat menggunakan iw_set_ext
dan iw_get_ext
, libiw mengimplementasikan fungsi pemindaian dasar iw_scan
, tempat Anda dapat mengekstrak sebagian besar informasi yang Anda butuhkan.
Ini adalah program sederhana untuk mendapatkan ESSID untuk semua jaringan nirkabel yang tersedia. Kompilasi dengan -liw
dan jalankan dengan sudo
.
#include <stdio.h>
#include <time.h>
#include <iwlib.h>
int main(void) {
wireless_scan_head head;
wireless_scan *result;
iwrange range;
int sock;
/* Open socket to kernel */
sock = iw_sockets_open();
/* Get some metadata to use for scanning */
if (iw_get_range_info(sock, "wlan0", &range) < 0) {
printf("Error during iw_get_range_info. Aborting.\n");
exit(2);
}
/* Perform the scan */
if (iw_scan(sock, "wlan0", range.we_version_compiled, &head) < 0) {
printf("Error during iw_scan. Aborting.\n");
exit(2);
}
/* Traverse the results */
result = head.result;
while (NULL != result) {
printf("%s\n", result->b.essid);
result = result->next;
}
exit(0);
}
PENAFIAN:Ini hanya program demonstrasi. Beberapa hasil mungkin tidak memiliki essid. Selain itu, ini menganggap antarmuka nirkabel Anda adalah "wlan0". Anda mengerti.
Baca iwlib kode sumber!
Paket Alat Nirkabel -- yang merupakan bagian dari iwlist -- juga berisi Pustaka Pembantu Alat Nirkabel. Anda harus menyertakan iwlib.h dan tautkan dengan libiw.a (mis. tambahkan -liw). Kemudian cari dokumentasi untuk iw_set_ext fungsi. SIOCSIWSCAN parameter akan paling banyak digunakan. Untuk contoh cara menggunakan antarmuka ini, lihat sumber KWifiManager di pustaka KDE (lihat:metode Interface_wireless_wirelessextensions::get_available_networks). Sebagai alternatif, Anda juga dapat mengunduh kode sumber Alat Nirkabel dan melihat bagaimana fungsi iwlib iw_set_ext juga digunakan untuk memindai di iwlist.c.
Adapun hak istimewa, saya membayangkan prosesnya perlu dijalankan sebagai root untuk melakukan pemindaian. Saya ingin tahu apakah ini juga bisa dilakukan sebaliknya.
Karena Anda menggunakan Ubuntu 8.04, paket libiw-dev seharusnya dapat digunakan.
Anda dapat menggunakan nmcli
yang tidak memerlukan izin root atau nama antarmuka WIFI.
nmcli -t -f ssid dev wifi