我正在做一项任务,让我使用libpcap库从C语言的pcap文件中解析信息。我已经成功地弄清楚了如何获得源/目标ip地址、tcp/udp端口和源/目标以太网地址等数据。列表中的下一步是从所见的网络和传输层协议获取统计信息,以及每个协议有多少数据包。恐怕我不太清楚如何访问它,我希望有人能给我指出正确的方向。由于其他信息是从/usr/include/netinet.h等位置的各种数据结构中收集的,因此这些信息也应该在其中的某个位置,但是,我还是有点迷惑。
发布于 2011-10-21 07:20:42
看起来你已经有了answers...IP是一个网络层协议,所以如果你能找到IP地址,你就可以计算IP数据包。同样,TCP和UDP也是传输层协议。如果您可以在数据包中找到TCP/UDP端口,那么您就已经知道有多少数据包正在使用哪种协议。
发布于 2012-02-24 21:02:36
在回调函数中
/* 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;
}https://stackoverflow.com/questions/7843244
复制相似问题