Networking

Windows機器上Wireshark數據包的接收和處理流程是怎樣的?

  • June 12, 2016

我即將使用Wireshark在我的**Windows電腦上進行一些流量監控。在處理它時,我想知道Wireshark如何在**Windows之前設法擷取低級網路數據包。

首先,我的網卡上的一個網路介面接收到一個數據包。然後 NIC 進行一些初始檢查(CRC、正確的 MAC 地址等)。假設驗證成功,網卡轉發數據包。但是如何以及在哪裡?

我知道驅動程序是 NIC 和作業系統或任何其他應用程序之間的粘合劑。我進一步猜測WindowsWireshark有一個單獨的驅動程序(WinPcap?)。否則,Wireshark將無法接收乙太網幀。是否有兩個或多個網卡驅動程序同時共存?網卡如何知道使用哪一個?

Windows 中的 I/O 模型基於組件堆棧。數據必須流經存在於物理網卡和將使用數據的應用程序之間的堆棧的各種組件。有時,這些不同的組件會在數據流過堆棧時檢查數據(例如 TCP 數據包),並且根據該數據包的內容,數據可能會被更改,或者數據包可能會被完全丟棄。

網路堆棧

這是數據包流經的“網路堆棧”的簡化模型,以便從應用程序到達線路,反之亦然。

上面螢幕截圖中顯示的最有趣的組件之一是 WFP(Windows 過濾平台)標註 API。如果我們放大它,它可能看起來像這樣:

Windows 過濾平台

開發人員可以自由地將自己的模組插入此堆棧中的適當位置。例如,防病毒產品通常使用插入此模型並檢查網路流量或提供防火牆功能的“過濾器驅動程序”。Windows 防火牆服務顯然也適合這種模式。

如果您想編寫一個記錄網路流量的應用程序,例如 Wireshark,那麼適當的方法是使用您自己的驅動程序,並將其插入到堆棧中盡可能低的位置,以便它可以檢測網路數據包在您的防火牆模組有機會刪除它們之前。

所以在這個過程中有很多“驅動力”。也有許多不同類型的驅動程序。此外,系統上其他形式的輸入/輸出,例如硬碟驅動器讀取和寫入,遵循非常相似的模型。

另一個注意事項 - WFP 標註並不是暗示自己進入網路堆棧的唯一方法。以 WinPCap 為例,它直接通過驅動程序與 NDIS 連接,這意味著它有機會在進行任何過濾之前攔截流量。

NDIS 驅動程序

WinPCap

參考:

Vista+ 中的下一代 TCP/IP 堆棧

Windows 篩選平台體系結構

引用自:https://serverfault.com/questions/783502