//GRE协议 #region GRE private void GRE(GREPacket gre) { if (gre.Version == GREVersion.GREv0) { } else if (gre.Version == GREVersion.GREv1) { GREv1Packet v1 = new GREv1Packet(gre.rawData); if (v1 != null) { GREv1(v1); } } }
private void GREv1(GREv1Packet v1) { if (GREv1Node == null) { GREv1Node = CreatNode("GREv1", 12); } GREv1Node.Nodes.Clear(); #region CRKSsFlagsVersion if (GREv1FlagsNode == null) { GREv1FlagsNode = new TreeNode(); } GREv1FlagsNode.Nodes.Clear(); GREv1FlagsNode.Text = "CRKSsAFlagsVersion:[0x" + v1.CRKSsAFlagsVersion.ToString("X4") + "]"; //第一个字节 GREv1FlagsNode.Nodes.Add(v1.C + "... .... .... .... = [" + v1.C + "] C(Checksum Present): " + ((v1.C == 1) ? "Yes" : "No")); //0 GREv1FlagsNode.Nodes.Add("." + v1.R + ".. .... .... .... = [" + v1.R + "] R(Routing Present): " + ((v1.R == 1) ? "Yes" : "No")); //0 GREv1FlagsNode.Nodes.Add(".." + v1.K + ". .... .... .... = [" + v1.K + "] K(Key Present): " + ((v1.K == 1) ? "Yes" : "No")); //used GREv1FlagsNode.Nodes.Add("..." + v1.S + " .... .... .... = [" + v1.S + "] S(Sequence Number present): " + ((v1.S == 1) ? "Yes" : "No")); //used GREv1FlagsNode.Nodes.Add(".... " + v1.s + "... .... .... = [" + v1.s + "] s(Strict Source Route): " + ((v1.s == 1) ? "Yes" : "No")); //0 string tmpRecuer = Convert.ToString(v1.Recur, 2).PadLeft(3, '0'); GREv1FlagsNode.Nodes.Add(".... ." + tmpRecuer + " .... .... = [0x" + v1.Recur.ToString("X2") + "] Recur(Recursion Control): " + v1.Recur); //0 递归控制 //第二个字节 GREv1FlagsNode.Nodes.Add(".... .... " + v1.A + "... .... = [" + v1.A + "] A(Acknowledgment sequence number present): " + ((v1.A == 1) ? "Yes" : "No")); //used string tmpFlags = Convert.ToString(v1.Flags).PadLeft(4, '0').Insert(3, " "); GREv1FlagsNode.Nodes.Add(".... .... ." + tmpFlags + "... = [0x" + v1.Flags.ToString("X2") + "] Flags: " + v1.Flags); //0 GREv1FlagsNode.Nodes.Add(".... .... .... ." + Convert.ToString((ushort)v1.Version, 2).PadLeft(3, '0') + " = [0x" + ((ushort)v1.Version).ToString("X2") + "] Version: " + v1.Version); //used GREv1Node.Nodes.Add(GREv1FlagsNode); #endregion GREv1Node.Nodes.Add("Protocol: " + v1.Protocol + " [0x" + ((ushort)v1.Protocol).ToString("X4") + "]"); GREv1Node.Nodes.Add("Payload Length: " + v1.PayloadLength); GREv1Node.Nodes.Add("Call ID: " + v1.CallID + " [0x" + ((ushort)v1.CallID).ToString("X4") + "]"); if (v1.S == 1) { GREv1Node.Nodes.Add("Sequence Number: " + v1.SequenceNumber); } if (v1.A == 1) { GREv1Node.Nodes.Add("Acknowledgment Number: " + v1.AcknowledgmentNumber); } Tree.Nodes.Add(GREv1Node); NextGRE(v1.PayloadData, v1.Protocol); }