2011-10-20 14 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; 
} 
関連する問題