如何接收来自任何IP和任何端口的UDP数据包?

问题描述:

我想使用C#的UdpClient来侦听任何包含的UDP数据包。我想接收来自任何IP和任何端口的数据包。如何接收来自任何IP和任何端口的UDP数据包?

我试过如下:

UdpClient udpClient = new UdpClient(0); 
IPEndPoint ep = new IPEndPoint(IPAddress.Any, 0); 
byte[] data = udpClient.Receive(ref ep); 

但没有成功。

有谁知道最新错误? 在此先感谢!

+0

很确定你不能听那样的'每个'端口...不明白你为什么想要。 – Fosco 2010-07-21 15:47:10

+1

@Fosco:网络嗅探器? – MPritchard 2010-07-21 15:47:47

+1

@MPritch:那真的不是UDP。你会听原始的以太网数据包。 – 2010-07-21 15:51:42

接收任何端口?这太疯狂了。您将被其他应用程序的消息淹没(尝试使用TcpView来了解每秒钟系统上有多少消息传递给您!)

您必须指定一个端口!港口是有点像一个标识符 - 此包是为这个程序(通过端口号识别)

任何端口上发送是明智的,因为它要求系统选择一个端口发送OUT端口为你 - - 这对于您的应用程序来说并不重要,因为发件人有时可以使用

+2

Incase与否,有合法理由要这样做。它可以在混杂模式下使用RAW + UDP套接字(并以管理员级别运行)。 – 2014-09-25 20:57:57

+0

在任何港口接收它是如何“疯狂”,但不会在任何端口上发送*?如果逻辑是端口识别数据包指向哪个程序,那么这将适用于发送和接收,对吗? – Mud 2017-08-10 16:16:08

您需要监听特定的端口。

通过传入零,您被分配一个任意端口,因此您将只收到发往它的UDP数据报。换句话说,你什么都不会收到。

如果你确实收到了一些东西,IPEndPoint将被填入关于发件人的信息。初始值可以用来限制发件人。

您的最佳想法是识别您想要听的特定端口,然后开始聆听这些端口。根据收到的数据报完成的操作,为每个正在监听的端口创建一个新的Thread可能是最好/最简单的,并在那里处理它,或者将它排入同步(与lock)队列或列表中,以便处理一个中心线程。

您应该限制端口;不可能全部听取他们的意见。

也就是说你可以使用像WiresharkWinpcapSDK/API之类的东西,从网络适配器中直接“嗅探”UDP数据包。我已经在.NET应用程序中工作,没有太多困难。

希望有所帮助。

+0

示例API:pcapdotnet http://pcapdotnet.codeplex.com/ – 2010-07-31 04:43:18