首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从C语言中的pcap获取网络层和传输层协议?

问如何从C语言中的pcap获取网络层和传输层协议?
EN

Stack Overflow用户
提问于 2011-10-21 06:56:02
回答 2查看 797关注 0票数 1

我正在做一项任务,让我使用libpcap库从C语言的pcap文件中解析信息。我已经成功地弄清楚了如何获得源/目标ip地址、tcp/udp端口和源/目标以太网地址等数据。列表中的下一步是从所见的网络和传输层协议获取统计信息,以及每个协议有多少数据包。恐怕我不太清楚如何访问它,我希望有人能给我指出正确的方向。由于其他信息是从/usr/include/netinet.h等位置的各种数据结构中收集的,因此这些信息也应该在其中的某个位置,但是,我还是有点迷惑。

EN

回答 2

Stack Overflow用户

发布于 2011-10-21 07:20:42

看起来你已经有了answers...IP是一个网络层协议,所以如果你能找到IP地址,你就可以计算IP数据包。同样,TCP和UDP也是传输层协议。如果您可以在数据包中找到TCP/UDP端口,那么您就已经知道有多少数据包正在使用哪种协议。

票数 2
EN

Stack Overflow用户

发布于 2012-02-24 21:02:36

在回调函数中

代码语言:javascript
复制
/* 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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7843244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档