示例#1
0
        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());
        }
示例#2
0
        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();
            }
        }
示例#3
0
        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;
        }