我正嘗試在我的C#應用程序中接收WOL包。我猜爲什麼它不起作用的問題與運行DD-WRT的路由器如何播放軟件包有關。C#無法使用UdpClient接收WOL包
我用收到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上到達(不存在)IP的輸入UDP包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捕獲。
所以最大的問題是:我如何設置一個UDP偵聽器,同時接收由我的路由器廣播的WOL包?
BTW:我也已經與這個代碼,但沒有任何的運氣試了一下:
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);
謝謝,但我已經嘗試過,並沒有改變任何東西。 :-( – Maik
我無法使用原始套接字,但使用http://sourceforge.net/projects/sharppcap/(.net端口的winpcap)我能夠捕獲數據包。謝謝 – Maik