Example #1
0
        public override double ComputeFeature(L7Conversation l7Conversation, DaRFlowDirection flowDirection)
        {
            IEnumerable <L7PDU> pdus;

            switch (flowDirection)
            {
            case DaRFlowDirection.up:
                pdus = l7Conversation.UpFlowPDUs;
                break;

            case DaRFlowDirection.down:
                pdus = l7Conversation.DownFlowPDUs;
                break;

            case DaRFlowDirection.non:
                pdus = l7Conversation.L7PDUs;
                break;

            default: throw new ArgumentOutOfRangeException(nameof(flowDirection), flowDirection, null);
            }

            var l7Pdus = pdus as L7PDU[] ?? pdus.ToArray();

            if (!l7Pdus.Any())
            {
                return(-1);
            }

            var length    = l7Pdus.Count();
            var pdusArray = l7Pdus.ToArray();

            if (length <= 1)
            {
                return(0);
            }

            var minTime = Math.Abs((pdusArray[1].FirstSeen - pdusArray[0].FirstSeen).TotalSeconds);

            for (var i = 1; i < length - 1; i++)
            {
                var interArrivalTime = Math.Abs((pdusArray[i + 1].FirstSeen - pdusArray[i].FirstSeen).TotalSeconds);

                if (minTime.CompareTo(interArrivalTime) > 0)
                {
                    minTime = interArrivalTime;
                }
            }

            return(minTime);
        }
 public MaxInterArrivalTimeBase(L7Conversation l7Conversation, DaRFlowDirection flowDirection) : base(l7Conversation, flowDirection)
 {
 }