Quy trình nhận và xử lý gói Wireshark trên máy Windows là gì?


20

Tôi sắp sử dụng Wireshark để theo dõi lưu lượng trên máy tính Windows của mình . Trong khi làm việc với nó, tôi đã tự hỏi làm thế nào Wireshark quản lý để bắt các gói mạng cấp thấp trước khi Windows thực hiện.

Trước hết, một giao diện mạng trên NIC của tôi nhận được một gói. Sau đó, NIC thực hiện một số kiểm tra ban đầu (CRC, đúng địa chỉ MAC, ... vv). Giả sử rằng việc xác minh đã thành công, thì NIC sẽ chuyển tiếp gói tin. Nhưng làm thế nào và ở đâu?

Tôi hiểu rằng trình điều khiển là chất kết dính giữa NIC và HĐH hoặc bất kỳ ứng dụng nào khác. Tôi đoán thêm rằng có một trình điều khiển riêng cho WindowsWireshark ( WinPcap ?). Nếu không, Wireshark sẽ không thể nhận khung Ethernet . Có hai hoặc nhiều trình điều khiển NIC cùng tồn tại cùng một lúc không? Làm thế nào để các NIC biết, sử dụng cái nào?


Tiền đề của bạn là không chính xác. NIC luôn chuyển gói tin cho Windows (cụ thể là trình điều khiển thiết bị và sau đó là ngăn xếp mạng) và tùy thuộc vào Windows để quyết định phải làm gì với nó. Windows có một tính năng trong đó một chương trình có thể yêu cầu nhận các bản sao của các gói "như trên dây", có lẽ áp dụng bộ lọc và Wireshark sử dụng tính năng đó. Wireshark không bỏ qua Windows.
zwol

(Có những hệ điều hành thử nghiệm giúp kết nối mạng tốc độ cực cao tốt hơn bằng cách cho phép các gói được gửi trực tiếp từ card mạng đến ứng dụng, nhưng Windows AFAIK không thể làm điều này: ít nhất bạn luôn phải đi qua lớp NDIS.)
zwol

Câu trả lời:


38

Mô hình I / O trong Windows dựa trên một chồng các thành phần. Dữ liệu phải chảy qua các thành phần khác nhau của ngăn xếp đó tồn tại giữa card mạng vật lý và ứng dụng sẽ tiêu thụ dữ liệu. Đôi khi, các thành phần khác nhau đó kiểm tra dữ liệu (ví dụ gói TCP) khi chúng chảy qua ngăn xếp và dựa trên nội dung của gói đó, dữ liệu có thể bị thay đổi hoặc gói có thể bị loại bỏ hoàn toàn.

Mạng ngăn xếp

Đây là một mô hình đơn giản hóa của "ngăn xếp mạng" mà các gói dữ liệu truyền qua để đi từ ứng dụng đến dây và ngược lại.

Một trong những thành phần thú vị nhất được hiển thị trong ảnh chụp màn hình ở trên là API chú thích WFP (Windows Filtering Platform). Nếu chúng ta phóng to về điều đó, nó có thể trông giống như thế này:

Nền tảng lọc Windows

Các nhà phát triển có thể tự do cắm các mô-đun của riêng họ vào các vị trí thích hợp trong ngăn xếp này. Chẳng hạn, các sản phẩm chống vi-rút thường sử dụng "trình điều khiển bộ lọc" cắm vào mô hình này và kiểm tra lưu lượng mạng hoặc cung cấp khả năng tường lửa. Dịch vụ Tường lửa Windows rõ ràng cũng phù hợp với mô hình này.

Nếu bạn muốn viết một ứng dụng ghi lại lưu lượng mạng, chẳng hạn như Wireshark, thì cách thích hợp để làm là sử dụng trình điều khiển của riêng bạn và chèn nó vào ngăn xếp càng thấp càng tốt để nó có thể phát hiện các gói mạng trước khi mô-đun tường lửa của bạn có cơ hội để thả chúng.

