我有一种情况,笔记本电脑通过以太网连接到外部硬件。
笔记本电脑可以窥视并戳硬件,即向硬件发送请求数据包,该请求数据包从笔记本电脑接收并解释的硬件生成响应数据包。
这一切都发生在LLC层,即相当低的级别。我手动组装构成请求数据包的字节,同样,我手动读取响应数据包字节。
我的问题是我并不总是“看到”响应数据包。并行运行wireshark我总能在线路上看到请求/响应数据包,但是有时我的代码“获取”响应数据包,有时却没有-接收是否成功是不确定的。 / p>
这是相关代码段,概述了我在做什么:
/* send packet */
if (pcap_sendpacket(pdw_io->pcap, buf, LEN_ETH_REQ_PKT)==-1) {
pcap_perror(pdw_io->pcap, 0);
print_err_log(ERR_LOG, "Error: pcap_sendpacket failed", __FILE__, __LINE__);
ret = 0;
}
free(buf);
/* logic here is that the next pkt after a request pkt is sent is *always*
* the corresponding response pkt */
ret = pcap_next_ex(pdw_io->pcap, &hdr, &response_buf);
发送始终有效,即我始终在Wireshark中看到该数据包。我总是看到外部硬件生成的响应数据包,其时间戳大约是请求后的10us。但是pcap_next_ex()只返回成功的一半(并用字节填充response_buf)。
我对这为什么感到困惑。请注意,在此测试过程中,线路上没有其他LLC数据包,只有请求响应对(通过wireshark观察到)