[WinPcap] : 패킷을 캡쳐하는 API의 윈도우 모듈
랜카드는 몇 킬로바이트의 아주 작은 메모리만을 가지고 있기 때문에 최대한 빨리 컴퓨터에게 패킷을 넘기거나 버려야 한다.
랜카드는 패킷을 받자마자 CRC 에러 체크 같은 간단한 처리를 하여 깨지지 않은 것이라고 판단되면 즉시 버스 컨트롤러에게 패킷을 가져가라고 요청한다.
이 요청에 의해 랜카드에서 컴퓨터 NIC(Network Interface Card) Driver Packet Buffer로 패킷이 옮겨지게 된다.
이와 동시에 APIC(Advanced Programmable Interrupt Controller) 칩에게 하드웨어 인터럽트를 보낸다. APIC 칩은 운영체제의 인터럽트 처리 루틴을 깨우고 NIC 디바이스 드라이버의 ISR(Interrupt Service Routine)을 실행시킨다.
인터럽트 처리 부분이 크면 메인 루틴 실행에 영향을 줄 수 있으므로 인터럽트는 최소화 해야 한다.
따라서 ISR 역시 아주 적은 일만 하므로 우선순위도 낮게 책정되는데 이를 DPC(Deferred Procedure Call)라고 한다.
CPU는 현재 기다리고 있는 인터럽트가 없으면 이 DPC를 실행시켜 상위의 프로토콜 계층 드라이버나 패킷캡쳐 드라이버에게 패킷이 도착했음을 알리게 된다.
인터럽트는 다른 작업을 모두 멈추고 특정 작업을 우선적으로 처리해야 하고, 오버헤드가 큰 동작이기 때문에 랜카드는 가능하면 한 번의 인터럽트에 여러 패킷을 처리한다.
1. 주요 기능
- 네트워크 디바이스 장치로 들어오는 패킷 캡처
- 응용프로그램에 패킷이 전달되기전에, 사용자가 정의한 룰에 의한 필터링
- 다른 네트워크로 원시 raw packet 전송
- 네트워크 트래픽에 대한 통계 수집
2. Winpcap으로 만들수 있는 프로그램
-
network and protocol analyzers
- network monitors
- traffic loggers
- traffic generators
- user-level bridges and
routers
- network intrusion detection systems (NIDS)
- network
scanners
- security tools
3. 대표적인 프로그램
- WinDump
- WireShark
패킷 캡쳐 드라이버 : WinPcap
WinPcap은 랜카드를 통해 도착한 패킷이 DPC(Deferred Procedure Call)에 의해 상위 계층 드라이버로 넘어가는 사이에 삽입한다.
패킷캡쳐는 메시지 훅처럼 지나가는 길에 끼어들어 내용을 보기만 하는 것이기 때문에 하단이나 상단 계층의 구성원들에게 약간의 시간 지연 빼고는 아무런 영향을 미치지 않는다.
이 훅이 실행하는 함수는 tap()이라는 함수다.
Tap 함수는 BPF(Berkley Packet Filter)에서 구조를 받아 온 것으로 BPF의 Tap 함수와 거의 같은 기능을 한다.
Tap은 우선 모든 IP를 통과 시키라든지 하는 필터링 작업을 먼저 한다.
그리고 물리 계층에서 넘겨온 패킷의 길이나 수신한 시간 같은 것들을 처리하고 커널 버퍼에 패킷을 복사한다.
커널 버퍼는 사용자 계층에서 패킷 내용을 읽어 가기 전까지 패킷이 저장되는 공간이다.
WinPcap은 패킷이 랜카드에서 응용프로그램까지 전달되는 경로 중에서 DPC 다음에 패킷 캡쳐 드라이버를 삽입함으로써 패킷을 가로챌 수 있는 것이다.
출처 : http://cafe.naver.com/networksvalley/190
'Security > Monitoring' 카테고리의 다른 글
[JPCAP] JPCAP 라이브러리 설치 및 사용 for linux (0) | 2014.12.09 |
---|---|
[PCAP] Publicly available PCAP files (0) | 2014.12.09 |
[jpcap] JPCAP을 이용한 패킷스니핑 (0) | 2014.12.04 |
[Cacti] Install and Configure Cacti 설치하다 발생한 문제 (0) | 2014.12.04 |
[Cacti] Cannot connect to MySQL server on 'localhost'... (0) | 2014.12.04 |
댓글