gpt4 book ai didi

C# 无法使用 UdpClient 接收 WOL 包

转载 作者:太空宇宙 更新时间:2023-11-03 13:53:56 24 4
gpt4 key购买 nike

我正在尝试在我的 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# 应用程序中)一个 Broadcasted UDP MagicPackage,我上面的代码会收到这个包。这个 MagicPackage 在 Wireshark 中显示如下: http://i.stack.imgur.com/tPU1v.png

所以我不能 100% 确定问题是不同的“目标”(192.168.1.254 与 255.255.255.255)还是不同的“协议(protocol)”(WOL 与 UDP)。我的猜测是,UdpClient 忽略了 WOL 包,因为它的目的地(在 IP header 内)是一个不同的 IP 地址(代码在机器 192.168.1.2 上运行)。另一方面,第二个包的 IP header 中的目标地址为“255.255.255.255”,因此被 UdpClient 捕获。

所以最大的问题是:我如何设置一个 UDP 监听器来接收路由器广播的 WOL 包?

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

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/en-us/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。

关于C# 无法使用 UdpClient 接收 WOL 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12922122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com