2011-10-20 2 views
0

libpcap 라이브러리를 사용하여 C에서 pcap 파일의 정보를 구문 분석하는 작업을하고 있습니다. 소스/목적지 IP 주소, TCP/UDP 포트 및 소스/목적지 이더넷 주소와 같은 데이터를 얻는 방법을 알아 냈습니다. 다음 목록은 네트워크 및 전송 계층 프로토콜에서 통계를 얻고 프로토콜 당 얼마나 많은 패킷을 얻는가입니다. 나는이 문제에 대한 접근 방법을 알아내는 데 어려움을 겪고 있으며, 누군가가 올바른 방향으로 나를 가리킬 수 있기를 바라고 있습니다. 다른 정보가 /usr/include/netinet.h와 같은 장소에서 여러 가지 데이터 구조로 수집 되었기 때문에이 정보는 어딘가에 있어야하지만 다시 한 번 잃어 버립니다.C에서 pcap의 네트워크 계층 및 전송 계층 프로토콜을 얻으려면 어떻게해야합니까?

답변

1

이미 답변을 얻은 것처럼 보입니다. IP는 네트워크 계층 프로토콜이므로 IP 주소를 찾을 수 있으면 IP 패킷 수를 계산할 수 있습니다. 유사하게 TCP와 UDP는 전송 계층 프로토콜입니다. 패킷에서 TCP/UDP 포트를 찾을 수 있다면 얼마나 많은 패킷이 어떤 프로토콜을 사용하고 있는지 알 수 있습니다. 콜백 함수에서

0

/* define/compute ip header offset */ 
ip = (struct sniff_ip*)(packet + SIZE_ETHERNET); 
size_ip = IP_HL(ip)*4; 
if (size_ip < 20) { 
    printf(" * Invalid IP header length: %u bytes\n", size_ip); 
    return; 
} 

switch(ip->ip_p) { 
case IPPROTO_TCP: 
/* define/compute tcp header offset */ 
    tcp = (struct sniff_tcp*)(packet + SIZE_ETHERNET + size_ip); 
    size_tcp = TH_OFF(tcp)*4; 
    if (size_tcp < 20) {printf(" * Invalid TCP header length: %u bytes\n", size_tcp); return; } 
    bytes_tcp+=ntohs(ip->ip_len); 
    packets_tcp++; 
    break; 
} 
case IPPROTO_UDP: 
    bytes_udp+=ntohs(ip->ip_len); 
    packets_udp++; 
break; 
} 
관련 문제