🔥 Npcap
✅ Npcap 요약
Windows 운영체제를 위한 네트워크 패킷 캡처 및 분석 아키텍처이며 소프트웨어 라이브러리와 커널 레벨 네트워크 드라이버로 구성
✅ 주요 특징 및 기능
- 원시 패킷 접근: 일반적인 소켓 방식과 달리, 운영체제의 프로토콜 처리 과정을 거치지 않고 네트워크상의 ‘원시(raw)’ 데이터 패킷에 직접 접근할 수 있음
- 패킷 캡처: 로컬 머신으로 오가는 패킷뿐만 아니라, (공유 미디어 환경에서) 다른 호스트 간에 교환되는 패킷까지 캡처할 수 있음
- 패킷 필터링: 사용자가 정의한 규칙에 따라 패킷을 필터링하여 필요한 데이터만 애플리케이션에 전달할 수 있음
- 패킷 전송: 원시 패킷을 네트워크로 직접 전송하는 기능을 제공함
- 통계 수집: 네트워크 트래픽에 대한 통계 정보를 수집할 수 있음
✅ 사용 분야
Npcap은 네트워크 분석, 문제 해결, 보안, 모니터링 등 다양한 목적으로 활용함.
- 네트워크/프로토콜 분석기
- 네트워크 모니터 및 트래픽 로거
- 트래픽 생성기
- 네트워크 침입 탐지 시스템 (NIDS)
- 네트워크 스캐너 및 보안 도구
✅ 제한 사항
Npcap은 호스트의 TCP/IP 프로토콜 스택과 독립적으로 작동하며 동일한 시스템 내의 다른 프로그램이 생성하는 트래픽을 가로채거나, 필터링하거나, 조작할 수는 없음.

✅ Npcap (및 libpcap) 주요 함수
1. pcap_findalldevs
pcap_findalldevs(pcap_if_t **alldevsp, char *errbuf)
- 기능:
시스템에 존재하는 모든 네트워크 장치(인터페이스)의 목록을 검색
- 반환:
성공하면 0을 반환하고,alldevsp
가 가리키는 포인터에pcap_if_t
구조체들의 연결 리스트(linked list) 주소를 저장
실패하면 -1을 반환하고errbuf
에 오류 메시지를 저장

2. pcap_freealldevs
pcap_freealldevs(pcap_if_t *alldevs)
- 기능:
함수로 할당된 장치 목록 메모리를 해제하는 함수
사용이 끝난 후 반드시 호출해야 메모리 누수를 막을 수 있음

3. pcap_open_live
pcap_open_live(const char *device, int snaplen, int promisc, int to_ms, char *errbuf)
- 기능:
지정된 네트워크 장치를 열어 실시간 패킷 캡처를 위한 세션 핸들(pcap_t *
)을 얻는 함수 device
: 캡처할 네트워크 장치의 이름 (예:pcap_findalldevs
로 얻은 이름)snaplen
: 캡처할 패킷의 최대 크기 (byte). 패킷 전체를 캡처하려면 충분히 큰 값(예: 65535)을 지정promisc
: 무차별 모드(promiscuous mode) 설정 여부. 1로 설정하면 자신에게 오지 않는 패킷도 캡처to_ms
: 읽기 타임아웃 시간 (밀리초)errbuf
: 오류 발생 시 오류 메시지를 저장할 버퍼

4. pcap_loop
pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
- 기능:
패킷 캡처 루프를 시작하는 함수. 패킷이 캡처될 때마다 지정된 콜백 함수(callback
)를 호출 p
: 세션 핸들.cnt
: 캡처할 패킷의 수. 음수나 0이면 오류가 발생하거나 중단될 때까지 계속 캡처합니다.callback
: 패킷이 캡처될 때 호출될 함수 포인터. 이 함수는(u_char *user, const struct pcap_pkthdr *header, const u_char *packet)
형태의 인자를 받습니다.user
: 콜백 함수에 전달될 사용자 정의 데이터 포인터.

5. pcap_close
pcap_close(pcap_t *p)
- 기능:
캡처 세션을 닫고 관련 리소스를 해제하는 함수pcap_open_live
등으로 열었던 핸들은 반드시 이 함수로 닫아야 함.
