Free my mind
qt에서의 libpcap 프로그래밍(4) 본문
오랜만에 작성합니다.
오늘은 간단히 패킷 덤프 뜨는 과정을 소개해드립니다.
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 |
'pcap programing' 카테고리의 다른 글
qt에서의 libpcap 프로그래밍(3) (0) | 2018.05.30 |
---|---|
tcp 체크섬 계산시 오류 (2) | 2018.05.29 |
qt에서의 libpcap 프로그래밍(2) (0) | 2018.05.25 |
qt에서의 libpcap 프로그래밍(1) (0) | 2018.05.25 |
libpcap 을 구동할 ubuntu 환경설정 (QT) (1) | 2018.05.17 |
Comments