我正在从事一项任务,使我使用libpcap库解析C中的pcap文件中的信息。我已经成功地弄清楚如何获取诸如源/目的IP地址,tcp/udp端口以及源/目标以太网地址等数据。列表中的下一步是从网络和传输层协议中查看统计数据以及每个协议有多少数据包。我恐怕似乎无法弄清楚如何获得这个信息,并希望有人可能指引我朝着正确的方向前进。由于其他信息是从诸如/usr/include/netinet.h等地方的各种数据结构中收集而来的,因此它应该也在某处,但是,我又有点失落。如何从C中的pcap获取网络层和传输层协议?
0
A
回答
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;
}
相关问题
- 1. 计算机网络中用于传输层协议实现的书
- 2. 有关网络层和传输层工作的说明
- 3. 网络或传输层模糊
- 4. 如何获取PCAP文件中的协议号码?
- 5. 理解/逆向工程顶层网络协议的好工具
- 6. 各种网络硬件的OSI协议层
- 7. 如何获得SLIM vgg16网络中某个图层的输出?
- 8. 原始套接字 - 网际协议层
- 9. 如何从pcap文件中删除以太网层?
- 10. 监控传输,网络和链路层缓存/ Linux中
- 11. 当etcd节点发出心跳时底层传输层协议是什么
- 12. XmlHttpRequest使用的底层传输协议是什么?
- 13. 如何听L3网络层?
- 14. Kaa网络和协议
- 15. 用于解析网络跟踪(PCAP)中的文本和二进制协议消息的Google协议缓冲区
- 16. 哪一方将在SSH传输层协议中启动版本协商?
- 17. 如何识别以太网后的下一层协议
- 18. 数据链路层和传输层
- 19. 以下哪项不是TCP/IP模型中的网络层协议?
- 20. 在互联网层或传输层完成校验和?
- 21. “应用层”与TCP网络模型的“传输层”有什么不同?
- 22. 解析网络协议的C++方法
- 23. 如何获取层次LINQ的C#
- 24. 如何读取Java中的网络流数据(协议包)
- 25. 任何将传输层协议名称映射到数字的方法?
- 26. 网络协议的实现
- 27. 如何训练网络的第一层?
- 28. 如何测量网络性能(如何基准网络协议)
- 29. 分层传输
- 30. 从千层面(蟒蛇深度神经网络框架)获取输出