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

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

问题描述:

我正在使用异步套接字发送和接收UDP数据包。事情的发送部分工作正常,但事物的接收方不起作用,回调方法从不调用。BeginReceiveFrom仅在运行数据包嗅探器时调用的回调方法

但是,当我运行Wireshark检查UDP数据报到达时,突然执行回调。任何人都可以阐明为什么这应该是什么?

谢谢!

+1

一些代码,可以帮助回答你的问题 – gor 2011-02-14 14:43:53

Wireshark将您的数控系统设置为promisuous模式 - 您就像嗅探器一样。然后你可以得到数据包,这不是你想要的。

也许你发送的数据包有一些改变的字段,这使NC处于“正常”模式下看不到他?

E.g ICMP回应:

ICMP是ping命令后面的协议。为了ping一台机器,你发送一个ICMP回应请求包给它,并等待一个ICMP响应。通常,ICMP请求被嵌入在以太网数据包中,并通过网络传送。标准的以太网数据包将包括所寻址网卡的MAC地址以及嵌入式ICMP数据包中该机器的IP地址。数据包将被适当的卡检测到,并且该机器将响应ping。这是标准过程。

现在让我们看看如果我们发送一个ping数据包(ICMP Echo request one)与可疑的嗅探器地址的IP地址但在以太网包络中具有不同的有故障的MAC地址会发生什么。

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

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

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

+0

这的确是发生了什么事。 UDP数据包来自使用Microchip以太网控制器的开发板。固件将错误的MAC地址放入UDP标头,因此如果Wireshark没有运行,并且我的NIC处于混杂模式,则数据包将被拒绝。感谢指针! – 2011-03-09 12:51:11