Example #1
0
 /// <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));
         }
     }
 }
Example #2
0
        /// <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;
        }
Example #3
0
        /// <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;
        }
Example #4
0
        /// <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();
 }