为什么 WriteFile 到 NDIS 会发送重复的帧?
Why WriteFile to NDIS send duplicate frames?
大家好,在此先感谢您的帮助,
我正在使用 WriteFile 函数 (fileapi.h) 直接在 MAC 地址之间将帧发送到以太网第 2 层的 NDIS 驱动程序。
帧发送正确,但在我所做的任何测试中,帧发送重复。我通过使用 WireShark 捕获输出来检测到这一点,其中表示以下内容:
在我发送的帧中,我在每次发送时增加一个计数器。此计数器在两个连续的帧中重复,它们具有由 WireShark 分配的不同帧编号。
这不是由于网络中的消息丢失以及网络中的另一设备转发消息而随机发生的事情。它发生在发送的每一帧上,它们完全相同,包括每两帧递增的计数器。
问题:
- NDIS 驱动程序中是否有设置此重复输出的参数。
- 我是否误解了 WireShark 捕获。
我看到了this post,并按照建议卸载并安装了 Ncap 和 WinCap,但没有任何区别。
非常感谢。最好的问候。
bSuccess = (BOOLEAN)WriteFile(
Handle,
pWriteBuf,
PacketLength,
&BytesWritten,
NULL);
DWORD err = GetLastError();
printf("ERROR: %i", err);
if (!bSuccess)
{
PRINTF(("DoWriteProc: WriteFile failed on Handle %p\n", Handle));
break;
}
解决了,我回答我的问题。
我正在使用的 NDIS driver 编译器在 send.c
文件中准备了 NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK
标志。
因此,根据this page的解释,可以取消原始计算机中的重复消息,因为在命运计算机中,最终这些消息并没有到达内部循环。
此致。
大家好,在此先感谢您的帮助,
我正在使用 WriteFile 函数 (fileapi.h) 直接在 MAC 地址之间将帧发送到以太网第 2 层的 NDIS 驱动程序。
帧发送正确,但在我所做的任何测试中,帧发送重复。我通过使用 WireShark 捕获输出来检测到这一点,其中表示以下内容:
在我发送的帧中,我在每次发送时增加一个计数器。此计数器在两个连续的帧中重复,它们具有由 WireShark 分配的不同帧编号。 这不是由于网络中的消息丢失以及网络中的另一设备转发消息而随机发生的事情。它发生在发送的每一帧上,它们完全相同,包括每两帧递增的计数器。
问题:
- NDIS 驱动程序中是否有设置此重复输出的参数。
- 我是否误解了 WireShark 捕获。
我看到了this post,并按照建议卸载并安装了 Ncap 和 WinCap,但没有任何区别。
非常感谢。最好的问候。
bSuccess = (BOOLEAN)WriteFile(
Handle,
pWriteBuf,
PacketLength,
&BytesWritten,
NULL);
DWORD err = GetLastError();
printf("ERROR: %i", err);
if (!bSuccess)
{
PRINTF(("DoWriteProc: WriteFile failed on Handle %p\n", Handle));
break;
}
解决了,我回答我的问题。
我正在使用的 NDIS driver 编译器在 send.c
文件中准备了 NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK
标志。
因此,根据this page的解释,可以取消原始计算机中的重复消息,因为在命运计算机中,最终这些消息并没有到达内部循环。
此致。