为啥 WriteFile 到 NDIS 发送重复帧?

Posted

技术标签:

【中文标题】为啥 WriteFile 到 NDIS 发送重复帧?【英文标题】:Why WriteFile to NDIS send duplicate frames?为什么 WriteFile 到 NDIS 发送重复帧? 【发布时间】:2021-08-20 17:02:25 【问题描述】:

大家好,提前感谢您的帮助,

我正在使用 WriteFile 函数 (fileapi.h) 将帧发送到以太网第 2 层级别的 NDIS 驱动程序,直接在 MAC 地址之间。

帧发送正确,但在我所做的任何测试中,帧都是重复发送的。我通过使用 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;
        

【问题讨论】:

【参考方案1】:

已解决,我回答我的问题。

我正在使用的NDIS driver 的编译,是在send.c 文件中的NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK 标志中准备的。

因此,根据this page的解释,可以取消源计算机中的重复消息,因为在命运计算机中,最终这些没有到达内部循环。

最好的问候。

【讨论】:

以上是关于为啥 WriteFile 到 NDIS 发送重复帧?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Node fs.writeFile() 方法成功了,但是却给浏览器发送了一个空文件?

为啥节点 10 强制在 fs.writeFile() 上传递回调?

发送在我的 NDIS 修改过滤器驱动程序中无法正常工作

Createfile2、ReadFile 和 WriteFile;为啥 ReadFile 不读取我在 WriteFile 中写的内容?

Pyspark:与使用 pandas 创建数据帧相比,为啥使用 pyspark 创建数据帧需要更多时间 [重复]

NDIS LWF 驱动程序导致网络堆栈中的 WFP 驱动程序出现问题?