2009-05-29 120 views
5

我想知道如何iwlist命令掃描可用的無線網絡,在Linux中。我讀了它的源代碼,並且有一個使用SIOCSIWSCAN的ioctl調用來觸發掃描並且SIOCGIWSCAN獲得掃描結果。但是,這些系統調用如何捕獲和分析信標幀?iwlist()命令如何掃描無線網絡?

回答

10

iwlist(8)和其他無線工具爲支持Linux Wireless Extensions(WEXT)的不同無線設備驅動程序提供通用前端。每個驅動程序將向WEXT註冊處理程序,這些程序執行由該接口定義的設備特定操作。對於掃描,這兩個處理程序是觸發掃描(命令SIOCSIWSCAN)並獲得掃描結果(命令SIOCGIWSCAN)。設備完成掃描後,它通過netlink接口向WEXT發送SIOCGIWSCAN事件。然後,偵聽此套接字的應用程序可以發出SIOCGIWSCAN命令來獲取設備的掃描結果。請注意,該設備可自由執行掃描,無論它選擇何種方式。例如,它可以被動地偵聽信標或通過發送探測請求進行主動掃描。

以上是故意模糊的發送命令到設備的機制,因爲有傳統的方式(ioctl)和新的方式(netlink - cfg80211)。但要舉一個具體的例子,考慮傳統的方式。 ioctl調用在WEXT模塊中實現,但處理此命令的代碼在設備驅動程序中實現。當用戶空間應用程序創建一個ioctl時,WEXT查找設備驅動程序的處理程序並運行它。

+0

明白了.... ioctl調用是在驅動程序模塊中實現的,因此使用SIOCGIWSCAN調用ioctl的實際函數將調用驅動程序模塊中定義的函數。 – 2009-06-11 07:14:34