Esempio n. 1
0
        public void Dump(string reason)
        {
            byte[] dst = new byte[_buffer.Length];
            Buffer.BlockCopy(_buffer, _bufferPosition, dst, 0, _buffer.Length - _bufferPosition);
            Buffer.BlockCopy(_buffer, 0, dst, _buffer.Length - _bufferPosition, _bufferPosition);
            StringBuilder stringBuilder = new StringBuilder();
            int           num           = 1;

            for (int i = 0; i < _packets.Length; i++)
            {
                PacketView packetView = _packets[(i + _historyPosition) % _packets.Length];
                if (packetView.Offset == 0 && packetView.Length == 0)
                {
                    continue;
                }
                stringBuilder.Append(string.Format("Packet {0} [Assumed MessageID: {4}, Size: {2}, Buffer Position: {1}, Timestamp: {3:G}]\r\n", num++, packetView.Offset, packetView.Length, packetView.Time, _buffer[packetView.Offset]));
                for (int j = 0; j < packetView.Length; j++)
                {
                    stringBuilder.Append(_buffer[packetView.Offset + j].ToString("X2") + " ");
                    if (j % 16 == 15 && j != _packets.Length - 1)
                    {
                        stringBuilder.Append("\r\n");
                    }
                }
                stringBuilder.Append("\r\n\r\n");
            }
            stringBuilder.Append(reason);
            Directory.CreateDirectory(Path.Combine(Main.SavePath, "NetDump"));
            File.WriteAllText(Path.Combine(Main.SavePath, "NetDump", CreateDumpFileName()), stringBuilder.ToString());
        }
Esempio n. 2
0
        public void Record(byte[] buffer, int offset, int length)
        {
            length = Math.Max(0, length);
            PacketView packetView = AppendPacket(length);

            Buffer.BlockCopy(buffer, offset, _buffer, packetView.Offset, length);
        }
Esempio n. 3
0
        public void Search(string text, bool searchUp, bool ignoreCase)
        {
            if (!Loaded)
            {
                return;
            }

            _searchUp   = searchUp;
            _ignoreCase = ignoreCase;

            var item = PacketView.FindItemWithText(text, true, SelectedIndex, true);

            if (item != null)
            {
                PacketView.BeginUpdate();
                PacketView.GridLines = false;
                item.Selected        = true;
                item.EnsureVisible();
                PacketView.GridLines = true;
                PacketView.EndUpdate();
                return;
            }

            MessageBox.Show(string.Format("Can't find:'{0}'", text), "Packet Viewer", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
Esempio n. 4
0
        public ClientForm()
        {
            InitializeComponent();
            UserInput.SetCueBanner("Username");
            PassInput.SetCueBanner("Password");
            PicInput.SetCueBanner("PIC");
            CharInput.SetCueBanner("Character");
            PacketInput.SetCueBanner("Enter packet to send...");
            DelayInput.SetCueBanner("Delay");
            InitializeProgress();

            client = new Client(this);
            PacketView.SetInput(PacketInput);
            RushView.SetClient(client);

            FmFunctions = new FreeMarketForm(this);

#if DEBUG
            /*Use this for testing account
            *  username.Text           = "";
            *  password.Text           = "";
            *  pic.Text                = "";
            *  character.Text          = "";
            *  world.SelectedIndex     = 0;
            *  channel.SelectedIndex   = 0;*/
#endif
            InitializeAccount();
        }
Esempio n. 5
0
        public void View_Partial_C1_Packet()
        {
            PacketView packet = new PacketView(new Span <byte>(Samples.UnencryptedC1Packet, 0, 3));

            Assert.AreEqual(packet.Length, Samples.UnencryptedC1Packet.Length);
            Assert.AreEqual(packet.Type, 0xC1);
            Assert.AreEqual(packet.Code.Value, 0xA9);
            Assert.IsTrue(packet.IsPartial);
        }
Esempio n. 6
0
        public void View_Partial_C2_Packet()
        {
            PacketView packet = new PacketView(new Span <byte>(Samples.UnencryptedC2Packet, 0, 3));

            Assert.AreEqual(packet.Length, Samples.UnencryptedC2Packet.Length);
            Assert.AreEqual(packet.Type, 0xC2);
            Assert.AreEqual(packet.Code, null);
            Assert.IsTrue(packet.IsPartial);
        }
Esempio n. 7
0
        private void ValidatePacket(ReadOnlySequence <byte> data, out int packetSize)
        {
            Span <byte> header = stackalloc byte[PacketView.MinimumSize];

            data.Slice(0, PacketView.MinimumSize).CopyTo(header);

            var packet = new PacketView(header);

            packet.ValidateHeader();
            packetSize = packet.Length;
        }
Esempio n. 8
0
        private void packetNavigation()
        {
            PacketView p = (PacketView)ErrorPacketsListView.SelectedItem;

            if (p != null)
            {
                PacketsDataGrid.ScrollIntoView(p);
                PacketsDataGrid.UpdateLayout();
                PacketsDataGrid.SelectedItem = p;
            }
        }
Esempio n. 9
0
        //Navigating to next packet
        private void btnNext_Click(object sender, RoutedEventArgs e)
        {
            PacketsDataGrid.SelectedIndex++;
            PacketView p = (PacketView)PacketsDataGrid.SelectedItem;

            if (p != null)
            {
                PacketsDataGrid.ScrollIntoView(p);
                PacketsDataGrid.UpdateLayout();
            }
        }
Esempio n. 10
0
        public void View_Complete_C1_Packet()
        {
            PacketView packet = new PacketView(Samples.UnencryptedC1Packet);

            Assert.AreEqual(packet.Length, Samples.UnencryptedC1Packet.Length);
            Assert.AreEqual(packet.Type.HeaderLength, 2);
            Assert.AreEqual(packet.Type, 0xC1);
            Assert.AreEqual(packet.Code.Value, 0xA9);
            Assert.IsFalse(packet.Type.IsEncrypted);
            Assert.IsFalse(packet.IsPartial);
            CollectionAssert.AreEqual(packet.Data.ToArray(), Samples.UnencryptedC1Packet);
        }
Esempio n. 11
0
 private void SendTCP()
 {
     while (true)
     {
         if (isWrite)
         {
             bakPacket = packet;
             packet    = writePacket;
         }
         string temp     = tID.ToString("X").PadLeft(4, '0') + "0000" + packet;
         byte[] sendBuff = new byte[temp.Length / 2];
         for (int i = 0; i < temp.Length; i += 2)
         {
             sendBuff[i / 2] = byte.Parse("" + temp[i] + temp[i + 1], System.Globalization.NumberStyles.HexNumber);
         }
         NetworkStream st = tcp.GetStream();
         st.Write(sendBuff, 0, sendBuff.Length);
         st.Flush();
         Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
         {
             PacketView.AppendText("[송신] " + temp + '\n');
         }));
         byte[] recBuff = new byte[modLen];
         st.Read(recBuff, 0, recBuff.Length);
         string msg = "";
         for (int i = 0; i < recBuff.Length; i++)
         {
             msg += recBuff[i].ToString("X").PadLeft(2, '0') + " ";
         }
         string bToS;
         int    idx = 0;
         for (int i = 9; i + 2 <= recBuff.Length; i += 2)
         {
             bToS  = "";
             bToS += recBuff[i].ToString("X") + recBuff[i + 1].ToString("X");
             recList[idx++].Value = int.Parse(bToS, System.Globalization.NumberStyles.HexNumber);
         }
         msg += '\n';
         Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
         {
             PacketView.AppendText("[수신] " + msg);
             PacketView.ScrollToEnd();
             DataView.Items.Refresh();
         }));
         tID++;
         if (isWrite)
         {
             packet  = bakPacket;
             isWrite = false;
         }
         Thread.Sleep(sr);
     }
 }
        /// <inheritdoc />
        public virtual bool HandlePacket(T sender, Span <byte> packetData)
        {
            var packet  = new PacketView(packetData);
            var handler = this.GetHandlerForPacket(packet);

            if (handler == null)
            {
                return(false);
            }

            return(handler.HandlePacket(sender, packetData));
        }
Esempio n. 13
0
        public PacketViewTab(string file)
        {
            InitializeComponent();

            Text = Path.GetFileName(file);

            packetViewer = PacketReaderFactory.Create(Path.GetExtension(file));

            packets = packetViewer.ReadPackets(file).ToList();

            PacketView.VirtualMode     = true;
            PacketView.VirtualListSize = packets.Count;
            PacketView.EnsureVisible(0);
        }
Esempio n. 14
0
        private PacketView AppendPacket(int size)
        {
            int num = _bufferPosition;

            if (num + size > _buffer.Length)
            {
                num = 0;
            }
            PacketView packetView = new PacketView(num, size, DateTime.Now);

            _packets[_historyPosition] = packetView;
            _historyPosition           = (_historyPosition + 1) % _packets.Length;
            _bufferPosition            = num + size;
            return(packetView);
        }
Esempio n. 15
0
        private void DecryptAndWrite(PacketView packet, ReadOnlySequence <byte> packetData)
        {
            int maximumDecryptedSize = this.GetMaximumDecryptedSize(packet);
            var span = this.pipe.Writer.GetSpan(maximumDecryptedSize);

            // This is offset by one so the encryption counter is replaced with the unencrypted payload
            var decryptedHeaderSize  = packet.Type.Decrypted.HeaderLength - 1;
            var decryptedData        = span.Slice(0, maximumDecryptedSize);
            var decryptedPayloadSize = this.DecryptPacketPayload(
                input: packetData.Slice(packet.Type.HeaderLength),
                output: decryptedData.Slice(decryptedHeaderSize));
            var decryptedPacketSize = decryptedHeaderSize + decryptedPayloadSize;

            packet.Type.Decrypted.WriteHeader(decryptedData, decryptedPacketSize);
            this.pipe.Writer.Advance(decryptedPacketSize);
        }
Esempio n. 16
0
        void SendPacketInternal(NodeBaseViewModel from, object message)
        {
            // packet view is created in definition
            FrameworkElement vis = ParentDiagram.Definition.CreateVisualForPacket(message);

            if (vis == null)
            {
                return;
            }

            Canvas canvas = ParentDiagram.Canvas;

            if (canvas != null)
            {
                PacketView packet = new PacketView(vis, this, from, canvas);
                packet.Send();
            }
        }
        private IPacketHandler <T> GetHandlerForPacket(PacketView packet)
        {
            var handlers = this.packetHandlers;

            foreach (byte key in packet.Identifier)
            {
                if (!handlers.TryGetValue(key, out OneOf <PacketToHandlerDictionary, IPacketHandler <T> > value))
                {
                    break;
                }

                if (value.IsT1)
                {
                    return(value.AsT1);
                }

                handlers = value.AsT0;
            }

            return(null);
        }
Esempio n. 18
0
        private void ProcessPacket(ReadOnlySequence <byte> packetData)
        {
            Span <byte> header = stackalloc byte[PacketView.MinimumSize];

            packetData.Slice(0, PacketView.MinimumSize).CopyTo(header);

            var packet = new PacketView(header);

            if (packet.Type.IsEncrypted)
            {
                if (packet.PayloadLength % EncryptedBlockSize != 0)
                {
                    // TODO: Specialized exception
                    throw new ArgumentException(nameof(packetData));
                }

                this.DecryptAndWrite(packet, packetData);
            }
            else
            {
                this.CopyAndWrite(this.pipe.Writer, packetData);
            }
        }
Esempio n. 19
0
 private int GetMaximumDecryptedSize(PacketView packet) =>
 ((packet.PayloadLength / EncryptedBlockSize) * DecryptedBlockSize) + packet.Type.Decrypted.HeaderLength;
Esempio n. 20
0
        //Method for displaying packet data when clicked on datagrid
        private void PacketsDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            packetProperties.Clear();

            const int maxStringLength = 24;

            // Get current packet
            PacketView selected = PacketsDataGrid.SelectedItem as PacketView;

            if (selected == null)
            {
                return;
            }

            // Add packet properties to collection
            packetProperties.AddRange(new StringPair[] {
                new StringPair("Timestamp", selected.TimeString),
                new StringPair("Entry Port", selected.EntryPort),
                new StringPair("Exit Port", selected.ExitPort),
                new StringPair("Packet Type", selected.PacketTypeString),
                string.IsNullOrEmpty(selected.Message) ? new StringPair("", "") : new StringPair("Info", selected.Message)
            });

            if (selected.PacketType == typeof(ErrorPacket))
            {
                // Error packets only have a message
                return;
            }

            // If statement to determine what details to display
            if (selected.PacketType == typeof(WriteCommandPacket))
            {
                packetProperties.AddRange(new StringPair[] {
                    new StringPair("Dest. Path Address", selected.DestinationPathAddress),
                    new StringPair("Dest. Logical Address", selected.DestinationLogicalAddress),
                    new StringPair("Protocol ID", selected.ProtocolId),
                    new StringPair("Dest. key", selected.DestinationKey),
                    new StringPair("Source Path Address", selected.SourcePathAddress),
                    new StringPair("Source Logical Address", selected.SourceLogicalAddress),
                    new StringPair("Transaction ID", selected.TransactionId),
                    new StringPair("Extended Write Address", selected.ExtendedWriteAddress),
                    new StringPair("Write Address", selected.WriteAddress),
                    new StringPair("Data Length", selected.DataLength),
                    new StringPair("Header CRC", selected.HeaderCRC),
                });

                if (string.IsNullOrEmpty(selected.DataBytes))
                {
                    packetProperties.Add(new StringPair("Data", ""));
                }
                else
                {
                    bool label = false;
                    foreach (string part in SplitString(selected.DataBytes, maxStringLength))
                    {
                        if (!label)
                        {
                            label = true;
                            packetProperties.Add(new StringPair("Data", part));
                        }
                        else
                        {
                            packetProperties.Add(new StringPair("", part));
                        }
                    }
                }

                packetProperties.AddRange(new StringPair[] {
                    new StringPair("Data CRC", selected.DataCRC),
                    new StringPair("End of Packet Marker", selected.EndCode)
                });
            }
            else if (selected.PacketType == typeof(WriteReplyPacket))
            {
                packetProperties.AddRange(new StringPair[] {
                    new StringPair("Source Path Address", selected.SourcePathAddress),
                    new StringPair("Source Logical Address", selected.SourceLogicalAddress),
                    new StringPair("Protocol ID", selected.ProtocolId),
                    new StringPair("Status", selected.Status),
                    new StringPair("Dest. Logical Address", selected.DestinationLogicalAddress),
                    new StringPair("Transaction ID", selected.TransactionId),
                    new StringPair("Reply CRC", selected.ReplyCRC),
                    new StringPair("End of Packet Marker", selected.EndCode)
                });
            }
            else if (selected.PacketType == typeof(ReadCommandPacket))
            {
                packetProperties.AddRange(new StringPair[] {
                    new StringPair("Dest. Path Address", selected.DestinationPathAddress),
                    new StringPair("Dest. Logical Address", selected.DestinationLogicalAddress),
                    new StringPair("Protocol ID", selected.ProtocolId),
                    new StringPair("Dest. key", selected.DestinationKey),
                    new StringPair("Source Path Address", selected.SourcePathAddress),
                    new StringPair("Source Logical Address", selected.SourceLogicalAddress),
                    new StringPair("Transaction ID", selected.TransactionId),
                    new StringPair("Extended Read Address", selected.ExtendedReadAddress),
                    new StringPair("Read Address", selected.ReadAddress),
                    new StringPair("Data Length", selected.DataLength),
                    new StringPair("Header CRC", selected.HeaderCRC),
                    new StringPair("End of Packet Marker", selected.EndCode)
                });
            }
            else if (selected.PacketType == typeof(ReadReplyPacket))
            {
                packetProperties.AddRange(new StringPair[] {
                    new StringPair("Source Path Address", selected.SourcePathAddress),
                    new StringPair("Source Logical Address", selected.SourceLogicalAddress),
                    new StringPair("Protocol ID", selected.ProtocolId),
                    new StringPair("Transaction ID", selected.TransactionId),
                    new StringPair("Data Length", selected.DataLength),
                    new StringPair("Header CRC", selected.HeaderCRC)
                });

                if (string.IsNullOrEmpty(selected.DataBytes))
                {
                    packetProperties.Add(new StringPair("Data", ""));
                }
                else
                {
                    bool label = false;
                    foreach (string part in SplitString(selected.DataBytes, maxStringLength))
                    {
                        if (!label)
                        {
                            label = true;
                            packetProperties.Add(new StringPair("Data", part));
                        }
                        else
                        {
                            packetProperties.Add(new StringPair("", part));
                        }
                    }
                }

                packetProperties.AddRange(new StringPair[] {
                    new StringPair("Data CRC", selected.DataCRC),
                    new StringPair("End of Packet Marker", selected.EndCode)
                });
            }
            else if (selected.PacketType == typeof(NonRmapPacket))
            {
                packetProperties.AddRange(new StringPair[] {
                    new StringPair("Dest. Path Address", selected.DestinationPathAddress),
                    new StringPair("Dest. Logical Address", selected.DestinationLogicalAddress),
                    new StringPair("Sequence ID", selected.SequenceId),
                });

                if (string.IsNullOrEmpty(selected.Cargo))
                {
                    packetProperties.Add(new StringPair("Cargo", ""));
                }
                else
                {
                    bool label = false;
                    foreach (string part in SplitString(selected.Cargo, maxStringLength))
                    {
                        if (!label)
                        {
                            label = true;
                            packetProperties.Add(new StringPair("Cargo", part));
                        }
                        else
                        {
                            packetProperties.Add(new StringPair("", part));
                        }
                    }
                }
            }
        }
