/// <summary> /// 为当前的TreeView增加节点(节点信息来自编码的包的字段) /// </summary> /// <param name="p">要解码的包</param> /// <param name="deepth">当前各个项的根节点的序号</param> private void addNodes(Packet p, int deepth) { //增加包的类型名称并切掉命名空间前缀 string packetName = p.GetType().ToString(); packetName = packetName.Substring(13, packetName.Length - 13); TreeNode rootNode = new TreeNode(packetName); this.tvPacket.Nodes.Add(rootNode); Type t = p.GetType(); PropertyInfo[] pis = t.GetProperties(); //输出包的各个属性 for (int i = 0; i < pis.Length; i++) { string name = pis[i].Name; Object value = pis[i].GetValue(p, null); //空属性不输出;Color属性不输出;类型为System.Byte[]的项不输出 if (value != null && name != "Color" && pis[i].PropertyType.FullName != "System.Byte[]") { string strValue = value.ToString(); this.tvPacket.Nodes[deepth].Nodes.Add(new TreeNode(name + " : " + strValue)); } } }
/// <summary> /// Constructor /// </summary> /// <param name="bas">Payload Bytes</param> /// <param name="parentPacket">Parent Packet</param> public DrdaDDMPacket(ByteArraySegment bas, Packet parentPacket) : this(bas) { Log.DebugFormat("ParentPacket.GetType() {0}", parentPacket.GetType()); ParentPacket = parentPacket; }
/// <summary> /// Constructor /// </summary> /// <param name="bas">Payload Bytes</param> /// <param name="ParentPacket">Parent Packet</param> public DrdaDDMPacket(ByteArraySegment bas, Packet ParentPacket) : this(bas) { log.DebugFormat("ParentPacket.GetType() {0}", ParentPacket.GetType()); this.ParentPacket = ParentPacket; }
/// <summary> /// Called by IPv4 and IPv6 packets to parse their packet payload /// </summary> /// <param name="payload"> /// A <see cref="ByteArraySegment"/> /// </param> /// <param name="ProtocolType"> /// A <see cref="IPProtocolType"/> /// </param> /// <param name="ParentPacket"> /// A <see cref="Packet"/> /// </param> /// <returns> /// A <see cref="PacketOrByteArraySegment"/> /// </returns> internal static PacketOrByteArraySegment ParseEncapsulatedBytes(ByteArraySegment payload, IPProtocolType ProtocolType, Packet ParentPacket) { log.DebugFormat("payload: {0}, ParentPacket.GetType() {1}", payload, ParentPacket.GetType()); var payloadPacketOrData = new PacketOrByteArraySegment(); // if we are an ipv4 packet with a non-zero FragementOffset we shouldn't attempt // to decode the content, it is a continuation of a previous packet so it won't // have the proper headers for its type, that was in the first packet fragment var ipv4Packet = ParentPacket.Extract(typeof(IPv4Packet)) as IPv4Packet; if (ipv4Packet != null) { if (ipv4Packet.FragmentOffset > 0) { payloadPacketOrData.TheByteArraySegment = payload; return(payloadPacketOrData); } } switch (ProtocolType) { case IPProtocolType.TCP: payloadPacketOrData.ThePacket = new TcpPacket(payload, ParentPacket); break; case IPProtocolType.UDP: payloadPacketOrData.ThePacket = new UdpPacket(payload, ParentPacket); break; case IPProtocolType.ICMP: payloadPacketOrData.ThePacket = new ICMPv4Packet(payload, ParentPacket); break; case IPProtocolType.ICMPV6: payloadPacketOrData.ThePacket = new ICMPv6Packet(payload, ParentPacket); break; case IPProtocolType.IGMP: payloadPacketOrData.ThePacket = new IGMPv2Packet(payload, ParentPacket); break; case IPProtocolType.OSPF: payloadPacketOrData.ThePacket = OSPFPacket.ConstructOSPFPacket(payload.Bytes, payload.Offset); break; // NOTE: new payload parsing entries go here default: payloadPacketOrData.TheByteArraySegment = payload; break; } return(payloadPacketOrData); }
public packView(int loffset , ref PacketDotNet.Packet targetPack) { pack = targetPack; Text = pack.GetType().Name; moffset = loffset; listField(ref pack); paintNodes(); }