2017-08-11 17 views
0

.NET Core MVCアプリケーションからlanパケットを受信しようとしています。ubuntuで.NETコアでwake on lanを送信できません

アプリケーションがWindowsホスト上でホストされている場合、それは完璧に動作しますが、それは(Ubuntuのメイトで)私のラズベリーパイ3で実行されているとき、私は次のエラーを取得:

fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[0] 
An unhandled exception has occurred: Permission denied 255.255.255.255:40000 
System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (0x80004005): Permission denied 255.255.255.255:40000 
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) 
at System.Net.Sockets.Socket.Connect(EndPoint remoteEP) 
at System.Net.Sockets.Socket.Connect(IPAddress address, Int32 port) 

私はこれを使用していますがWOLパケットを送信する:

public static bool WakeUp(string macAddress) 
    { 
     bool retVal = false; 
     try 
     { 
      byte[] mac = null; 

      // Parse string to byte array 
      string[] macDigits = null; 
      if (macAddress.Contains("-")) 
      { 
       macDigits = macAddress.Split('-'); 
      } 
      else 
      { 
       macDigits = macAddress.Split(':'); 
      } 

      if (macDigits.Length != 6) 
      { 
       //incorrect MAC address 
      } 
      else 
      { 
       mac = macDigits.Select(s => Convert.ToByte(s, 16)).ToArray(); 
      } 

      if (mac != null) 
      { 

       // WOL packet is sent over UDP 255.255.255.0:40000. 
       UdpClient client = new UdpClient(); 
       client.Client.Connect(IPAddress.Broadcast, 40000); 

       // WOL packet contains a 6-bytes trailer and 16 times a 6-bytes sequence containing the MAC address. 
       byte[] packet = new byte[17 * 6]; 

       // Trailer of 6 times 0xFF. 
       for (int i = 0; i < 6; i++) 
        packet[i] = 0xFF; 
       // Body of magic packet contains 16 times the MAC address. 
       for (int i = 1; i <= 16; i++) 
        for (int j = 0; j < 6; j++) 
         packet[i * 6 + j] = mac[j]; 

       // Submit 
       int result = client.Client.Send(packet); 
       if (result > 0) 
       { 
        retVal = true; 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      throw; 
     } 

     return retVal; 
    } 

テスト用にポートを2050に変更しました。>同じエラーです。

は、念のために、それは重要です、ここでProgram.csの

public class Program 
    { 
     public static void Main(string[] args) 
     { 
      BuildWebHost(args).Run(); 
     } 

     public static IWebHost BuildWebHost(string[] args) => 
      WebHost.CreateDefaultBuilder(args) 
      .UseStartup<Startup>() 
      .UseKestrel() 
      .UseUrls("http://*:80") 
      .UseContentRoot(Directory.GetCurrentDirectory()) 
      .Build(); 
    } 

の内容は、この原因何任意のアイデアですか?残りのアプリケーションは期待どおりに動作します。

答えて

3

それがブロードキャストを有効にした後、私の作品:

// UdpClient client = new UdpClient(); 
client.EnableBroadcast = true; 
+0

はあなたに多くのことを感謝!それはトリックをしました:-) – Pandora

関連する問題