ขั้นตอนการรับและการประมวลผลแพ็กเก็ต Wireshark ของเครื่อง Windows คืออะไร


20

ฉันกำลังจะใช้Wiresharkสำหรับการตรวจสอบปริมาณข้อมูลบนคอมพิวเตอร์Windowsของฉัน ในขณะที่ทำงานในนั้นผมสงสัยว่าWiresharkจัดการจับแพ็คเก็ตเครือข่ายในระดับต่ำก่อนที่จะใช้ Windowsไม่

ก่อนอื่นอินเตอร์เฟสเครือข่ายใน NIC ของฉันจะได้รับแพ็คเก็ต จากนั้น NIC จะทำการตรวจสอบเบื้องต้น (CRC, ที่อยู่ MAC ที่ถูกต้อง, ... ฯลฯ ) สมมติว่าการยืนยันสำเร็จ NIC จะส่งต่อแพ็กเก็ต แต่อย่างไรและที่ไหน

ฉันเข้าใจว่าไดรเวอร์เป็นกาวระหว่าง NIC และระบบปฏิบัติการหรือแอปพลิเคชันอื่น ๆ ฉันเดาเพิ่มเติมว่ามีไดรเวอร์แยกต่างหากสำหรับWindowsและWireshark ( WinPcap ?) ไม่เช่นนั้นWiresharkจะไม่สามารถรับเฟรมEthernetได้ มีไดรเวอร์ NIC สองรายการขึ้นไปพร้อมกันหรือไม่ NIC รู้ได้อย่างไรว่าควรใช้อันไหน


หลักฐานของคุณไม่ถูกต้อง NIC ส่งแพ็กเก็ตไปที่ Windows เสมอ (โดยเฉพาะกับไดรเวอร์อุปกรณ์และจากเครือข่ายสแต็ค) และขึ้นอยู่กับ Windows เพื่อตัดสินใจว่าจะทำอย่างไรกับมัน Windows มีคุณลักษณะที่โปรแกรมสามารถขอให้รับแพ็คเก็ต "เหมือนที่อยู่ในสาย" อาจใช้ตัวกรองและ Wireshark ใช้คุณลักษณะนั้น Wireshark ไม่ข้าม Windows
zwol

(มีระบบปฏิบัติการทดลองที่พยายามทำเครือข่ายความเร็วสูงมากขึ้นโดยอนุญาตให้ส่งแพ็คเก็ตโดยตรงจากการ์ดเครือข่ายไปยังแอปพลิเคชัน แต่ AFAIK Windows ไม่สามารถทำได้: คุณอย่างน้อยต้องผ่านเลเยอร์ NDIS เสมอ)
zwol

คำตอบ:


38

โมเดล I / O ใน Windows ขึ้นอยู่กับสแต็กของส่วนประกอบ ข้อมูลต้องไหลผ่านส่วนประกอบต่าง ๆ ของสแต็กนั้นที่มีอยู่ระหว่างการ์ดเครือข่ายจริงและแอปพลิเคชันที่จะใช้ข้อมูล บางครั้งองค์ประกอบต่าง ๆ เหล่านั้นตรวจสอบข้อมูล (ตัวอย่างเช่นแพ็คเก็ต TCP) ขณะที่ไหลผ่านสแต็กและขึ้นอยู่กับเนื้อหาของแพ็คเก็ตนั้นข้อมูลอาจมีการเปลี่ยนแปลงหรือแพ็คเก็ตอาจถูกทิ้งทั้งหมด

Network Stack

นี่เป็นรูปแบบที่เรียบง่ายของ "network stack" ที่แพ็กเก็ตไหลผ่านเพื่อรับจากแอพพลิเคชั่นไปยัง wire และในทางกลับกัน

หนึ่งในองค์ประกอบที่น่าสนใจที่สุดที่แสดงในภาพด้านบนคือ API Callout API ของ WFP (แพลตฟอร์มการกรอง Windows) หากเราขยายเข้าไปอาจมีลักษณะเช่นนี้:

แพลตฟอร์มการกรองของ Windows

นักพัฒนามีอิสระที่จะเสียบโมดูลของพวกเขาเองในที่ที่เหมาะสมในกองซ้อนนี้ ตัวอย่างเช่นผลิตภัณฑ์แอนติไวรัสมักใช้ "ฟิลเตอร์ไดรเวอร์" ที่เชื่อมต่อกับโมเดลนี้และตรวจสอบปริมาณการใช้เครือข่ายหรือให้ความสามารถของไฟร์วอลล์ บริการ Windows Firewall ก็เหมาะกับรุ่นนี้เช่นกัน

หากคุณต้องการเขียนแอปพลิเคชันที่บันทึกปริมาณการใช้งานเครือข่ายเช่น Wireshark วิธีที่เหมาะสมในการใช้ไดรเวอร์ของคุณเองและใส่ลงในสแต็กให้น้อยที่สุดเท่าที่จะเป็นไปได้เพื่อตรวจจับแพ็กเก็ตเครือข่าย ก่อนที่โมดูลไฟร์วอลล์ของคุณจะมีโอกาสดรอป

