2011-10-20 60 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; 
}