WinPcap and Npcap

Windows에서 WinPcap을 dependency로 가지는 프로그램을 실행하였을 경우 다음과 같은 에러 메세지가 나는 경우가 종종 있다.

Unix 및 Linux에서 packet을 처리할 수 있는 pcap library를 Windows OS에서 사용할 수 있도록 해 온 것이 WinPcap 모듈이다. WinPcap은 예전에는 winpcap.polito.it에서 운영되다가 현재에는 www.winpcap.org 사이트에서 유지되고 있다.

WinPcap은 최신 버전이 WinPcap 4.1.3으로 최근 몇 년간 버전 업데이트가 되지 않고 있으며, WinPcap을 fork하여 새로운 프로젝트를 진행하고 있는 곳이 있는데 그것이 바로 Npcap이다.



설치상의 문제

문제는 WinPcap과과 Npcap을 동시에 설치해서 사용하는 경우 실행시에 예상치 않은 현상이 나타날 수 있다는 것이다. 여기에 대한 원인과 해결 방안을 정리해 본다.

  1. WinPcap은 wpcap.dll 및 Packet.dll 파일이 C:\Windows\System32 - (A) 폴더에 설치된다.

  2. Npcap은 wpcap.dll 및 Packet.dll 파일이 C:\Windows\System32\Npcap - (B) 폴더에 설치된다.

기존 어플은 (A) 폴더에서만 dll을 참조한다. 따라서 Npcap만 설치하고 기존 WinPcap 기반 어플을 실행하게 되면 위에서 보이는 것처럼 dll 참조 에러가 뜨게 된다(반면에 Windows용 Wireshark는 (A)와 (B)를 전부 참조하는 것으로 보임).



해결 방안

Npcap이 기존의 (A) 폴더가 아닌 새로운 (B) 폴더에 파일을 복사하는 것은 (아마도) WinPcap 하위 호환성에 대한 문제점을 우려해서인 듯 하다. 그런데 몇몇 기존의 WinPcap 기반의 어플들을 테스트해 본 결과 Npcap 모듈을 사용해도 큰 문제점을 발견할 수가 없었다.

  1. WinPcap과 Npcap을 동시에 설치해서 운영하면 안된다. WinPcap만 설치하거나 혹은 Npcap만 설치하거나. 후자를 추천함.

  2. 이를 위해서 Npcap을 설치할 때 dll 파일들이 (B)가 아닌 (A)에 위치할 수 있도록 설치를 하면 된다. 이를 위해서 Npcap을 설치할 때 “Install Npcap in WinPcap API-compatible Mode” 옵션을 check하고 설치를 한다.

  3. “WinPcap API-compatible Mode” 옵션을 check하지 않고 설치를 했다면 System Path에 (B) 폴더를 추가해 주면 된다.



wpcap.dll 및 Packet.dll의 별도의 사용

일부 어플리케이션의 경우 pcap 관련 파일들을 실행 파일과 같은 폴더에 넣어 사용하는 경우가 있다. snort 최선 버전(Snort_2_9_13_Installer.exe)을 설치할 때 bin 폴더를 보면 다음과 같이 dll 파일들(WinPcap 버전)이 같은 폴더에 있는 것을 확인할 수 있다.

이 경우 snort.exe를 실행하면 정상적인 결과가 나오지 않을 수 있다.

snort.exe와 같은 폴더에 있는 wpcap.dll 및 Packet.dll 파일을 지우고 나서 다시 실행하면 정상적인 결과가 나오게 된다.

시스템에 설치되어 있는 것은 Npcap인데 snort.exe가 참조하는 dll 파일들은 예전 버전이어서 이러한 현상이 나타나는 것으로 보인다. 이러한 방식(dll을 exe와 같은 폴더에 복사해서 사용)을 사용하는 경우에는 case by case 별로 dll 참조를 찾아서 문제점을 해결해야 하는 번거로움이 있다.

현재 Npcap은 WinPcap의 차기 버전의 과도기적인 단계로 보인다. 그냥 Npcap을 사용하지 않고 WinPcap을 설치하고 사용하는 것이 마음이 편할 수도 있겠다.



간단 요약

  1. 기존의 WinPcap 모듈을 전부 삭제하고, Npcap 모듈을 설치할 때 WinPcap API-compatible Mode을 check하고 설치를 한다.

  2. 1번 설치에 의해 특정 어플이 정상 작동이 되지 않는 경우, 그냥 Npcap을 설치하지 말고 기존 WinPcap을 설치해서 사용하도록 한다.