ดังนั้นจึงมี "ไดรเวอร์" จำนวนมากที่เกี่ยวข้องในกระบวนการนี้ ไดรเวอร์ประเภทต่าง ๆ มากมายเช่นกัน นอกจากนี้รูปแบบอื่น ๆ ของอินพุต / เอาท์พุตบนระบบเช่นฮาร์ดดิสก์ไดรฟ์อ่านและเขียนตามรุ่นที่คล้ายกันมาก

อีกหมายเหตุหนึ่ง - ข้อความเสริม WFP ไม่ใช่วิธีเดียวที่จะแทรกซึมเข้าไปในเครือข่ายสแต็ก WinPCap เป็นตัวอย่างอินเตอร์เฟสกับ NDIS โดยตรงกับไดรเวอร์หมายความว่ามันมีโอกาสที่จะสกัดกั้นทราฟฟิกก่อนที่การกรองใด ๆ จะเกิดขึ้นเลย

ไดรเวอร์ NDIS

winPcap

อ้างอิง:

TCP / IP Stack รุ่นต่อไปใน Vista +

สถาปัตยกรรมแพลตฟอร์มการกรอง Windows


3
ไดอะแกรมที่โดดเด่น มีการโพสต์บน microsoft.com หรือไม่ ถ้าเป็นเช่นนั้นฉันชอบที่จะแหย่และดูว่ามีข้อมูลอื่น ๆ
EEAA

1
คำตอบที่สมบูรณ์แบบ อธิบายได้ง่ายและชัดเจนการสร้างภาพและแหล่งข้อมูลที่ยอดเยี่ยม! ขอบคุณมาก!
Hansi

1
+1 มูลค่าการกล่าวขวัญว่ามีคนขับรถมาเปิดสร้างอยู่บน WFP ที่ทำให้มันเล็ก ๆ น้อย ๆ ในการเขียนโปรแกรมดังกล่าวเรียกว่าWinDivert ฉันยังเขียน. wrapper. NETสำหรับมัน

1
มันเคยเป็นกรณีที่มีบางสิ่งที่เรียกว่า "ผู้ให้บริการเลเยอร์" ซึ่งคุณสามารถดักจับและเขียนแพ็กเก็ตใหม่ - มีการแทนที่ความสามารถนั้นหรือไม่? เป็นส่วนหนึ่งของ API "การกรอง" หรือไม่ (โอ้รอไม่เคยคิด: ผมแค่มองไปที่การเชื่อมโยง WinDivert จาก @TechnikEmpire และดูว่าเป็นไปได้.)
davidbak

1
@davidbak ใช่ WinDivert เป็นลูกผสม API ไดร์เวอร์ไฮไลต์มีไว้สำหรับนักพัฒนาในการสร้างไดร์เวอร์เฉพาะที่สามารถทำอะไรได้มากกว่าเพียงแค่ทิ้งแพ็กเก็ต (ไม่ต้องใช้ไดรเวอร์) WinDivert นั้นเป็นไดร์เวอร์ แต่มันก็เป็นเรื่องปกติที่ให้การเข้าถึงแพ็คเก็ตอย่างเต็มที่โดยการผลักดันและ popping แพ็กเก็ตเข้าและออกจากเคอร์เนลและพื้นที่โหมดผู้ใช้

3

ดังคำตอบของ Ryan Ries ว่า:

WinPCap เป็นตัวอย่างอินเตอร์เฟสกับ NDIS โดยตรงกับไดรเวอร์หมายความว่ามันมีโอกาสที่จะสกัดกั้นทราฟฟิกก่อนที่การกรองใด ๆ จะเกิดขึ้นเลย

และนี่เป็นคำอธิบายในเอกสาร WinPcap, วิธีการทำงานว่า


สิ่งนี้น่าจะเป็นการแก้ไขคำตอบของไรอันได้ดีกว่า มันไม่ใช่คำตอบที่ถูกต้อง
การแข่งขัน Lightness กับ Monica

2
ที่จริงแล้วใช่มันเป็นคำตอบสำหรับคำถามของเขา - มากกว่าคำตอบของไรอัน คำถามคือ "Wireshark ทำอย่างไร"; คำตอบของไรอันให้ข้อมูลมากมายเกี่ยวกับกลไกที่ WinPcap (ซึ่งเป็นสิ่งที่ Wireshark ใช้) ไม่ได้ใช้ดังนั้นมันจึงน่าสนใจอย่างแน่นอน แต่ไม่เกี่ยวข้องกับคำถามเดิม ลิงก์ที่ผมโพสต์อธิบายวิธีWinPcapไม่ได้ซึ่งเป็นที่เกี่ยวข้องกับคำถามเดิม

7
บางทีถ้าคุณอ้างถึงและอธิบายข้อความที่เกี่ยวข้องจากแหล่งข้อมูลบุคคลที่สาม หากไม่มีสิ่งใดคำตอบเฉพาะลิงก์ไม่ใช่คำตอบ นั่นคือนโยบาย SE คำตอบทั้งหมดของคุณเพิ่มลงในหน้านี้คือ "มีคำอธิบายว่าคำตอบของ Ries ทำงานที่อื่นบนอินเทอร์เน็ตได้อย่างไร"
Lightness Races with Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.