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()); }
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); }
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); }
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(); }
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); }
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); }
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; }
private void packetNavigation() { PacketView p = (PacketView)ErrorPacketsListView.SelectedItem; if (p != null) { PacketsDataGrid.ScrollIntoView(p); PacketsDataGrid.UpdateLayout(); PacketsDataGrid.SelectedItem = p; } }
//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(); } }
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); }
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)); }
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); }
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); }
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); }
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); }
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); } }
private int GetMaximumDecryptedSize(PacketView packet) => ((packet.PayloadLength / EncryptedBlockSize) * DecryptedBlockSize) + packet.Type.Decrypted.HeaderLength;
//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)); } } } } }
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 }; }
/// <summary>Initializes a new instance of the <see cref="Enumerator"/> struct.</summary> public Enumerator(PacketView packet) { this.packet = packet; this.index = -1; }
/// <summary>Initializes a new instance of the <see cref="EnumerableIdentifier"/> struct.</summary> public EnumerableIdentifier(PacketView packet) => this.packet = packet;