コード例 #1
0
        public void ChatMessage(string sender, string receiver, string message)
        {
            if (receiver == sender)
            {
                foreach (User u in server.users)
                {
                    try
                    {
                        Physician p = (Physician)u;
                        if ((p != null) && (receiver == sender))
                        {
                            if (p.hashClient(sender) && (receiver == sender))
                            {
                                receiver = p.username;
                            }
                        }
                    }
                    catch { }
                }
            }

            ServerClient client = server.getUser(receiver);

            if (client != null)
            {
                Console.WriteLine("sending packet to: " + client.user.username);

                NetworkFlow.SendPacket(new PacketChatMessage(message, sender, receiver), client.stream);
            }
        }
コード例 #2
0
 public ServerClient(TcpClient client, Serverapplication server, SslStream stream)
 {
     this.server = server;
     this.client = client;
     this.stream = stream;
     if (client != null)
     {
         new Thread(() =>
         {
             BinaryFormatter formatter = new BinaryFormatter();
             while (client.Connected)
             {
                 Packet packet = NetworkFlow.ReadPacket(stream);
                 if (packet != null)
                 {
                     Console.WriteLine("recieved packet");
                     packet.handleServerSide(this);
                 }
             }
             server.getConnectedClients().Remove(this);
             if (user != null)
             {
                 user.isOnline = false;
             }
             Console.WriteLine("Client disconnected");
         }).Start();
     }
 }
コード例 #3
0
 public void Broadcast(string sender, string message)
 {
     foreach (User user in server.users)
     {
         ServerClient client = server.getUser(user.username);
         NetworkFlow.SendPacket(new PacketBroadcastResponse(sender, message), stream);
     }
 }
コード例 #4
0
        public void BikeValues(string power, string time, string distance, string username)
        {
            ServerClient client = server.getUser(username);

            if (client != null)
            {
                Console.WriteLine("Send bike values to: " + client.user.username);
                NetworkFlow.SendPacket(new PacketBikeValuesResponse(power, time, distance), client.stream);
            }
        }
コード例 #5
0
ファイル: NetworkCommunication.cs プロジェクト: xrgman/Zooi
 private void ReceiveThread()
 {
     while (true)
     {
         Packet packet = NetworkFlow.ReadPacket(ssl);
         if (packet != null)
         {
             packet.handleClientSide(parent);
         }
     }
 }
コード例 #6
0
 public SessionEventArgs(NetworkFlow flow, PacketParser.ApplicationLayerProtocol protocol, long startFrameNumber)
 {
     this.Protocol         = protocol;
     this.Client           = flow.FiveTuple.ClientHost;
     this.Server           = flow.FiveTuple.ServerHost;
     this.ClientPort       = flow.FiveTuple.ClientPort;
     this.ServerPort       = flow.FiveTuple.ServerPort;
     this.Tcp              = flow.FiveTuple.Transport == FiveTuple.TransportProtocol.TCP;
     this.StartFrameNumber = startFrameNumber;
     this.StartTimestamp   = flow.StartTime;
     this.flow             = flow;
 }
コード例 #7
0
 public void GiveUser(string username, bool allUsers, string physicianName)
 {
     Console.WriteLine("Someone is requesting the user: "******"*"))
     {
         NetworkFlow.SendPacket(new PacketGiveUserResponse(server.GetConnectedUsers(physicianName)), stream);
         Console.WriteLine("Sending all users " + allUsers);
     }
     else
     {
         Console.WriteLine("Sending user: " + server.getUserClient(username));
         NetworkFlow.SendPacket(new PacketGiveUserResponse(server.GetUserFromPhysician(username)), stream);
     }
 }
コード例 #8
0
 public void Login(string username, string password)
 {
     Console.WriteLine("Iemand probeert in te loggen als " + username + ", wachtwoord: " + password);
     //Actual login checking:
     foreach (User user in server.users)
     {
         if (user.username.ToLower().Equals(username.ToLower()))
         {
             if (PasswordHash.ValidatePassword(password, user.password)) //succesfull login
             {
                 NetworkFlow.SendPacket(new PacketLoginResponse(true, user is Physician), stream);
                 Console.WriteLine("{0} succesfully logged in.", username);
                 if (user is Physician)
                 {
                     this.user = user;
                 }
                 else
                 {
                     this.user = server.GetUserFromPhysician(username);
                 }
                 this.user.isOnline = true;
                 Console.WriteLine("This is the user: "******"wrong password");
                 NetworkFlow.SendPacket(new PacketLoginResponse(false, user is Physician), stream);
                 break;
             }
         }
     }
 }
コード例 #9
0
        public static async void Run(string nsgFlowBlob, ICollector <string> outputQueueItem, TraceWriter log,
                                     IQueryable <NetworkFlowProcessStatus> updateStatusIn, CloudTable updateStatusOut)
        {
            HashSet <NetworkFlow> outboundMsgList = new HashSet <NetworkFlow>();
            NsgFlowEvents         nsgEvents       = JsonConvert.DeserializeObject <NsgFlowEvents>(nsgFlowBlob);
            string   nsg           = null;
            DateTime lastProcessed = new DateTime();
            NetworkFlowProcessStatus flowStatusRecord = new NetworkFlowProcessStatus();

            foreach (NsgFlowEvents.Record flowEvent in nsgEvents.records)
            {
                DateTime flowCaptureTime = DateTime.Parse(flowEvent.time);

                // Idenfity the NSG flow log being processed so we can get the last process time from the table
                // This function is triggered on new or *updated* NSG flow log files. Multiple functions could be processing different files
                // in parallel. Uniquely identify each file by the first event timestamp and record the "last processed" records in table storage
                // using the first event timestamp as the primary key. This way, network flows are not processed more than once.
                if (string.IsNullOrEmpty(nsg))
                {
                    nsg = flowEvent.resourceId;
                    flowStatusRecord = updateStatusIn.Where(l => l.RowKey == flowCaptureTime.Ticks.ToString()).FirstOrDefault();

                    if (flowStatusRecord == null)
                    {
                        flowStatusRecord = new NetworkFlowProcessStatus
                        {
                            LastProcessedTime = flowCaptureTime.ToLongTimeString(),
                            PartitionKey      = "trniel",
                            RowKey            = flowCaptureTime.Ticks.ToString()
                        };

                        log.Info($"No processing history found");
                    }
                    else
                    {
                        lastProcessed = DateTime.Parse(flowStatusRecord.LastProcessedTime);
                        log.Info($"NSG flow last processed event: {lastProcessed.ToLongTimeString()}");
                    }
                }

                // Skip records we already processed
                if (flowCaptureTime > lastProcessed)
                {
                    foreach (NsgFlowEvents.Flows flowCollection in flowEvent.properties.flows)
                    {
                        if (flowCollection.rule == "DefaultRule_AllowInternetOutBound")
                        {
                            foreach (NsgFlowEvents.Flow flowItem in flowCollection.flows)
                            {
                                string[] tupleItems = flowItem.flowTuples;

                                foreach (string tuple in tupleItems)
                                {
                                    string[] tupleData = tuple.Split(',');

                                    NetworkFlow msg = new NetworkFlow
                                    {
                                        NsgID    = flowEvent.resourceId,
                                        DestIP   = tupleData[2],
                                        DestPort = tupleData[4],
                                        Protocol = tupleData[5]
                                    };

                                    outboundMsgList.Add(msg);
                                }
                            }
                        }
                    }

                    lastProcessed = flowCaptureTime;
                }
            }

            string messageText = JsonConvert.SerializeObject(outboundMsgList);

            outputQueueItem.Add(messageText);

            // Update the processing status table to we don't process these flows again once the flow log is updated
            flowStatusRecord.LastProcessedTime = lastProcessed.ToLongTimeString();
            TableOperation operation = TableOperation.InsertOrReplace(flowStatusRecord);

            updateStatusOut.Execute(operation);
        }
コード例 #10
0
ファイル: NetworkCommunication.cs プロジェクト: xrgman/Zooi
 public void sendPacket(Packet packet)
 {
     NetworkFlow.SendPacket(packet, ssl);
 }
コード例 #11
0
        public void Start()
        {
            const bool debug_netflow = true;

            TemplatesV10 _templates_v10 = new TemplatesV10();
            TemplatesV9  _templates_v9  = new TemplatesV9();

            try
            {
                Console.WriteLine("Listening for IPFix Packets\n");
                Socket     sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                IPEndPoint iep  = new IPEndPoint(IPAddress.Any, 9996);
                sock.Bind(iep);
                EndPoint ep   = iep;
                byte[]   data = new byte[2048];

                while (true)
                {
                    int    recv   = sock.ReceiveFrom(data, ref ep);
                    byte[] _bytes = new byte[recv];

                    for (int i = 0; i < recv; i++)
                    {
                        _bytes[i] = data[i];
                    }
                    NetflowCommon common = new NetflowCommon(_bytes);
                    if (common._version == 5)
                    {
                        PacketV5 packet = new PacketV5(_bytes);
                        if (debug_netflow)
                        {
                            Console.WriteLine(String.Format("Received {0}v netflow packet: {1}", common._version, JsonConvert.SerializeObject(packet)));
                        }
                    }
                    else if ((common._version == 9))
                    {
                        if (_bytes.Count() > 16)
                        {
                            V9Packet packet = new V9Packet(_bytes, _templates_v9);

                            Modules.Netflow.v9.FlowSet _flowset = packet.FlowSet.FirstOrDefault(x => x.Template.Count() != 0);
                            if (_flowset != null)
                            {
                                foreach (Modules.Netflow.v9.Template _template in _flowset.Template.Where(x => x.Field.Any(y => y.Value.Count != 0)))
                                {
                                    NetworkFlow networkFlow = new NetworkFlow();
                                    NetworkFlow _netflow    = networkFlow;

                                    if (_template.Field.Exists(x => x.GetTypes() == (ushort)Modules.Netflow.v9.FieldType.IPV4_SRC_ADDR))
                                    {
                                        _netflow.Source_address = new IPAddress(_template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v9.FieldType.IPV4_SRC_ADDR).Value.ToArray()).ToString();
                                        _netflow.Target_address = new IPAddress(_template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v9.FieldType.IPV4_DST_ADDR).Value.ToArray()).ToString();
                                    }
                                    else if (_template.Field.Exists(x => x.GetTypes() == (ushort)Modules.Netflow.v9.FieldType.IPV6_SRC_ADDR))
                                    {
                                        _netflow.Source_address = new IPAddress(_template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v9.FieldType.IPV6_SRC_ADDR).Value.ToArray()).ToString();
                                        _netflow.Target_address = new IPAddress(_template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v9.FieldType.IPV6_DST_ADDR).Value.ToArray()).ToString();
                                    }
                                    if (_template.Field.Exists(x => x.GetTypes() == (ushort)Modules.Netflow.v9.FieldType.L4_SRC_PORT))
                                    {
                                        _netflow.Source_port = BitConverter.ToUInt16(_template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v9.FieldType.L4_SRC_PORT).Value.ToArray().Reverse().ToArray(), 0);
                                    }
                                    if (_template.Field.Exists(x => x.GetTypes() == (ushort)Modules.Netflow.v9.FieldType.L4_DST_PORT))
                                    {
                                        _netflow.Target_port = BitConverter.ToUInt16(_template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v9.FieldType.L4_DST_PORT).Value.ToArray().Reverse().ToArray(), 0);
                                    }
                                    if (_template.Field.Exists(x => x.GetTypes() == (ushort)Modules.Netflow.v9.FieldType.PROTOCOL))
                                    {
                                        _netflow.Protocol = _template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v9.FieldType.PROTOCOL).Value[0];
                                    }
                                    if (_template.Field.Exists(x => x.GetTypes() == (ushort)Modules.Netflow.v9.FieldType.FIRST_SWITCHED))
                                    {
                                        _netflow.Start_timestamp = BitConverter.ToUInt16(_template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v9.FieldType.FIRST_SWITCHED).Value.ToArray().Reverse().ToArray(), 0);
                                    }
                                    if (_template.Field.Exists(x => x.GetTypes() == (ushort)Modules.Netflow.v9.FieldType.LAST_SWITCHED))
                                    {
                                        _netflow.Stop_timestamp = BitConverter.ToUInt16(_template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v9.FieldType.LAST_SWITCHED).Value.ToArray().Reverse().ToArray(), 0);
                                    }
                                    _netflow.Timestamp = DateTime.UtcNow;
                                    if (_template.Field.Exists(x => x.GetTypes() == (ushort)Modules.Netflow.v9.FieldType.IN_PKTS))
                                    {
                                        _netflow.Packets = BitConverter.ToUInt16(_template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v9.FieldType.IN_PKTS).Value.ToArray().Reverse().ToArray(), 0);
                                    }
                                    if (_template.Field.Exists(x => x.GetTypes() == (ushort)Modules.Netflow.v9.FieldType.IN_BYTES))
                                    {
                                        _netflow.Kbyte = BitConverter.ToUInt16(_template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v9.FieldType.IN_BYTES).Value.ToArray().Reverse().ToArray(), 0);
                                    }
                                    _netflow.Id = Guid.NewGuid().ToString().Replace("-", "");

                                    if (debug_netflow)
                                    {
                                        Console.WriteLine(String.Format("Received {0}v netflow packet: {1}", common._version, JsonConvert.SerializeObject(_netflow)));
                                    }
                                }
                            }
                        }
                    }
                    else if (common._version == 10)
                    {
                        if (_bytes.Count() > 16)
                        {
                            V10Packet packet = new V10Packet(_bytes, _templates_v10);
                            Modules.Netflow.v10.FlowSet _flowset = packet.FlowSet.FirstOrDefault(x => x.Template.Count() != 0);
                            if (_flowset != null)
                            {
                                foreach (Modules.Netflow.v10.Template _template in _flowset.Template.Where(x => x.Field.Any(y => y.Type == "sourceTransportPort" && y.Value.Count > 0)))
                                {
                                    NetworkFlow _netflow = new NetworkFlow
                                    {
                                        Id              = Guid.NewGuid().ToString().Replace("-", ""),
                                        Source_port     = BitConverter.ToUInt16(_template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v10.FieldType.sourceTransportPort).Value.ToArray().Reverse().ToArray(), 0),
                                        Target_port     = BitConverter.ToUInt16(_template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v10.FieldType.destinationTransportPort).Value.ToArray().Reverse().ToArray(), 0),
                                        Protocol        = _template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v10.FieldType.protocolIdentifier).Value[0],
                                        Start_timestamp = (long)BitConverter.ToUInt64(_template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v10.FieldType.flowStartMilliseconds).Value.ToArray().Reverse().ToArray(), 0),
                                        Stop_timestamp  = (long)BitConverter.ToUInt64(_template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v10.FieldType.flowEndMilliseconds).Value.ToArray().Reverse().ToArray(), 0),
                                        Timestamp       = DateTime.UtcNow,
                                        Packets         = BitConverter.ToUInt16(_template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v10.FieldType.packetDeltaCount).Value.ToArray().Reverse().ToArray(), 0),
                                        Kbyte           = BitConverter.ToUInt16(_template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v10.FieldType.octetDeltaCount).Value.ToArray().Reverse().ToArray(), 0)
                                    };
                                    if (_template.Field.Exists(x => x.GetTypes() == (ushort)Modules.Netflow.v10.FieldType.sourceIPv4Address))
                                    {
                                        _netflow.Source_address = new IPAddress(_template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v10.FieldType.sourceIPv4Address).Value.ToArray()).ToString();
                                        _netflow.Target_address = new IPAddress(_template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v10.FieldType.destinationIPv4Address).Value.ToArray()).ToString();
                                    }
                                    else if (_template.Field.Exists(x => x.GetTypes() == (ushort)Modules.Netflow.v10.FieldType.sourceIPv6Address))
                                    {
                                        _netflow.Source_address = new IPAddress(_template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v10.FieldType.sourceIPv6Address).Value.ToArray()).ToString();
                                        _netflow.Target_address = new IPAddress(_template.Field.FirstOrDefault(x => x.GetTypes() == (ushort)Modules.Netflow.v10.FieldType.destinationIPv6Address).Value.ToArray()).ToString();
                                    }
                                    if (debug_netflow)
                                    {
                                        Console.WriteLine(String.Format("Received {0}v netflow packet: {1}", common._version, JsonConvert.SerializeObject(_netflow), Formatting.Indented));
                                    }
                                }
                            }
                            else
                            {
                                Console.WriteLine(String.Format("Template not known for this flow yet: {0}", packet.FlowSet.First().ID));
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(String.Format("Fatal Error {0}", ex.Message));
            }
        }