C# BeginReceiveFrom回调方法仅在运行数据包嗅探器时调用

C# BeginReceiveFrom回调方法仅在运行数据包嗅探器时调用,c#,network-programming,C#,Network Programming,我正在使用异步套接字发送和接收UDP数据包。发送部分工作正常,但接收端工作不正常,从未调用回调方法 然而,当我运行Wireshark检查UDP数据报是否到达时,突然执行了回调。谁能解释一下为什么会这样 谢谢 Wireshark将您的NC设置为混杂模式-您有点像嗅探器。然后你就可以得到不属于你的数据包 也许您发送的数据包中有一些更改的字段,这使得NC在“正常”模式下看不到他 例如ICMP Echo: ICMP是ping命令背后的协议。要ping一台机器,您向它发送一个ICMP回显请求数据包,并等待

我正在使用异步套接字发送和接收UDP数据包。发送部分工作正常,但接收端工作不正常,从未调用回调方法

然而,当我运行Wireshark检查UDP数据报是否到达时,突然执行了回调。谁能解释一下为什么会这样


谢谢

Wireshark将您的NC设置为混杂模式-您有点像嗅探器。然后你就可以得到不属于你的数据包

也许您发送的数据包中有一些更改的字段,这使得NC在“正常”模式下看不到他

例如ICMP Echo:

ICMP是ping命令背后的协议。要ping一台机器,您向它发送一个ICMP回显请求数据包,并等待一个ICMP响应数据包。通常,ICMP请求嵌入在以太网数据包中,通过网络传输。标准以太网数据包将包括寻址网卡的MAC地址,以及嵌入式ICMP数据包中该机器的IP地址。数据包将被相应的卡检测到,该机器将响应ping。这是标准流程

现在,让我们看看如果我们发送了一个ping数据包(ICMP Echo request one),该数据包的IP地址是可疑的嗅探器地址,但以太网信封中有一个不同的错误MAC地址,会发生什么

  • 如果嗅探器机器中的网卡未处于混杂模式,则该机器将不会接收数据包。当然,机器不会响应。ping尝试将失败

  • 如果嗅探器机器中的网卡处于混杂模式,则机器将看到网络中的所有数据包。因此,该机器上的TCP/IP堆栈将通过识别接收到的数据包IP地址来接受ping数据包。因此,堆栈将发送一个响应。ping尝试将成功


把你的代码放在这里,会更容易:)

一些代码可以帮助回答你的问题这确实是发生的事情。UDP数据包来自使用微芯片以太网控制器的开发板。固件将错误的MAC地址放入UDP报头,因此在未运行Wireshark且我的NIC处于混杂模式的情况下,数据包被拒绝。谢谢你的指点!