private static List<Object> GenerateNetworkTrainingData()
    {
        int type;
        String time;
        String dayOfWeek;
        String length;
        String ipAddress;
        var dataPoints = new List<Object>();

        int UsIpStart = 1056964608;
        int UsIpEnd = 1274120959;
        int intIp;
        DateTime date;
        Random rand = new Random();
        for (int i = 0; i < 10000; i++)
        {
            //Generate a type either 0 or 1
            type = rand.Next(2);

            //Generate a random day and fill in our strings
            date = RandomDateTimeEightToFive(rand);
            time = date.TimeOfDay.ToString();
            dayOfWeek = date.DayOfWeek.ToString();

            //generate a length of the packet between 100 and 2000
            length = rand.Next(100, 2000).ToString();

            //Get a random ip that falls in the us range
            intIp = rand.Next(UsIpStart, UsIpEnd + 1);
            ipAddress = "" + IntToByte(intIp, 3).ToString() + "." + IntToByte(intIp, 2).ToString() + "." + IntToByte(intIp, 1).ToString() + "." + IntToByte(intIp, 0).ToString();
            NetworkDataPoint dataPoint = new NetworkDataPoint(type, time, dayOfWeek, length, ipAddress);
            dataPoints.Add(dataPoint.AsDataObject());
        }

        return dataPoints;
    }
        /// <summary>
        /// Prints the time and length of each received packet
        /// </summary>
        private static void device_OnPacketArrival(object sender, CaptureEventArgs e)
        {
            // print out periodic statistics about this device
            var Now = DateTime.Now; // cache 'DateTime.Now' for minor reduction in cpu overhead
            var interval = Now - LastStatisticsOutput;

            var time = e.Packet.Timeval.Date;
            var len = e.Packet.Data.Length;
            var packet = PacketDotNet.Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);
            var ethernetPacket = (PacketDotNet.EthernetPacket)packet;

            var timeString = time.Hour.ToString() + ":" + time.Minute.ToString() + ":" + time.Second.ToString();

            if (interval > LastStatisticsInterval)
            {
                //NetworkDataPoint ndp = new NetworkDataPoint(timeString, time.DayOfWeek.ToString(), len.ToString(), ethernetPacket.SourceHwAddress.ToString());
                if (packet.PayloadPacket.GetType() == typeof(PacketDotNet.IPv4Packet))
                {
                    PacketDotNet.IPv4Packet ipPacket = (PacketDotNet.IPv4Packet)packet.PayloadPacket;
                    String source = ipPacket.SourceAddress.ToString();
                    String destination = ipPacket.DestinationAddress.ToString();
                    if(!IsPrivateOrMulticast(source) && IsPrivateOrMulticast(destination))
                    {
                        NetworkDataPoint ndp = new NetworkDataPoint(NetworkDataPoint.INCOMING, timeString, time.DayOfWeek.ToString(), len.ToString(), source);
                        controller.addDataPoint(container, ndp);
                    }
                    else if(IsPrivateOrMulticast(source) && !IsPrivateOrMulticast(destination))
                    {
                        NetworkDataPoint ndp = new NetworkDataPoint(NetworkDataPoint.OUTGOING, timeString, time.DayOfWeek.ToString(), len.ToString(), destination);
                        controller.addDataPoint(container, ndp);
                    }
                    Console.WriteLine("Source: {0} Destination: {1} Length: {2}", ipPacket.SourceAddress, ipPacket.DestinationAddress, len);
                }
                LastStatisticsOutput = Now;
            }
            // lock QueueLock to prevent multiple threads accessing PacketQueue at
            // the same time
            lock (QueueLock)
            {
                PacketQueue.Add(e.Packet);
            }
        }