簡體   English   中英

如何確定WinPCap是有線還是無線網絡適配器?

[英]How can you determine if a network adapter is wired or wireless with WinPCap?

我正在編寫一個使用winpcap捕獲由交換機發出的特定網絡流量的程序。

但是,無線設備將永遠不會收到這些數據包,因此我試圖弄清楚如何確定網絡適配器是無線的還是有線的(這樣我就可以完全跳過在無線適配器上的捕獲)。

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

下一個想法是嘗試pcap_can_set_rfmon() ,它應該告訴我該設備是否無法設置為監視模式(以及是否已連接)。 但是,當我嘗試使用此鏈接時,似乎出現了2019年鏈接錯誤,這似乎與沒有Airpcap的Windows不支持的功能有關?

我真的看不到要嘗試的其他方法,但是如果有人有任何建議,那將是很棒的。 我想知道如果我必須開始使用NDIS來確定系統上的每個適配器是什么,然后將其與WinPCap使用的設備名稱進行匹配,它最終將變得多么困難和復雜。.當然,這是我可以保留的東西在內部使用lib / WinPCap?

謝謝!

我有一個針對Windows系統的解決方案。

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

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

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

它不使用WinPCap ,但是我不確定它是否可以使用。 由於我已經在其他地方使用了這些Windows庫,因此我認為這是我將針對特定平台進行的折衷。 希望有一天能對別人有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM