networking唤醒 – Linux – .Net核心
我已经做了一个小工具来发送一个神奇的数据包到我的networking上的计算机来唤醒他们。 它在Windows上完美工作,但是当从docker容器(linux)尝试相同的时候,我得到一个ArgumentException
exception。
任何人都可以解释这一点吗? 这是UDP实施中的错误吗? 是否与dockernetworking无法达到与主机相同的networking上的MAC地址?
我的代码:
public async Task<int> SendWakeOnLanAsync(byte[] mac) { Log.Information("Waking on MAC: {mac}", BitConverter.ToString(mac)); int counter = 0; byte[] bytes = new byte[6 * 17]; for (var i = 0; i < 6; i++) { bytes[counter++] = 0xFF; } //16x MAC for (var i = 0; i < 16; i++) { mac.CopyTo(bytes, 6 + i * 6); } try { using (var client = new UdpClient()) { client.EnableBroadcast = true; return await client.SendAsync(bytes, bytes.Length, new IPEndPoint(new IPAddress(0xffffffff), 0)); } } catch (Exception ex) { Log.Error(ex, "Exception during wake on lan request."); throw; } }
ArgumentException
trace:
at System.Net.Sockets.Socket.DoBeginSendTo(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, EndPoint endPointSnapshot, SocketAddress socketAddress, OverlappedAsyncResult asyncResult) at System.Net.Sockets.Socket.BeginSendTo(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, EndPoint remoteEP, AsyncCallback callback, Object state) at System.Net.Sockets.UdpClient.BeginSend(Byte[] datagram, Int32 bytes, IPEndPoint endPoint, AsyncCallback requestCallback, Object state) at System.Net.Sockets.UdpClient.<>c.<SendAsync>b__53_0(Byte[] targetDatagram, Int32 targetBytes, IPEndPoint targetEndpoint, AsyncCallback callback, Object state) at System.Threading.Tasks.TaskFactory`1.FromAsyncImpl[TArg1,TArg2,TArg3](Func`6 beginMethod, Func`2 endFunction, Action`1 endAction, TArg1 arg1, TArg2 arg2, TArg3 arg3, Object state, TaskCreationOptions creationOptions) at System.Threading.Tasks.TaskFactory`1.FromAsync[TArg1,TArg2,TArg3](Func`6 beginMethod, Func`2 endMethod, TArg1 arg1, TArg2 arg2, TArg3 arg3, Object state) at System.Net.Sockets.UdpClient.SendAsync(Byte[] datagram, Int32 bytes, IPEndPoint endPoint) at Asgard.WakeOnLan.Api.EthernetClient.<SendWakeOnLanAsync>d__0.MoveNext() in /builds/smarthome/Asgard.WakeOnLan.Api/src/Asgard.WakeOnLan.Api/EthernetClient.cs:line 42 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Asgard.WakeOnLan.Api.Controllers.WakeOnLanController.<Wake>d__2.MoveNext() in /builds/smarthome/Asgard.WakeOnLan.Api/src/Asgard.WakeOnLan.Api/Controllers/WakeOnLanController.cs:line 38 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeActionMethodAsync>d__27.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeNextActionFilterAsync>d__25.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeNextResourceFilter>d__22.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ResourceExecutedContext context) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeAsync>d__20.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.AspNetCore.Builder.RouterMiddleware.<Invoke>d__4.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.AspNetCore.Hosting.Internal.RequestServicesContainerMiddleware.<Invoke>d__3.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame`1.<RequestProcessingAsync>d__2.MoveNext()
这是因为所有系统都不支持将IP包发送到端口0。 尝试使用7或9代替(众所周知,但大多未使用的端口)。
- 在Docker中为自己的容器.Net Core应用程序指定运行时
- 在Linux上的Azure Web应用程序中运行dotnet核心docker映像时没有find可执行的匹配命令“dotnet – / .. /。dll”
- 如何将VS代码launch.json转换为Visual Studio launchSettings.json for .Net核心Web应用程序
- Bitbucketpipe道。 无法指定windowsservercore泊坞窗图像
- 使用适用于Docker的Visual Studio工具部署和debugging远程Linux Docker容器
- 缺less相同版本的框架上的命名空间
- Linux上的.NET Core如何确定SQL Server实例侦听的端口?
- dotnet运行不会使用bower软件包
- RUN命令不能访问卷