Vì vậy, có nhiều "trình điều khiển" tham gia vào quá trình này. Nhiều loại trình điều khiển khác nhau quá. Ngoài ra, các hình thức đầu vào / đầu ra khác trên hệ thống, chẳng hạn như ổ đĩa cứng đọc và ghi, theo các mô hình rất giống nhau.

Một lưu ý khác - chú thích WFP không phải là cách duy nhất để tự ám chỉ mình vào ngăn xếp mạng. WinPCap là một ví dụ, giao diện với NDIS trực tiếp với trình điều khiển, có nghĩa là nó có cơ hội chặn lưu lượng trước khi bất kỳ quá trình lọc nào diễn ra.

Trình điều khiển NDIS

WinPCap

Tài liệu tham khảo:

Ngăn xếp TCP / IP thế hệ tiếp theo trong Vista +

Kiến trúc nền tảng lọc Windows


3
Sơ đồ xuất sắc. Có phải chúng được đăng trên microsoft.com ở đâu đó không? Nếu vậy, tôi rất thích chọc ngoáy và xem những thông tin khác có sẵn cùng với những thông tin này.
EEAA

1
Câu trả lời hoàn hảo. Vâng và dễ dàng giải thích, trực quan tuyệt vời và các nguồn cung cấp! Cảm ơn bạn rất nhiều!
Hansi

1
+1, đáng nói là có một trình điều khiển nguồn mở được xây dựng trên đỉnh WFP khiến cho việc viết các ứng dụng như vậy gọi là WinDivert trở nên tầm thường . Tôi cũng đã viết một trình bao bọc .NET cho nó.

1
Nó từng là trường hợp có một thứ gọi là "Nhà cung cấp dịch vụ lớp" - nơi bạn có thể chặn và viết lại các gói - có thay thế cho khả năng đó không? Đây có phải là một phần của API "lọc" không? (Đợi đã, đừng bận tâm: Tôi chỉ nhìn vào liên kết WinDivert từ @TechnikEmpire và thấy điều đó là có thể.)
davidbak

1
@davidbak vâng, WinDivert là một loại lai. API trình điều khiển chú thích dành cho các nhà phát triển để xây dựng các trình điều khiển cụ thể có thể làm bất cứ điều gì ngoài việc đơn giản là bỏ một gói (không yêu cầu trình điều khiển). WinDivert là một trình điều khiển như vậy nhưng nó chung chung, cung cấp quyền truy cập đầy đủ vào các gói bằng cách đẩy và bật các gói vào và ra khỏi không gian chế độ kernel và chế độ người dùng.

3

Như câu trả lời của Ryan Ries nói:

WinPCap là một ví dụ, giao diện với NDIS trực tiếp với trình điều khiển, có nghĩa là nó có cơ hội chặn lưu lượng trước khi bất kỳ quá trình lọc nào diễn ra.

đây là một mô tả, trong tài liệu WinPcap, về cách thức hoạt động .


Điều này sẽ tốt hơn khi chỉnh sửa câu trả lời của Ryan. Đó không phải là một câu trả lời theo đúng nghĩa của nó.
Cuộc đua nhẹ nhàng với Monica

2
Trên thực tế, vâng, đó một câu trả lời cho câu hỏi của anh ấy - nhiều hơn câu trả lời của Ryan. Câu hỏi là "Wireshark làm điều đó như thế nào"; Câu trả lời của Ryan cung cấp nhiều thông tin về một cơ chế mà WinPcap (là thứ mà Wireshark sử dụng) không sử dụng, vì vậy nó chắc chắn rất thú vị, nhưng không liên quan đến câu hỏi ban đầu. Các liên kết Tôi posted mô tả cách WinPcap hiện nó, mà liên quan đến câu hỏi ban đầu.

7
Có lẽ nếu bạn trích dẫn và giải thích các đoạn có liên quan từ tài nguyên của bên thứ ba. Nếu không có gì khác, một câu trả lời chỉ liên kết không phải là một câu trả lời. Đó là chính sách SE. Tất cả câu trả lời của bạn thêm vào trang này là, theo nghĩa đen, "có một mô tả về cách câu trả lời của Ries hoạt động ở một nơi khác trên internet"
Cuộc đua của Lightness với Monica
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.