繁体   English   中英

C#无法通过UdpClient接收WOL软件包

[英]C# Unable to receive WOL package with UdpClient

我正在尝试在C#应用程序中接收WOL软件包。 我猜为什么它不起作用的问题与运行DD-WRT的路由器广播包的方式有关。

我用来接收UDP包的代码:

   UdpClient udp = new UdpClient(10);
   IPEndPoint all = new IPEndPoint(IPAddress.Any, 0);
   while (true)
   {
     System.Diagnostics.Debug.Print("listening");
     byte[] receivedBytes = udp.Receive(ref all);
     System.Diagnostics.Debug.Print(Encoding.ASCII.GetString(receivedBytes));
   }

这已经可以在我的旧路由器上使用了,但是现在我正在运行DD-WRT,必须按以下方式进行设置:我将端口10上的传入UDP软件包移植到(不存在的)IP 192.168.1.254端口上。执行命令“ arp -i br0 -s 192.168.1.254 FF:FF:FF:FF:FF:FF”以广播在该IP上接收到的消息。 此设置有效,每台机器都会收到一个魔术包,我可以从网络外部唤醒它们。

WireShark可以捕获此软件包,但“ udp.Receive(ref all);” 不是。 这是WOL软件包发送到我的路由器的样子,在Wireshark中看起来像这样: http : //i.stack.imgur.com/nxaAP.png

另一方面,如果我从C#应用程序中发送广播的UDP MagicPackage,则上面的代码会接收到此包。 此MagicPackage在Wireshark中显示如下: http : //i.stack.imgur.com/tPU1v.png

因此,我不确定100%是否是其他“目标”(192.168.1.254与255.255.255.255)或其他“ Protocoll”(WOL与UDP)是问题所在。 我的猜测是,UdpClient会忽略WOL软件包,因为它的目的地(在IP标头中)是一个不同的IP地址(代码在机器192.168.1.2上运行)。 另一方面,第二个程序包的IP头中的目标地址为“ 255.255.255.255”,因此被UdpClient捕获。

因此,最大的问题是:如何设置同时接收路由器广播的WOL包的UDP侦听器?

顺便说一句:我也已经用这段代码尝试过了,但是没有运气:

Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
EndPoint iep = new IPEndPoint(IPAddress.Any, 10);
sock.Bind(iep);
byte[] data = new byte[1024];
int recv = sock.ReceiveFrom(data, ref iep);

检查此属性: http : //msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.enablebroadcast.aspx我相信WOL数据包是广播的。 在这种情况下,它应该有所帮助。

编辑:

检查您的Wireshark屏幕截图后,我认为问题不在您的代码中。 据我所知,网络堆栈中有很多过滤器。 第一个是MAC过滤器。 由于广播地址ff:ff:ff ...,WOL数据包将通过。...第二个过滤器位于IP地址上。 您的WOL数据包的目标IP ... 1.254,但是您的操作系统期望... 1.2,因此IP堆栈将抛出此数据包,您的应用程序将不会收到任何信息。 另一侧的Wireshark将网卡切换为“混杂模式”,其中所有过滤器均关闭,wireshark可以捕获所有内容。 所以要解决这个问题:

1)您可以使用一些捕获库来实现与Wireshark类似的行为-看一下WinPCAP- http://www.winpcap.org/

2)尝试使用RAW套接字,但是我不确定是否可以使用-http: //en.wikipedia.org/wiki/Raw_socket

3)最好的方法是将路由器修复为以标准格式发送WOL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM