예제 #1
0
 protected override void OnInput(DataFrame frame)
 {
     for (int i = 0; i < Config.DuplicationCount; ++i)
     {
         WriteOutput(frame.CloneFrame());
     }
 }
예제 #2
0
        protected override void OnInput(DataFrame frame)
        {
            DataNode[] nodes = frame.SelectNodes(SelectionPath);

            if (nodes.Length > 1)
            {
                for (int i = 0; i < nodes.Length; ++i)
                {
                    DataFrame newFrame = frame.CloneFrame();

                    DataNode[] newNodes = newFrame.SelectNodes(SelectionPath);

                    for (int j = 0; j < newNodes.Length; ++j)
                    {
                        if (j != i)
                        {
                            newNodes[j].RemoveNode();
                        }
                    }

                    newFrame.Current = newNodes[i];
                    WriteOutput(newFrame);
                }
            }
            else
            {
                WriteOutput(frame);
            }
        }
예제 #3
0
        /// <summary>
        /// Add a simple packet with a tag and a frame
        /// </summary>
        /// <param name="tag">The tag to add</param>
        /// <param name="frame">The frame to add, this will be cloned before putting in log</param>
        /// <returns>The logged packet</returns>
        public LogPacket AddPacket(string tag, DataFrame frame)
        {
            LogPacket ret = new LogPacket(tag, Guid.NewGuid(), "Packet Log", frame.CloneFrame(), ColorValue.White);

            AddPacket(ret);

            return(ret);
        }
예제 #4
0
 private void toolStripButtonUndo_Click(object sender, EventArgs e)
 {
     _currFrame = _oldFrame.CloneFrame();
     UpdateFrame();
     UpdateFrameModified();
     toolStripButtonUndo.Enabled     = false;
     toolStripButtonSnapshot.Enabled = false;
 }
예제 #5
0
        /// <summary>
        /// Set the frame to edit
        /// </summary>
        /// <param name="frame">The data frame</param>
        /// <param name="selector">Root selection path</param>
        /// <param name="color">The colour to display the frame in (if applicable)</param>
        public void SetFrame(DataFrame frame, string selector, Color color)
        {
            toolStripButtonSnapshot.Enabled = false;
            toolStripButtonUndo.Enabled     = false;
            _oldFrame  = frame;
            _currFrame = frame.CloneFrame();
            _selector  = selector;
            _color     = color;

            UpdateFrame();
        }
예제 #6
0
        /// <summary>
        /// Internal write function
        /// </summary>
        /// <param name="frame">The frame to write</param>
        /// <param name="nodes">The list of nodes to write to</param>
        private void WriteOutput(DataFrame frame, OutputNode[] nodes)
        {
            try
            {
                // Leave this like it is for legacy reasons.
                if (frame == null)
                {
                    foreach (OutputNode node in nodes)
                    {
                        node.Node.Shutdown(this);
                    }
                }
                else
                {
                    _outputPacketCount++;
                    _byteCount += frame.Length;
                    if (LogOutput)
                    {
                        LogPacket(String.Format("{0} Output", Name), new ColorValue(255, 255, 255), frame, false);
                    }

                    if (nodes.Length == 1)
                    {
                        // If we only have one output then don't need to clone
                        nodes[0].Node.Input(frame);
                    }
                    else
                    {
                        foreach (OutputNode node in nodes)
                        {
                            DataFrame newFrame = frame.CloneFrame();

                            node.Node.Input(newFrame);
                        }
                    }
                }
            }
            catch (ThreadAbortException)
            {
                // If we get a thread abort it probably means we want to go away
                throw;
            }
            catch (Exception ex)
            {
                // Back stop, do nothing but write to log
                LogException(ex);
            }
        }
예제 #7
0
파일: NetGraph.cs 프로젝트: wflk/canape
        /// <summary>
        /// Log a packet from the graph
        /// </summary>
        /// <param name="tag">A textual tag for the frame</param>
        /// <param name="color">The color to display the frame (if applicable)</param>
        /// <param name="frame">The frame to log, note this must be cloned to preserve its value</param>
        /// <param name="logAsBytes">Indicates whether the packet should be logged as a byte array</param>
        /// <param name="path">Selection path for which part of the packet to log</param>
        private void OnLogPacket(string tag, ColorValue color, DataFrame frame, bool logAsBytes, string path)
        {
            EventHandler <LogPacketEventArgs> logPacketEvent = LogPacketEvent;

            if (logPacketEvent != null)
            {
                DataFrame logFrame = null;
                if (path != "/")
                {
                    DataNode node = frame.SelectSingleNode(path);

                    if (node != null)
                    {
                        node = node.CloneNode();

                        DataKey key = node as DataKey;
                        if (key != null)
                        {
                            logFrame = new DataFrame(key);
                        }
                        else
                        {
                            logFrame = new DataFrame();
                            logFrame.Root.AddSubNode(node);
                        }

                        if (logAsBytes)
                        {
                            logFrame.ConvertToBasic();
                        }
                    }
                }
                else
                {
                    logFrame = logAsBytes ? new DataFrame(frame.ToArray()) : frame.CloneFrame();
                }

                if (logFrame != null)
                {
                    logPacketEvent(this, new LogPacketEventArgs(tag, Uuid, logFrame, color, NetworkDescription));
                }
            }
        }
예제 #8
0
        protected override void OnInput(DataFrame frame)
        {
            DataFrame logFrame;

            if (Config.ConvertToBytes)
            {
                logFrame = new DataFrame(frame.ToArray());
            }
            else
            {
                logFrame = frame.CloneFrame();
            }

            LogPacket packet = new LogPacket(Config.Tag, Graph.Uuid, Guid.NewGuid(),
                                             Graph.NetworkDescription, logFrame, Config.Color, DateTime.Now);

            Config.PacketLog.AddPacket(packet);

            WriteOutput(frame);
        }
예제 #9
0
파일: NetGraph.cs 프로젝트: michyer/canape
        /// <summary>
        /// Log a packet from the graph
        /// </summary>
        /// <param name="tag">A textual tag for the frame</param>
        /// <param name="color">The color to display the frame (if applicable)</param>
        /// <param name="frame">The frame to log, note this must be cloned to preserve its value</param>
        /// <param name="logAsBytes">Indicates whether the packet should be logged as a byte array</param>
        /// <param name="path">Selection path for which part of the packet to log</param>
        private void OnLogPacket(string tag, ColorValue color, DataFrame frame, bool logAsBytes, string path)
        {
            EventHandler<LogPacketEventArgs> logPacketEvent = LogPacketEvent;

            if (logPacketEvent != null)
            {
                DataFrame logFrame = null;
                if (path != "/")
                {
                    DataNode node = frame.SelectSingleNode(path);

                    if (node != null)
                    {
                        node = node.CloneNode();

                        DataKey key = node as DataKey;
                        if (key != null)
                        {
                            logFrame = new DataFrame(key);
                        }
                        else
                        {
                            logFrame = new DataFrame();
                            logFrame.Root.AddSubNode(node);
                        }

                        if (logAsBytes)
                        {
                            logFrame.ConvertToBasic();
                        }
                    }
                }
                else
                {
                    logFrame = logAsBytes ? new DataFrame(frame.ToArray()) : frame.CloneFrame();
                }

                if (logFrame != null)
                {
                    logPacketEvent(this, new LogPacketEventArgs(tag, Uuid, logFrame, color, NetworkDescription));
                }
            }
        }
