2016-04-21 31 views
-2

我試圖找到一種正確的方法來在自己的代碼(c \ C++)中重用wifi工具(iw)的現有實現。我需要獲取有關範圍內的可用AccessPoint的信息(信號強度,mac地址等)。我發現了幾個使用ioctl方法的示例代碼(WEXT和其他),但它使被動掃描(我在網絡中只在兩分鐘內獲得一次新信息)[UPDATE1感謝@fluter,我知道WEXT可以做主動掃描,也可以。]。我發現iw進行主動掃描,這就是我需要的。所以我的問題:在C C++中用於Linux的無線API

有沒有一種方法可以在我自己的應用程序中使用iw代碼,而不用分析其源代碼,或者,也許有一個無線API用於此目的?

UPDATE1:基本的代碼示例開始。)

Similar question

UPDATE2:我已經審查我的任務,發現AP的信息是不夠的,我也需要捕獲客戶端數據。這導致我無線數據包嗅探和我發現要做的最好的工具是Horst。所以,我正試圖在我的應用中重用其代碼。

+0

如果iw做你所需要的,爲什麼不只是調用它? –

+0

你的意思是從我的代碼中調用它嗎?我不知道這是不是一個好主意,但我準備聽取它的觀點。如果有一個選擇以一種乾淨的方式完成我的任務,我更願意去尋找那個。 – diabolusss

+0

是的。你能詳細闡述一下預期結果嗎?例如什麼樣的數據結構來存儲它,或只是純文本以後解析等。 –

回答

2

您可能希望從cfg80211開始。

cfg80211取代Wireless-Extensions並建議:

所有新的Linux的無線驅動程序應該寫入靶向fullmac設備或mac80211爲softmac設備要麼cfg80211。

而且,它寫的是:

而不是寫w外的IOCTL你寫信cfg80211操作 回調,並在wiphy結構填充來指示cfg80211其 設備的能力。

首先主動掃描開始here

+0

謝謝你指點我正確的方向。我會檢查的。 – diabolusss

0

您可以使用內核提供的API w外,基本上,調用ioctlSIOCSIWSCAN,並與SIOCGIWSCAN獲得掃描結果。 您可以設置掃描全部使用標誌IW_SCAN_ALL_ESSID,並選擇帶有標誌IW_SCAN_TYPE_ACTIVEIW_SCAN_TYPE_PASSIVE的掃描類型。

+0

不錯,我錯過了那面旗幟。謝謝! – diabolusss

+0

將此標誌置於請求並沒有任何更改 - 只有被動掃描。我錯過了什麼? – diabolusss

+0

@diabolusss發佈您的代碼進行檢查。 – fluter