Esempio n. 21
0
        public Main()
        {
            InitializeComponent();

            packetRatePoints            = new List <DataPoint>();
            packetRateGraph.DataContext = this;
            dataRatePoints             = new List <DataPoint>();
            dataRateGraph.DataContext  = this;
            errorRatePoints            = new List <DataPoint>();
            errorRateGraph.DataContext = this;

            // Packet collection
            packetView = new RangeObservableCollection <PacketView>();

            //Individual packet properties
            packetProperties = new RangeObservableCollection <StringPair>();

            //For individual packets
            IndividualPacketGrid.DataContext = this;

            // Packet capture
            capture = new Capture();

            // File dialog
            openFileDialog                  = new OpenFileDialog();
            openFileDialog.Multiselect      = true;
            openFileDialog.Filter           = "All files (*.*)|*.*|Capture files (*.rec)|*.rec";
            openFileDialog.FilterIndex      = 2;
            openFileDialog.RestoreDirectory = false;

            // Packet collection view
            packetCollectionView = CollectionViewSource.GetDefaultView(packetView);

            errorCollectionView = new CollectionViewSource {
                Source = packetView
            }.View;


            // Packet collection view sort description
            packetCollectionViewSort = new SortDescription(
                "TimeTicks", ListSortDirection.Ascending
                );

            // Filter predicate for packet collection view
            packetCollectionViewFilter = item => {
                PacketView pktView = item as PacketView;
                if (packetView == null)
                {
                    return(false);
                }
                // If the checkbox for the errors is checked
                if (pktView.PacketTypeString.Equals("Error"))
                {
                    if (ChkShowErrors.IsChecked != true)
                    {
                        return(false);
                    }
                }
                else
                {
                    if (pktView.Valid)
                    {
                        if (ChkShowValidPackets.IsChecked != true)
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        if (ChkShowInvalidPackets.IsChecked != true)
                        {
                            return(false);
                        }
                    }
                }

                return(portFilterCheckbox[byte.Parse(pktView.EntryPort) - 1].IsChecked == true ? true : false);
            };

            errorPacketCollectionViewFilter = item => {
                PacketView pktView = item as PacketView;
                if (packetView == null)
                {
                    return(false);
                }
                // If the checkbox for the errors is checked
                if (!pktView.PacketTypeString.Equals("Error"))
                {
                    return(false);
                }

                return(portFilterCheckbox[byte.Parse(pktView.EntryPort) - 1].IsChecked == true ? true : false);
            };

            // Apply filter to packet collection view
            packetCollectionView.Filter = packetCollectionViewFilter;

            errorCollectionView.Filter = errorPacketCollectionViewFilter;

            // Bind WPF DataGrid to the packet collection view.
            // Now, whenever the packet collection is modified or
            // the packet collection view filtering, sorting or grouping
            // is changed, the UI will be updated through use of the
            // INotifyPropertyChanged callback.
            PacketsDataGrid.ItemsSource = packetCollectionView;
            // Same for status view
            ErrorPacketsListView.ItemsSource = errorCollectionView;

            //For individual packets
            IndividualPacketGrid.ItemsSource = packetProperties;

            // Set up array of port filter checkboxes
            portFilterCheckbox = new CheckBox[8] {
                ChkPort1, ChkPort2,
                ChkPort3, ChkPort4,
                ChkPort5, ChkPort6,
                ChkPort7, ChkPort8
            };
        }
Esempio n. 22
0
 /// <summary>Initializes a new instance of the <see cref="Enumerator"/> struct.</summary>
 public Enumerator(PacketView packet)
 {
     this.packet = packet;
     this.index  = -1;
 }
Esempio n. 23
0
 /// <summary>Initializes a new instance of the <see cref="EnumerableIdentifier"/> struct.</summary>
 public EnumerableIdentifier(PacketView packet) => this.packet = packet;