예제 #10
0
        protected override void OnInput(DataFrame frame)
        {
            DataNode[] nodes       = frame.SelectNodes(SelectionPath);
            DataFrame  oldFrame    = null;
            bool       doLog       = false;
            string     counterName = String.Format("{0}_count", Uuid);

            if (nodes.Length > 0)
            {
                if (Config.LogPackets)
                {
                    oldFrame = frame.CloneFrame();
                }
            }

            foreach (DataNode node in nodes)
            {
                if (Config.NoConversion)
                {
                    DataValue value = node as DataValue;

                    // If not a byte array then ignore
                    if ((value == null) || !(value.Value is byte[]))
                    {
                        LogVerbose(CANAPE.NodeLibrary.Properties.Resources.ByteFuzzer_IgnoringNode, node.Name);
                        continue;
                    }
                }

                byte[] data = node.ToArray();

                int fuzzLength = FuzzerUtils.GetFuzzLength(data.Length, Config.FuzzStart, Config.FuzzLength);


                if (fuzzLength > 0)
                {
                    long count = Graph.GlobalMeta.IncrementCounterLong(counterName, Config.MinValue, Config.Increment);

                    if (Config.Increment < 0)
                    {
                        if (count < Config.MaxValue)
                        {
                            LogInfo("No more values to fuzz");
                        }
                        else
                        {
                            doLog = true;
                        }
                    }
                    else if (Config.Increment > 0)
                    {
                        if (count > Config.MaxValue)
                        {
                            LogInfo("No more values to fuzz");
                        }
                        else
                        {
                            doLog = true;
                        }
                    }

                    if (doLog)
                    {
                        if (Config.LogFuzzText)
                        {
                            LogVerbose("Fuzzing with value {0}", count);
                        }

                        byte[] countData = BitConverter.GetBytes(count);

                        Array.Resize(ref countData, fuzzLength);

                        if (!Config.LittleEndian)
                        {
                            countData = countData.Reverse().ToArray();
                        }

                        Buffer.BlockCopy(countData, 0, data, Config.FuzzStart, fuzzLength);

                        node.ReplaceNode(data);
                    }
                }
            }

            if (doLog)
            {
                if (Config.LogPackets)
                {
                    Graph.DoLogPacket(String.Format("{0}: Pre-fuzz", Name), Config.Color, oldFrame, Config.ConvertToBytes);
                    Graph.DoLogPacket(String.Format("{0}: Post-fuzz", Name), Config.Color, frame, Config.ConvertToBytes);
                }
            }

            WriteOutput(frame);
        }
예제 #11
0
        /// <summary>
        /// Set the frame to edit
        /// </summary>
        /// <param name="frame">The data frame</param>        
        /// <param name="selector">Root selection path</param>
        /// <param name="color">The colour to display the frame in (if applicable)</param>
        public void SetFrame(DataFrame frame, string selector, Color color)
        {
            toolStripButtonSnapshot.Enabled = false;
            toolStripButtonUndo.Enabled = false;
            _oldFrame = frame;
            _currFrame = frame.CloneFrame();
            _selector = selector;
            _color = color;

            UpdateFrame();
        }
예제 #12
0
        /// <summary>
        /// Add a simple packet with a tag and a frame
        /// </summary>
        /// <param name="tag">The tag to add</param>
        /// <param name="frame">The frame to add, this will be cloned before putting in log</param>
        /// <returns>The logged packet</returns>
        public LogPacket AddPacket(string tag, DataFrame frame)
        {
            LogPacket ret = new LogPacket(tag, Guid.NewGuid(), "Packet Log", frame.CloneFrame(), ColorValue.White);
            AddPacket(ret);

            return ret;
        }
예제 #13
0
        /// <summary>
        /// Internal write function
        /// </summary>
        /// <param name="frame">The frame to write</param>
        /// <param name="nodes">The list of nodes to write to</param>
        private void WriteOutput(DataFrame frame, OutputNode[] nodes)
        {
            try
            {
                // Leave this like it is for legacy reasons.
                if (frame == null)
                {
                    foreach (OutputNode node in nodes)
                    {
                        node.Node.Shutdown(this);
                    }
                }
                else
                {
                    _outputPacketCount++;
                    _byteCount += frame.Length;
                    if (LogOutput)
                    {
                        LogPacket(String.Format("{0} Output", Name), new ColorValue(255, 255, 255), frame, false);
                    }

                    if (nodes.Length == 1)
                    {
                        // If we only have one output then don't need to clone
                        nodes[0].Node.Input(frame);
                    }
                    else
                    {
                        foreach (OutputNode node in nodes)
                        {
                            DataFrame newFrame = frame.CloneFrame();

                            node.Node.Input(newFrame);
                        }
                    }
                }
            }
            catch (ThreadAbortException)
            {
                // If we get a thread abort it probably means we want to go away
                throw;
            }
            catch (Exception ex)
            {
                // Back stop, do nothing but write to log
                LogException(ex);
            }
        }
예제 #14
0
 public DataFrame GetFrame()
 {
     return(_currFrame.CloneFrame());
 }