public void TestUInt64ToString() { var flag1NativeToString = Flag1.ToString(); var flag2NativeToString = Flag2.ToString(); Flag1.AsString().ShouldBeEquivalentTo(Flag1StringValue); Flag2.AsString().ShouldBeEquivalentTo(flag2NativeToString); AllFlags.AsString().ShouldBeEquivalentTo(AllFlags.ToString()); (Flag2 | Flag10).ShouldBeEquivalentTo(Flag2Flag10StringValue); AllFlags.AsString().ShouldBeEquivalentTo(FlagsAllStringValue); }
/// <summary cref="Packet.ToString(StringOutputType)" /> public override string ToString(StringOutputType outputFormat) { var buffer = new StringBuilder(); string color = ""; string colorEscape = ""; if (outputFormat == StringOutputType.Colored || outputFormat == StringOutputType.VerboseColored) { color = Color; colorEscape = AnsiEscapeSequences.Reset; } if (outputFormat == StringOutputType.Normal || outputFormat == StringOutputType.Colored) { // build flagstring string flags = "{"; if (Urg) { flags += "urg[0x" + System.Convert.ToString(UrgentPointer, 16) + "]|"; } if (Ack) { flags += "ack[" + AcknowledgmentNumber + " (0x" + System.Convert.ToString(AcknowledgmentNumber, 16) + ")]|"; } if (Psh) { flags += "psh|"; } if (Rst) { flags += "rst|"; } if (Syn) { flags += "syn[0x" + System.Convert.ToString(SequenceNumber, 16) + "," + SequenceNumber + "]|"; } flags = flags.TrimEnd('|'); flags += "}"; // build the output string buffer.AppendFormat("{0}[TCPPacket: SourcePort={2}, DestinationPort={3}, Flags={4}]{1}", color, colorEscape, SourcePort, DestinationPort, flags); } if (outputFormat == StringOutputType.Verbose || outputFormat == StringOutputType.VerboseColored) { // collect the properties and their value Dictionary <string, string> properties = new Dictionary <string, string>(); properties.Add("source port", SourcePort.ToString()); properties.Add("destination port", DestinationPort.ToString()); properties.Add("sequence number", SequenceNumber.ToString() + " (0x" + SequenceNumber.ToString("x") + ")"); properties.Add("acknowledgement number", AcknowledgmentNumber.ToString() + " (0x" + AcknowledgmentNumber.ToString("x") + ")"); // TODO: Implement a HeaderLength property for TCPPacket //properties.Add("header length", HeaderLength.ToString()); properties.Add("flags", "(0x" + AllFlags.ToString("x") + ")"); string flags = Convert.ToString(AllFlags, 2).PadLeft(8, '0'); properties.Add("", flags[0] + "... .... = [" + flags[0] + "] congestion window reduced"); properties.Add(" ", "." + flags[1] + ".. .... = [" + flags[1] + "] ECN - echo"); properties.Add(" ", ".." + flags[2] + ". .... = [" + flags[2] + "] urgent"); properties.Add(" ", "..." + flags[3] + " .... = [" + flags[3] + "] acknowledgement"); properties.Add(" ", ".... " + flags[4] + "... = [" + flags[4] + "] push"); properties.Add(" ", ".... ." + flags[5] + ".. = [" + flags[5] + "] reset"); properties.Add(" ", ".... .." + flags[6] + ". = [" + flags[6] + "] syn"); properties.Add(" ", ".... ..." + flags[7] + " = [" + flags[7] + "] fin"); properties.Add("window size", WindowSize.ToString()); properties.Add("checksum", "0x" + Checksum.ToString() + " [" + (ValidChecksum ? "valid" : "invalid") + "]"); properties.Add("options", "0x" + BitConverter.ToString(Options).Replace("-", "").PadLeft(12, '0')); var parsedOptions = OptionsCollection; if (parsedOptions != null) { for (int i = 0; i < parsedOptions.Count; i++) { properties.Add("option" + (i + 1).ToString(), parsedOptions[i].ToString()); } } // calculate the padding needed to right-justify the property names int padLength = Utils.RandomUtils.LongestStringLength(new List <string>(properties.Keys)); // build the output string buffer.AppendLine("TCP: ******* TCP - \"Transmission Control Protocol\" - offset=? length=" + TotalPacketLength); buffer.AppendLine("TCP:"); foreach (var property in properties) { if (property.Key.Trim() != "") { buffer.AppendLine("TCP: " + property.Key.PadLeft(padLength) + " = " + property.Value); } else { buffer.AppendLine("TCP: " + property.Key.PadLeft(padLength) + " " + property.Value); } } buffer.AppendLine("TCP:"); } // append the base class output buffer.Append(base.ToString(outputFormat)); return(buffer.ToString()); }