Free my mind

qt에서의 libpcap 프로그래밍(4) 본문

pcap programing

qt에서의 libpcap 프로그래밍(4)

김뿡빵 2018.09.11 21:03

오랜만에 작성합니다.


오늘은 간단히 패킷 덤프 뜨는 과정을 소개해드립니다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    while (res=pcap_next_ex(pcd, &header,&Data))
    {
    int length=header->len;    // length 변수에 길이 저장
      printf("길이 : %d\n",length);
      count=0;  //count 변수는 16바이트씩 잘라서 출력을 하기위해 16을 카운트 해준다.
 
      while(length--)
      {
          printf("%02x ",*Data++);
          if(++count%16==0)
          {
              printf("\n");
          }
      }
 
      printf("\n");
 
    }
cs




저렇게 pcap_next_ex 함수는 , 패킷이 들어올 때 마다, 그때에 해당하는 패킷에 헤더의 길이와 데이터를 알 수 있다.

while (res=pcap_next_ex(pcd, &header,&Data))
    {

}


이 루프를 한번 돌 때 while 내부에서는 패킷 하나를 볼 수 있는 상태이다.



3~5라인에서는 현재 패킷의 길이를 length에 저장.


7~14 라인에서의 루프는 16진수 형식으로 출력하는 구문이다.


9라인에서 바이트값을 하나씩 읽어가며 출력한다. (length를 횟수로 카운트한다.)





다음 포스팅은 mac , ip 등등을 확인 할 수 있는 방법에 대해 소개하겠습니다.




전체 소스코드.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <iostream>
#include <pcap/pcap.h>
 
int main()
{
    char *dev;
    char *ebuf;
    int res=0;
    dev = pcap_lookupdev(ebuf);
    pcap_t *pcd; //패킷 핸들
    pcap_pkthdr *header; //패킷 헤더의 길이
    const u_char *Data;  //패킷 데이터(헥사 코드를 볼 수 있는 가장 중요한 변수)
    int count=0;
    pcd=pcap_open_live(dev,65535,0,0,ebuf);
 
    ///////////////////////////////////
    ///
    ///       패킷 덤프
    /// 
    ////////////////////////////////////
    
    
    while (res=pcap_next_ex(pcd, &header,&Data))
    {
    int length=header->len;    // length 변수에 길이 저장
      printf("길이 : %d\n",length);
      count=0;  //count 변수는 16바이트씩 잘라서 출력을 하기위해 16을 카운트 해준다.
 
      while(length--)
      {
          printf("%02x ",*Data++);
          if(++count%16==0)
          {
              printf("\n");
          }
      }
 
      printf("\n");
 
    }
}
 
cs


1 Comments
댓글쓰기 폼