public static string MakeRTF(List <CapturePacket> packets) { var sb = new StringBuilder( @"{\rtf1\ansi\ansicpg1252\deff0\deflang2057{\fonttbl{\f0\fnil\fcharset0 Calibri;}} {\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sa200\sl276\slmult1\lang29\f0\fs20 "); sb.AppendLine("\r\n"); foreach (CapturePacket packet in packets) { sb.Append(packet.Date); sb.Append(@"\tab "); sb.Append(packet.Name); sb.Append(@" "); foreach (KeyValuePair <string, object> pair in packet.ParsedData.GetDataDictionary()) { sb.Append(" "); sb.Append(pair.Key); sb.Append(@" \b "); sb.Append(pair.Value); sb.Append(@"\b0 "); } // since we have IPT, straight cast to UDP, BAM var udp = (UdpPacket)packet.Packet.PayloadPacket.PayloadPacket; var bytes = IPTWPPacket.GetIPTPayload(udp, packet.IPTWPPacket); sb.Append(@"\line\ul " + BitConverter.ToString(bytes) + @"\ulnone"); sb.AppendLine(@"\line"); } return(sb.ToString()); }
public static void MakeXLSX(List <CapturePacket> packets, string outputfile) { var newFile = new FileInfo(outputfile); if (newFile.Exists) { newFile.Delete(); // ensures we create a new workbook newFile = new FileInfo(outputfile); } using (var package = new ExcelPackage(newFile)) { // Add a new worksheet to the empty workbook ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Worksheet1"); //Add the headers worksheet.Cells[1, 1].Value = "Time"; //worksheet.Cells[1, 2].Value = "RecordedTime"; worksheet.Cells[1, 2].Value = "Name"; //worksheet.Cells[1, 4].Value = "DataType"; worksheet.Cells[1, 3].Value = "Data"; worksheet.Cells[1, 4].Value = "Raw"; // worksheet.Cells[1, 7].Value = "Sortindex"; for (var index = 0; index < packets.Count; index++) { var packet = packets[index]; int rowindex = index + 2; worksheet.Cells[rowindex, 1].Value = packet.Date.ToString("yyyy-MM-dd HH:mm:ss.fff"); //worksheet.Cells[rowindex, 2].Value = log.RecordedTime.ToString("yyyy-MM-dd HH:mm:ss.fff"); worksheet.Cells[rowindex, 2].Value = packet.Name; if (packet.ParsedData != null) { worksheet.Cells[rowindex, 3].Value = Functions.MakeCommentString(packet.ParsedData.GetDataDictionary()); } //worksheet.Cells[rowindex, 5].IsRichText = true; //ExcelRichTextCollection rtfCollection = worksheet.Cells[rowindex, 5].RichText; // //foreach (KeyValuePair<string, object> pair in dictionaryDataObject.DictionaryData) //{ // ExcelRichText excelRichText = rtfCollection.Add(pair.Key + ": "); // excelRichText.Bold = false; // excelRichText.UnderLine = false; // excelRichText = rtfCollection.Add(pair.Value.ToString() + ' '); // excelRichText.Bold = true; // excelRichText.UnderLine = true; //} if (packet.IPTWPPacket != null) { // since we have IPT, straight cast to UDP, BAM var udp = (UdpPacket)packet.Packet.PayloadPacket.PayloadPacket; var bytes = IPTWPPacket.GetIPTPayload(udp, packet.IPTWPPacket); worksheet.Cells[rowindex, 4].Value = BitConverter.ToString(bytes); } //worksheet.Cells[rowindex, 7].Value = log.SortIndex; } //Ok now format the values; using (ExcelRange range = worksheet.Cells[1, 1, 1, 4]) { range.Style.Font.Bold = true; //range.Style.Fill.PatternType = ExcelFillStyle.Solid; //range.Style.Fill.BackgroundColor.SetColor(Color.DarkBlue); //range.Style.Font.Color.SetColor(Color.White); } worksheet.Cells[2, 1, packets.Count + 2, 1].Style.Numberformat.Format = "yyyy-mm-dd hh:mm:ss.000"; //Create an autofilter for the range worksheet.Cells[1, 1, 1, 4].AutoFilter = true; //There is actually no need to calculate, Excel will do it for you, but in some cases it might be useful. //For example if you link to this workbook from another workbook or you will open the workbook in a program that hasn't a calculation engine or //you want to use the result of a formula in your program. worksheet.Calculate(); worksheet.Cells.AutoFitColumns(0); //Autofit columns for all cells // lets set the header text worksheet.HeaderFooter.OddHeader.CenteredText = "&24&U&\"Arial,Regular Bold\" Parsed Traffic"; // add the page number to the footer plus the total number of pages worksheet.HeaderFooter.OddFooter.RightAlignedText = $"Page {ExcelHeaderFooter.PageNumber} of {ExcelHeaderFooter.NumberOfPages}"; // add the sheet name to the footer worksheet.HeaderFooter.OddFooter.CenteredText = ExcelHeaderFooter.SheetName; // add the file path to the footer worksheet.HeaderFooter.OddFooter.LeftAlignedText = ExcelHeaderFooter.FilePath + ExcelHeaderFooter.FileName; worksheet.PrinterSettings.RepeatRows = worksheet.Cells["1:2"]; worksheet.PrinterSettings.RepeatColumns = worksheet.Cells["A:G"]; // Change the sheet view to show it in page layout mode //worksheet.View.PageLayoutView = true; // set some document properties package.Workbook.Properties.Title = "Parsed traffic"; package.Workbook.Properties.Author = "Johan Sonesson"; package.Workbook.Properties.Comments = "Generated by IPTComShark " + System.Reflection.Assembly.GetExecutingAssembly().GetName() .Version; // set some extended property values package.Workbook.Properties.Company = ""; // save our new workbook and we are done! package.Save(); } }
public void SetObject(CapturePacket originalpacket) { uint ticker = 0; textBoxComid.Text = string.Empty; textBoxRAW.Text = string.Empty; textBoxSize.Text = string.Empty; textBoxType.Text = string.Empty; var dataLines = new List <DataLine>(); try { var extensiveData = CapturePacket.ExtractParsedData(originalpacket, out var displayfields, true); if (originalpacket.IPTWPPacket != null) { var udp = (UdpPacket)originalpacket.Packet.PayloadPacket.PayloadPacket; var iptPayload = IPTWPPacket.GetIPTPayload(udp, originalpacket.IPTWPPacket); var iptHeader = IPTWPPacket.ExtractHeader(udp.PayloadData); textBoxComid.Text = originalpacket.IPTWPPacket.Comid.ToString(); textBoxSize.Text = originalpacket.IPTWPPacket.IPTWPSize.ToString(); textBoxType.Text = originalpacket.IPTWPPacket.IPTWPType.ToString(); if (originalpacket.IPTWPPacket.IPTWPType == IPTTypes.MA) { dataLines.Add(new DataLine(ticker++) { IsCategory = true, Name = "IPTCom Message Acknowledgement" }); var ackCode = BitConverter.ToUInt16(new[] { iptPayload[1], iptPayload[0] }, 0); var ackSeq = BitConverter.ToUInt16(new[] { iptPayload[3], iptPayload[2] }, 0); switch (ackCode) { case 0: dataLines.Add(new DataLine(ticker++) { Name = "Ack Code", Value = "OK" }); break; case 1: dataLines.Add(new DataLine(ticker++) { Name = "Ack Code", Value = "NACK, wrong frame check sequence in data part" }); break; case 2: dataLines.Add(new DataLine(ticker++) { Name = "Ack Code", Value = "NACK, destination unknown / not listening" }); break; case 3: dataLines.Add(new DataLine(ticker++) { Name = "Ack Code", Value = "NACK, wrong data / configuration mismatch" }); break; case 4: dataLines.Add(new DataLine(ticker++) { Name = "Ack Code", Value = "NACK, buffer not available" }); break; default: dataLines.Add(new DataLine(ticker++) { Name = "Ack Code", Value = "Invalid code: " + ackCode }); break; } dataLines.Add(new DataLine(ticker++) { Name = "Ack Sequence", Value = ackSeq.ToString() }); } if (extensiveData != null && extensiveData.ParsedFields.Count > 0 ) // a parser has chugged out something { dataLines.Add(new DataLine(ticker++) { IsCategory = true, Name = "IPTCom Data" }); foreach (var field in extensiveData.ParsedFields) { bool changed = false; if (originalpacket.Previous != null && originalpacket.IPTWPPacket.IPTWPType == IPTTypes.PD) { // not checking for null because frankly it shouldn't happen and we want an exception changed = !originalpacket.Previous.ParsedData.GetField(field.Name).Value .Equals(field.Value); } dataLines.Add(new DataLine(field, ticker++) { Changed = changed }); } } } if (originalpacket.SS27Packet != null) { dataLines.Add(new DataLine(ticker++) { IsCategory = true, Name = "JRU Data" }); dataLines.Add(new DataLine(ticker++) { IsCategory = true, Name = "Header" }); dataLines.Add(new DataLine(ticker++) { Name = "Timestamp", Value = originalpacket.SS27Packet.DateTime.ToString() + ":" + originalpacket.SS27Packet.DateTime.Millisecond }); dataLines.Add(new DataLine(ticker++) { Name = "Level", Value = originalpacket.SS27Packet.Level }); dataLines.Add(new DataLine(ticker++) { Name = "Mode", Value = originalpacket.SS27Packet.Mode }); dataLines.Add(new DataLine(ticker++) { Name = "Speed", Value = originalpacket.SS27Packet.V_TRAIN.ToString() }); dataLines.AddRange( originalpacket.SS27Packet.Header.Select(parsedField => new DataLine(parsedField, ticker++))); if (originalpacket.SS27Packet.SubMessage != null) { dataLines.Add(new DataLine(ticker++) { IsCategory = true, Name = "SubMessage" }); foreach (var parsedField in originalpacket.SS27Packet.SubMessage.ParsedFields) { dataLines.Add(new DataLine(parsedField, ticker++)); } } foreach (var ss27PacketExtraMessage in originalpacket.SS27Packet.ExtraMessages) { dataLines.Add(new DataLine(ticker++) { IsCategory = true, Name = ss27PacketExtraMessage.Name, Comment = ss27PacketExtraMessage.Comment }); foreach (var parsedField in ss27PacketExtraMessage.ParsedFields) { dataLines.Add(new DataLine(parsedField, ticker++)); } } } if (originalpacket.IPTWPPacket == null && originalpacket.SS27Packet == null && extensiveData != null) { dataLines.Add(new DataLine(ticker++) { IsCategory = true, Name = extensiveData.Name }); foreach (var field in extensiveData.ParsedFields) { dataLines.Add(new DataLine(field, ticker++)); } } } catch (Exception e) { dataLines.Add(new DataLine(ticker++) { Name = "Error", Value = e.ToString() }); } try { var text = new StringBuilder(originalpacket.Packet.ToString(StringOutputType.Verbose)); if (originalpacket.IPTWPPacket != null) { // since we have IPT, straight cast to UDP, BAM var udp = (UdpPacket)originalpacket.Packet.PayloadPacket.PayloadPacket; var bytes = IPTWPPacket.GetIPTPayload(udp, originalpacket.IPTWPPacket); var iptHeader = IPTWPPacket.ExtractHeader(udp.PayloadData); var maxLenString = iptHeader.Max(pair => pair.Key.Length); foreach (var head in iptHeader) { text.AppendLine("IPT:\t" + head.Key.PadLeft(maxLenString, ' ') + " = " + head.Value); } text.AppendLine(""); textBoxRAW.Text = BitConverter.ToString(bytes); string str1 = ""; string str2 = ""; text.AppendLine("IPT: ******* Raw Hex Output - length=" + (object)bytes.Length + " bytes"); text.AppendLine("IPT: Segment: Bytes: Ascii:"); text.AppendLine("IPT: --------------------------------------------------------------------------"); for (int index = 1; index <= bytes.Length; ++index) { str1 = str1 + bytes[index - 1].ToString("x").PadLeft(2, '0') + " "; if (bytes[index - 1] < (byte)33 || bytes[index - 1] > (byte)126) { str2 += "."; } else { str2 += Encoding.ASCII.GetString(new byte[1] { bytes[index - 1] }); } if (index % 16 != 0 && index % 8 == 0) { str1 += " "; str2 += " "; } if (index % 16 == 0) { string str3 = ((index - 16) / 16 * 10).ToString().PadLeft(4, '0'); text.AppendLine("IPT: " + str3 + " " + str1 + " " + str2); str1 = ""; str2 = ""; } else if (index == bytes.Length) { string str3 = (((index - 16) / 16 + 1) * 10).ToString().PadLeft(4, '0'); text.AppendLine("IPT: " + str3.ToString().PadLeft(4, '0') + " " + str1.PadRight(49, ' ') + " " + str2); } } } richTextBox1.Text = text.ToString(); } catch (Exception e) { richTextBox1.Text = e.ToString(); } dataListViewRight.DataSource = dataLines; }