【发布时间】:2015-06-25 15:45:06
【问题描述】:
我编写了一个小应用程序来尝试显示捕获数据包的协议标头。我所有的数据包都是用 libpcap 的 pcap_loop 捕获的。我的程序的工作方式如下:我根据 if_ether.h ip.h 和 tcp.h 中定义的结构编写了自己的头文件。 pcap_loop 将 char 指针设置为数据包的开头,然后我逐步遍历数据包,每次都转换为适当的结构,并将指针增加标头的大小。现在重要的是要记住我的问题不是特定于代码的;我的代码有效,但存在我无法理解的逻辑缺陷;请记住,我的数据包是通过同一台机器,不同的端口发送的(我编写了微型 python 服务器,我使用 telnet 将数据发送到):
1.当数据包通过本地主机发送时,以太网标头不显示任何看起来正确的内容(当我在互联网数据包上使用我的程序时,MAC 地址会正确显示)
2.通过反复试验,我确定结构 iphdr 在数据包缓冲区开始后正好 16 个字节开始,而不是预期的 14 个字节,即以太网标头的大小
这些观察使我提出以下问题: 当数据包通过本地主机发送时,我们是否在第 2 层使用另一个协议? 有什么东西可以分隔数据包标头吗? ip.h 和 tcp.h 中定义的 iphdr 和 tcphdr 结构是否已过时?
【问题讨论】:
标签: c networking localhost pcap