Thật dễ dàng để thực hiện quét trong dòng lệnh. Trang người đàn ông là bạn của bạn ở đây (hãy xem iwconfig và iwlist). Nhưng việc sử dụng giao diện C thì khó hơn một chút nên tôi sẽ tập trung vào đó.
Trước hết, như những người khác đã đề cập, hãy tải xuống số wireless tools source code. Tất cả tài liệu cho giao diện lập trình nằm trong các tệp .c. Theo như tôi có thể nói, không có tài liệu web cho api. Tuy nhiên, mã nguồn khá dễ đọc. Bạn khá nhiều chỉ cần iwlib.h và iwlib.c cho câu hỏi này.
Trong khi bạn có thể sử dụng iw_set_ext
và iw_get_ext
, các libiw thực hiện một chức năng quét cơ bản iw_scan
, từ đó bạn có thể trích xuất hầu hết các thông tin mà bạn cần.
Đây là một chương trình đơn giản để có được ESSID cho tất cả các mạng không dây có sẵn. Biên dịch với -liw
và chạy với 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);
}
KHUYẾN CÁO: Đây chỉ là một chương trình trình diễn. Có thể cho một số kết quả không có một bài luận. Ngoài ra, điều này giả định giao diện không dây của bạn là "wlan0". Bạn có được ý tưởng.
Đọc mã số iwlib!
Nguồn
2013-05-25 18:55:11
Bạn không cần phải root để chạy iwlist, nhưng nó sẽ chỉ báo cáo các giá trị được lưu trong bộ nhớ cache từ lần quét định kỳ cuối cùng. Để bắt buộc quét mới, bạn cần phải root. – Hudson
Hmm, khi chạy không phải root nó sẽ trả về không có gì, ít nhất là trên Ubuntu 8.04: -/ – richq