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パッケージを(存在しない)IP192.168.1.254にポート転送します。ルーターの起動時にコマンド「arp-ibr0-s 192.168.1.254 FF:FF:FF:FF:FF:FF」を実行して、そのIPで受信したメッセージをブロードキャストします。このセットアップは機能し、魔法のパッケージがすべてのマシンで受信され、ネットワークの外部からそれらをウェイクアップできます。
WireSharkはこのパッケージをキャッチできますが、「udp.Receive(refall);」です。ではありません。これは、Wiresharkでルーターに送信されるWOLパッケージがどのように見えるかを示しています:http: //i.stack.imgur.com/nxaAP.png
一方、(C#アプリケーション内から)Broadcasted UDP MagicPackageを送信すると、このパッケージは上記のコードで受信されます。このMagicPackageは次のようにWiresharkに表示されます:http: //i.stack.imgur.com/tPU1v.png
したがって、別の「宛先」(192.168.1.254と255.255.255.255)または別の「Protocoll」(WOLとUDP)が問題であるかどうかは100%わかりません。私の推測では、UdpClientはWOLパッケージを無視します。これは、宛先(IPヘッダー内)が別のIPアドレスであるためです(コードはマシン192.168.1.2で実行されています)。一方、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);