2017-07-20 79 views
0

我正在編寫一個程序,它使用winpcap捕獲我們的交換機發出的一些特定的網絡流量。但是,無線設備將永遠不會收到這些數據包,因此我試圖找出如何確定網絡適配器是無線還是有線(這樣我就可以完全跳過無線適配器上的捕獲)。如何通過WinPCap確定網絡適配器是有線還是無線?

我的第一個想法是檢查所選接口的介質(當前基於該適配器的IP地址進行選擇 - 邏輯是,如果它具有IP地址,則連接)。問題是,是否pcap_datalink()將返回DLT_EN10MB,無論其有線或無線。

下一個念頭,就是嘗試pcap_can_set_rfmon(),這應該告訴我,如果該設備不能設置爲監控模式(因此如果還是沒有連線)。然而,當我嘗試使用這個函數時,我似乎得到了2019年的鏈接錯誤,這似乎被認爲是在沒有Airpcap的情況下不支持Windows的函數?

我真的不知道還有什麼可以嘗試,但如果有人有任何指針,這將是非常棒的。我想知道如果我不得不開始使用NDIS來確定系統上的每個適配器,然後將其匹配到WinPCap所使用的設備名稱,那麼它會變得多麼困難和複雜。當然,這是我可以保留的東西內部使用lib/WinPCap?

謝謝!

回答

0

我有一個解決方案,只適用於Windows系統。

對於我想要根據所連接的網絡選擇的適配器,我可以將與該適配器關聯的IP地址與由GetAdaptersInfo生成的對象中的每個IP地址進行比較。如果它們匹配,那麼我可以看到同一個對象上的「類型」是否是以太網。

if ((pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET) && (WINVER > _WIN32_WINNT_WS03)) 
{ 
} 

我也檢查Windows版本;因爲它只是從Vista(Winver 6+)起,IF_TYPE_IEEE80211在適配器中返回是無線的。

它沒有使用WinPCap,但後來我不知道它有可能。由於我已經在其他地方使用這些Windows庫,我認爲這是我將要做的一個特定於平臺的折衷。希望有一天能幫助別人!

相關問題