示例#1
0
        public ListenerHttp StartHttpListener(NewHttpListenerRequest request, AgentController agentController, CryptoController cryptoController, string user)
        {
            var listener = new ListenerHttp
            {
                ListenerName   = request.Name,
                Type           = ListenerType.HTTP,
                BindPort       = request.BindPort,
                ConnectAddress = request.ConnectAddress,
                ConnectPort    = request.ConnectPort
            };

            var module = new HttpCommModule
            {
                Listener = listener
            };

            HttpListeners.Add(module);

            module.Init(agentController, cryptoController);
            module.Start();

            OnServerEvent?.Invoke(this, new ServerEvent(ServerEventType.ListenerStarted, request.Name));
            Log.Logger.Information("LISTENER {Event} {ListenerName} {Nick}", ServerEventType.ListenerStarted.ToString(), request.Name, user);

            return(listener);
        }
示例#2
0
 public void UnregisterServerEvent(OnServerEvent callback)
 {
     if (onServerEvent != null)
     {
         onServerEvent -= callback;
     }
 }
示例#3
0
        public void RegisterServerModule(IServerModule module)
        {
            module.Init(this, AgentController);
            var info = module.GetModuleInfo();

            ServerModules.Add(info);
            OnServerEvent?.Invoke(this, new ServerEvent(ServerEventType.ServerModuleRegistered, info.Name));
            Log.Logger.Information("SERVER {Event} {ModuleName}", ServerEventType.ServerModuleRegistered.ToString(), info.Name);
        }
示例#4
0
 public void Stop()
 {
     foreach (var client in connections)
     {
         DisconnectClient(client);
     }
     connections.Clear();
     server.Stop();
     OnServerEvent.Invoke("Server stopped.");
 }
示例#5
0
 public void Start()
 {
     server.Start();
     OnServerEvent.Invoke("Server started.");
     while (true)
     {
         var tcpClient = server.AcceptTcpClientAsync().Result;
         ConnectClientAsync(tcpClient);
     }
 }
示例#6
0
        private void GettingData(object[] data, Connection sender)
        {
            OnGetDataFromClient.Invoke(data);
            var invoker = new HubInvoker();

            if (!invoker.TryInvoke(data))
            {
                OnServerEvent.Invoke("Hub or method not found");
            }
        }
示例#7
0
        public void Start()
        {
            ServerStatus = ModuleStatus.Running;


            Task.Factory.StartNew(delegate()
            {
                while (ServerStatus == ModuleStatus.Running)
                {
                    var commModules = ListenerController.HttpListenerController.HttpListeners.ToList();

                    foreach (var commModule in commModules)
                    {
                        if (commModule != null && commModule.RecvData(out Tuple <AgentMetadata, AgentMessage> data) == true)
                        {
                            if (data != null)
                            {
                                var message = data.Item2;

                                if (!IdempotencyKeys.Contains(message.IdempotencyKey))
                                {
                                    IdempotencyKeys.Add(message.IdempotencyKey);

                                    var checkinCallback = ServerModules
                                                          .Where(m => m.Name.Equals("Core", StringComparison.OrdinalIgnoreCase))
                                                          .Select(m => m.ServerCommands).FirstOrDefault()
                                                          .Where(c => c.Name.Equals("AgentCheckIn", StringComparison.OrdinalIgnoreCase))
                                                          .Select(c => c.CallBack).FirstOrDefault();

                                    // checkin the parent agent
                                    checkinCallback?.Invoke(data.Item1, null);

                                    // checkin the p2p agent
                                    if (!string.IsNullOrEmpty(message.Metadata.ParentAgentID))
                                    {
                                        checkinCallback?.Invoke(message.Metadata, message.Data);
                                    }

                                    if (!message.Data.Command.Equals("AgentCheckIn", StringComparison.OrdinalIgnoreCase))
                                    {
                                        HandleC2Data(message.Metadata, message.Data);
                                    }
                                }
                                else
                                {
                                    OnServerEvent?.Invoke(this, new ServerEvent(ServerEventType.IdempotencyKeyError, $"Duplicate Idempotency Key received for {message.Metadata.AgentID}"));
                                }
                            }
                        }
                    }
                }
            });
        }
示例#8
0
        public bool StopTcpListener(string listenerId, string user)
        {
            var listener = TcpListeners.FirstOrDefault(l => l.ListenerId.Equals(listenerId));

            if (listener != null)
            {
                OnServerEvent?.Invoke(this, new ServerEvent(ServerEventType.ListenerStopped, listenerId));
                Log.Logger.Information("LISTENER {Event} {ListenerName} {Nick}", ServerEventType.ListenerStopped.ToString(), listenerId, user);
            }

            return(TcpListeners.Remove(listener));
        }
示例#9
0
        public bool StopSmbListener(string listenerName, string user)
        {
            var listener = SmbListeners.FirstOrDefault(l => l.ListenerName.Equals(listenerName, StringComparison.OrdinalIgnoreCase));

            if (listener != null)
            {
                OnServerEvent?.Invoke(this, new ServerEvent(ServerEventType.ListenerStopped, listenerName));
                Log.Logger.Information("LISTENER {Event} {ListenerName} {Nick}", ServerEventType.ListenerStopped.ToString(), listenerName, user);
            }

            return(SmbListeners.Remove(listener));
        }
示例#10
0
        public bool StopHttpListener(string listenerId, string user)
        {
            var module = HttpListeners.FirstOrDefault(m => m.Listener.ListenerName.Equals(listenerId, StringComparison.OrdinalIgnoreCase));

            if (module != null)
            {
                module.Stop();

                OnServerEvent?.Invoke(this, new ServerEvent(ServerEventType.ListenerStopped, listenerId));
                Log.Logger.Information("LISTENER {Event} {ListenerName} {Nick}", ServerEventType.ListenerStopped.ToString(), listenerId, user);
            }

            return(HttpListeners.Remove(module));
        }
示例#11
0
        private void CreateSession(AgentMetadata metadata)
        {
            ConnectedAgents.Add(new AgentSessionData
            {
                Metadata  = metadata,
                FirstSeen = DateTime.UtcNow,
                LastSeen  = DateTime.UtcNow
            });

            var data = string.Format("{0}@{1} ({2})", metadata.Identity, metadata.IPAddress, metadata.Hostname);

            OnServerEvent?.Invoke(this, new ServerEvent(ServerEventType.InitialAgent, data));
            Log.Logger.Information("AGENT {Event} {AgentID} {Hostname}", ServerEventType.InitialAgent.ToString(), metadata.AgentID, metadata.Hostname);
        }
示例#12
0
 //===============================================================================
 public void RegisterServerEvent(OnServerEvent callback)
 {
     onServerEvent += callback;
 }
 private static void ServerEvent(object sender, EventArgs e)
 {
     OnServerEvent?.Invoke(typeof(ValheimServer), e);
 }