프로그래밍/C

pcap

2017. 7. 13. 01:54

PCAP Analyse

H3X0R팀 소속 BoB 6기 ch4n3



tmp) 비오비 과제로 pcap을 이용해서 패킷을 캡쳐하고 분석하는 과제가 나왔는데 검색해보니까 pcap에 대해서 정리한 한국어 문서가 그리 많지가 않아서, 이를 계기로 내가 pcap 한글 문서의 선구자가 되려는 불순한 의도에 떠밀려 이 포스트를 작성하게 되었다. 


근데 워낙 pcap을 정리해놓은 사이트(http://www.tcpdump.org)에 정리가 잘되어 있기 때문에,, 내 글은 그리 영양가 없는 글이 될 것이라고 생각해본다. 


참고로, 나는 LINUX를 중심으로 함수를 써놓을 예정이다. 


PCAP_LOOKUPDEV() 함수

이 함수를 실행했던 때가 가장 신기했던 것 같다. 이 함수를 이용해서 기본 네트워크 디바이스 이름(default network device)을 알 수 있다. 이 함수는 네트워크 디바이스의 이름 문자열에 대한 포인터를 반환한다.


함수 실행에 실패한다면 NULL값을 반환하고, 인자로 받은 errbuf에 적절한 에러 메시지가 저장된다.


PCAP_OPEN_LIVE() 함수



일단 설명을 보면 패킷 캡처를 하기 위해서 네트워크 device를 연다고 한다. 이 함수는 패킷 캡처 핸들(packet capture)을 얻기 위해서 사용한다. 성공하면 pcap_t * 값을 반환하고 실패를 한다면 NULL값을 반환한다. 만약 NULL값이 반환되었다면, PCAP_LOOKUPDEV() 함수처럼 인자값으로 받은 errbuf에는 적절한 오류메시지로 채워진다.


두번째 인자인 snaplen은 handle에 설정할 snapshot의 길이를 의미한다.

세번째 인자인 promisc는 무차별모드로 설정될지 안될지 설정하는 인자이다. 값에 대한 설명은 자세히 나와있지 않다.

네번째 인자인 to_ms는 sleep()에 들어갈 인자와 같다. 비오비에서 얼핏들은 바로는, PCAP가 실제로 쓰이는 패킷 분석 프로그램의 용도로 제작되었기 때문에, 서버같은 곳에서 대용량 패킷이 들어올 것을 대비해서 만들어졌다고 했는데, 정확한 기억은 잘 나지 않는다.


참고로, 위 두개의 함수에서 공통적으로 필요한 errbuf의 크기는 적어도 PCAP_ERRBUF_SIZEPCAP_ERRBUF_SIZE 정도가 되어야 한다고 한다. 




'프로그래밍 > C' 카테고리의 다른 글

내가 생각한 C언어 웹서버 구현 원리중의 고민  (0) 2017.11.24
return과 exit()의 차이  (0) 2017.08.28
pcap  (0) 2017.07.13
zlib 분석  (0) 2017.07.08
GCC의 구조  (0) 2017.07.06
sql에서 NULL 비교  (0) 2017.03.31