Windows 컴퓨터에서 Wireshark 패킷 수신 및 처리 절차는 무엇입니까?


20

Windows 컴퓨터 에서 일부 트래픽 모니터링에 Wireshark 를 사용 하려고 합니다. 작업하는 동안 WiresharkWindows 보다 낮은 수준의 네트워크 패킷을 캡처 하는 방법을 궁금해했습니다 .

우선, NIC의 네트워크 인터페이스가 패킷을 수신합니다. 그런 다음 NIC는 몇 가지 초기 검사 (CRC, 올바른 MAC 주소 등)를 수행합니다. 확인이 성공했다고 가정하면 NIC는 패킷을 전달합니다. 그러나 어떻게 그리고 어디서?

드라이버는 NIC와 OS 또는 다른 응용 프로그램 사이의 접착제입니다. 또한 WindowsWireshark ( WinPcap ?) 용 별도의 드라이버가 있다고 생각합니다 . 그렇지 않으면 Wireshark이더넷 프레임 을 수신 할 수 없습니다 . 두 개 이상의 NIC 드라이버가 동시에 공존합니까? NIC는 어떤 것을 사용해야하는지 어떻게 알 수 있습니까?


전제가 잘못되었습니다. NIC는 항상 패킷을 Windows (특히, 장치 드라이버 및 네트워크 스택)로 전달하며, 패킷으로 무엇을할지 결정하는 것은 Windows의 책임입니다. Windows에는 프로그램이 "유선에있는 것처럼"패킷의 사본을 수신하도록 요청할 수있는 기능이 있으며, 아마도 필터를 적용 할 수 있으며 Wireshark는이 기능을 사용합니다. Wireshark는 Windows를 우회 하지 않습니다 .
zwol 2016 년

(패킷을 네트워크 카드에서 응용 프로그램으로 직접 전달하여 초고속 네트워킹을 더 잘 수행하려는 실험적인 운영 체제가 있지만 AFAIK Windows에서는이를 수행 할 수 없습니다. 항상 NDIS 계층을 통과해야합니다.)
zwol 2016 년

답변:


38

Windows의 I / O 모델은 구성 요소 스택을 기반으로합니다. 데이터는 실제 네트워크 카드와 데이터를 소비 할 응용 프로그램 사이에있는 해당 스택의 다양한 구성 요소를 통과해야합니다. 때로는 이러한 다양한 구성 요소가 스택을 통과 할 때 데이터 (예 : TCP 패킷)를 검사하고 해당 패킷의 내용에 따라 데이터가 변경되거나 패킷이 완전히 삭제 될 수 있습니다.

네트워크 스택

애플리케이션에서 와이어로 또는 그 반대로 전달하기 위해 패킷이 통과하는 "네트워크 스택"의 단순화 된 모델입니다.

위 스크린 샷에서 가장 흥미로운 구성 요소 중 하나는 WFP (Windows Filtering Platform) 콜 아웃 API입니다. 확대하면 다음과 같이 보일 수 있습니다.

Windows 필터링 플랫폼

개발자는 자신의 모듈을이 스택의 적절한 위치에 자유롭게 꽂을 수 있습니다. 예를 들어 안티 바이러스 제품은 일반적으로이 모델에 플러그인하고 네트워크 트래픽을 검사하거나 방화벽 기능을 제공하는 "필터 드라이버"를 사용합니다. Windows 방화벽 서비스도이 모델에도 적합합니다.

Wireshark와 같은 네트워크 트래픽을 기록하는 응용 프로그램을 작성하려면 자신의 드라이버를 사용하여 가능한 낮은 스택에 삽입하여 네트워크 패킷을 감지하는 것이 좋습니다. 방화벽 모듈이이를 삭제하기 전에

따라서이 과정에 관련된 많은 "드라이버"가 있습니다. 다양한 유형의 드라이버도 있습니다. 또한 하드 디스크 드라이브 읽기 및 쓰기와 같은 시스템의 다른 형식의 입 / 출력도 매우 유사한 모델을 따릅니다.

또 다른 참고 사항-WFP 콜 아웃이 네트워크 스택에 자신을 격리시키는 유일한 방법은 아닙니다. 예를 들어, WinPCap은 NDIS와 드라이버와 직접 인터페이스하므로 필터링이 발생하기 전에 트래픽을 가로 챌 수 있습니다.

NDIS 드라이버

WinPCap

참고 문헌 :

Vista +의 차세대 TCP / IP 스택

Windows 필터링 플랫폼 아키텍처


3
뛰어난 다이어그램. microsoft.com에 게시되어 있습니까? 그렇다면, 나는 주변을 둘러보고 다른 정보가 무엇인지 알고 싶습니다.
EEAA

1
완벽한 답변. 잘 설명 된 멋진 시각화 및 소스 제공! 정말 고맙습니다!
한시

1
+1, WFP 위에 오픈 소스 드라이버가 내장되어 WinDivert 라는 애플리케이션을 작성하는 것이 쉽지 않다는 점을 언급 할 가치가 있습니다. 또한 .NET 래퍼 도 작성 했습니다.

1
예전에는 "Layered Service Provider"라는 것이 있었는데, 패킷을 가로 채서 다시 쓸 수있는 부분이 있었 습니까? "필터링"API의 일부입니까? (오, 기다리지 말아라 : @TechnikEmpire의 WinDivert 링크를보고 그것이 가능하다는 것을
알았다

1
@davidbak 예, WinDivert는 일종의 하이브리드입니다. 콜 아웃 드라이버 API는 개발자가 단순히 패킷을 삭제 (드라이버가 필요 없음)하는 것 이상의 모든 작업을 수행 할 수있는 특정 드라이버를 빌드하기위한 것입니다. WinDivert는 그러한 드라이버이지만 일반적이며 커널 및 사용자 모드 공간에서 패킷을 푸시 및 팝하여 패킷에 대한 전체 액세스를 제공합니다.

3

Ryan Ries의 답변에 따르면 다음과 같습니다.

예를 들어 WinPCap은 드라이버와 직접 NDIS와 인터페이스하기 때문에 필터링이 발생하기 전에 트래픽을 가로 챌 수 있습니다.

그리고 이것은 WinPcap 설명서에서 그 작동 방식에 대한 설명입니다 .


Ryan의 답변을 편집하는 것이 더 좋았을 것입니다. 그 자체로는 답이 아닙니다.
모니카와 가벼운 레이스

2
사실, 그래, 그것은 이다 보다는 이렇게 라이언의 대답은 - 그의 질문에 대한 대답은. 문제는 "Wireshark는 어떻게 하는가"였습니다. Ryan의 답변은 WinPcap (Wireshark가 사용하는 방식) 사용 하지 않는 메커니즘에 대한 많은 정보를 제공 하므로 흥미롭지 만 원래 질문과 관련이 없습니다. 내가 게시 된 링크는 방법을 설명 은 WinPcap이 있는, 그것을 않습니다 입니다 원래의 질문과 관련.

7
타사 리소스의 관련 구절을 인용하고 설명한 경우 일 수 있습니다. 다른 것이 없으면 링크 전용 답변은 답변이 아닙니다. 이것이 SE 정책입니다. 이 페이지에 추가 한 모든 답변은 말 그대로 "인터넷에서 다른 곳에서 Ries의 답변이 작동하는 방식에 대한 설명이 있습니다"
Monica와 Lightness Races
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.