본문 바로가기
네트워크

Libpcap (Pcap) 라이브러리

by 상레알 2010. 6. 23.

Libpcap(pcap) Portable Packet Capturing Library의 줄임말이며 해석 그대로 간단하게 패킷을 캡쳐하기 위한 함수 모음(라이브러리) 이다. 물론 pcap이외에도 패킷 캡쳐를 위한 도구들이 있기는 하지만, 대부분의 경우 운영체제에 종속적이여서, 운영체제별로 코드를 다시 짜야한다는 불편함이 있다. 대표적인 도구로는 SOCK_PACKET, LSF, SNOOP, SNIT 등이 있다.

이에 비해 pcap는 운영체제에 상관없이 범용적으로 사용가능한 API를 제공해줌으로, 공용프로그램 혹은 공용 라이브러리의 제작이 가능하도록 도와준다. 또한 간단하게 사용가능한 사용자 레벨 라이브러리이다. 

libpcap를 이용한 가장 대표적인 프로그램이 tcpdump 와 SAINT와 같은 프로그램들이다.
또한 상용 IDS제품의 상당수가 패킷 분석을 위해서 libpcap을 사용하고 있다.

여기서 착각을 할 수 있는 부분이 패킷캡쳐라는게 패킷을 잡아서 조작 즉, 변조를 할수 있을거라고 생각할지도 모르지만 패킷캡
쳐는 패킷을 잡는것이 아니라  단순히 네트웍 상에서 돌아다니는 패킷을 들여다 보는 걸 말한다.


위 그림은 네트워크에서의 인캡슐화(encapuslation) 과정과 디멀티플랙싱(demultiplexing) 과정에 대한 그림이다. 위 그림처럼 인터넷 상의 패킷은 상대방에게 보낼경우 인캡슐화와디멀티플랙싱과정을 거치게 된다. libpcap을 이용하여 캡쳐한 패킷은 디멀티 플랙싱과정을 거치지 전의 패킷이다. 이렇게 해서 캡쳐한 패킷은 각 프로토콜 단위로(구조체)읽어서 처리하면 된다.
 
여기서 Encapsulation에 대해 설명하자면    user application에서 만들어진 유저 데이타는 각각의 계층을 거치면서 필요한 정보를 유저 데이타에 덧붙이게 된다. 이러한 과정이 내용물을 캡슐에 담는것과 비슷하다고 해서 Encapsulation 이라고 불리우게 된다.

그리고 Demultiplexing은  인터넷 통신의 최종목적은 user data를 전달하기 위한것이며, 여기에 TCP/IP를 각 계층별로 나누어서 데이타를 캡슐화하는 등의 온갖 부산을 떠는 것은 user data가 원하는 곳으로 전송되도록 하기 위한 부가적인 작업들이다. 그러므로 일단 각종 프로토콜 헤더로 캡슐화된 데이타가 도착을 하게되면, 데이타를 받은 호스트에서는 user data를 추출해 내는 일을 하게 되는데, 이를 Demultiplexing 이라고 한다.

참고

[1]
http://www.joinc.co.kr/modules/moniwiki/wiki.php/article/libpcap%C0%BB_%C0%CC%BF%EB%C7%D1_%C7%C1%B7%CE%B1%D7%B7%A1%B9%D6

[2]http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Network_Programing/Documents/IntroTCPIP3