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

时间:2011-02-14 14:34:04

标签: c# network-programming

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

Wireshark让你的NC进入了顽固的模式 - 你就像嗅探器一样。然后你可以获得不适合你的数据包。

也许您发送包含一些更改字段的数据包,这使得NC处于“正常”模式时看不到他?

E.g ICMP Echo:

ICMP是ping命令背后的协议。要对计算机执行ping操作,请向其发送ICMP Echo请求数据包并等待ICMP响应。通常,ICMP请求嵌入在以太网数据包中以通过网络传送。标准以太网数据包将包括所寻址的网卡的MAC地址,以及嵌入式ICMP数据包中该机器的IP地址。该数据包将被适当的卡检测到,该机器将响应ping。这是标准流程。

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

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

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

将代码放在这里,会更容易:)