コード例 #1
0
 public IcmpPacket(byte[] data)
 {
     //PacketType = MyProtocolType.Icmp;
     this.data = data;
     if (type == Type.DestinationUnreachable || type == Type.RedirectMessage || type == Type.TimeExceeded || type == Type.BadIpHeader)
     {
         ChildPacket = new IPv4Packet(ChildBytes);
     }
 }
コード例 #2
0
 private void PacketStreamView_SelectedIndexChanged(object sender, EventArgs e)
 {
     ListView.SelectedIndexCollection ind = PacketStreamView.SelectedIndices;
     if (ind.Count > 0)
     {
         IPv4Packet CurPacket = MySniffer.getPacket(ind[0]);
         PacketInfoView.Nodes.Clear();
         PacketInfoView.Nodes.Add(parsePacket(CurPacket));
     }
 }
コード例 #3
0
 public ArrivedPacket(int number, TimeSpan CaptureTime, IPv4Packet packet)
 {
     this.number      = number;
     this.Capturetime = CaptureTime;
     this.packet      = packet;
 }
コード例 #4
0
        private TreeNode parsePacket(Packet packet)
        {
            TreeNode CurNode = new TreeNode();

            switch (packet.PacketType)
            {
            case MyProtocolType.IP:
            {
                IPv4Packet Ippac = (IPv4Packet)packet;
                CurNode.Text = "Internet Protocol v4 -  Отправитель: " + Ippac.SourceAddress.ToString() + " Получатель: " + Ippac.DestAddress.ToString();
                CurNode.Nodes.Add("Длина заголовка: " + Ippac.HeaderLength.ToString() + " (" + Ippac.HeaderLength * 4 + ") байт");
                CurNode.Nodes.Add("DSCP:" + Ippac.DSCP.ToString());
                CurNode.Nodes.Add("Общая длина: " + Ippac.TotalLength.ToString() + " байт");
                CurNode.Nodes.Add("Флаги: " + getString(Ippac.Flags));
                CurNode.Nodes.Add("Смещение фрагмента: " + getString(Ippac.FragmentOffset));
                CurNode.Nodes.Add("TTL: " + Ippac.TTL.ToString());
                CurNode.Nodes.Add("Протокол внутри: " + Enum.GetName(typeof(MyProtocolType), Ippac.protocolType) + " (" + Ippac.HeaderBytes[9] + ")");
                CurNode.Nodes.Add("Чексумма заголовка: " + Ippac.HeaderChecksum.ToString());
                CurNode.Nodes.Add("Отправитель: " + Ippac.SourceAddress.ToString());
                CurNode.Nodes.Add("Получатель: " + Ippac.DestAddress.ToString());
                if (Ippac.HeaderLength > 5)
                {
                    TreeNode Opt = new TreeNode("Опции");
                    Opt.Nodes.Add(getArrayBits(Ippac.Options));
                }
                TreeNode RawHeader = new TreeNode("Байты заголовка");
                TreeNode RawData   = new TreeNode("Байты нагрузки");
                RawHeader.Nodes.Add(getArrayBits(Ippac.HeaderBytes));
                RawData.Nodes.Add(getArrayBits(Ippac.ChildBytes));
                CurNode.Nodes.Add(RawHeader);
                CurNode.Nodes.Add(RawData);
                CurNode.Nodes.Add(parsePacket(Ippac.ChildPacket));
            }

            break;

            case MyProtocolType.Icmp:
            {
                IcmpPacket      Icmppac = (IcmpPacket)packet;
                IcmpPacket.Type type    = Icmppac.type;
                byte            Code    = Icmppac.Code;
                CurNode.Text = "Internet Control Message Protocol " + Icmppac.Description();
                CurNode.Nodes.Add("Тип: " + Enum.GetName(typeof(IcmpPacket.Type), type));
                CurNode.Nodes.Add("Code: " + Code);
                CurNode.Nodes.Add("Чексумма: " + Icmppac.Checksum.ToString());
                switch (type)
                {
                case IcmpPacket.Type.EchoReply:
                {
                    CurNode.Nodes.Add("Идентификатор: " + Icmppac.Identifier.ToString());
                    CurNode.Nodes.Add("SequenceNumber: " + Icmppac.SequenceNumber.ToString());
                }
                break;

                case IcmpPacket.Type.DestinationUnreachable:
                {
                    if (Code == 4)
                    {
                        CurNode.Nodes.Add("NextHopMTU: " + Icmppac.NextHopMTU);
                    }
                    CurNode.Nodes.Add(parsePacket(Icmppac.ChildPacket));
                }
                break;

                case IcmpPacket.Type.RedirectMessage:
                {
                    CurNode.Nodes.Add("IP адрес: " + Icmppac.IpAddress.ToString());
                    CurNode.Nodes.Add(parsePacket(Icmppac.ChildPacket));
                }
                break;

                case IcmpPacket.Type.EchoRequest:
                {
                    CurNode.Nodes.Add("Идентификатор: " + Icmppac.Identifier.ToString());
                    CurNode.Nodes.Add("SequenceNumber: " + Icmppac.SequenceNumber.ToString());
                }
                break;

                case IcmpPacket.Type.RouterAdvertisment:
                {
                    CurNode.Nodes.Add("AdvertismentCount: " + Icmppac.AdvertismentCount.ToString());
                    CurNode.Nodes.Add("AddressEntrySize: " + Icmppac.AddressEntrySize.ToString());
                    CurNode.Nodes.Add("Время жизни: " + Icmppac.Lifetime.ToString());
                }
                break;

                case IcmpPacket.Type.TimeExceeded:
                {
                    CurNode.Nodes.Add(parsePacket(Icmppac.ChildPacket));
                }
                break;

                case IcmpPacket.Type.BadIpHeader:
                {
                    CurNode.Nodes.Add("Указатель: " + Icmppac.Pointer.ToString());
                    CurNode.Nodes.Add(parsePacket(Icmppac.ChildPacket));
                }
                break;

                case IcmpPacket.Type.TimeStamp:
                {
                    CurNode.Nodes.Add("Идентификатор: " + Icmppac.Identifier.ToString());
                    CurNode.Nodes.Add("SequenceNumber: " + Icmppac.SequenceNumber.ToString());
                    CurNode.Nodes.Add("OriginateTimestamp: " + Icmppac.OriginateTimestamp.ToString());
                    CurNode.Nodes.Add("ReceiveTimestamp: " + Icmppac.ReceiveTimestamp.ToString());
                    CurNode.Nodes.Add("TransmitTimestamp: " + Icmppac.TransmitTimestamp.ToString());
                }
                break;

                case IcmpPacket.Type.TimeStampReply:
                {
                    CurNode.Nodes.Add("Идентификатор: " + Icmppac.Identifier.ToString());
                    CurNode.Nodes.Add("SequenceNumber: " + Icmppac.SequenceNumber.ToString());
                    CurNode.Nodes.Add("OriginateTimestamp: " + Icmppac.OriginateTimestamp.ToString());
                    CurNode.Nodes.Add("ReceiveTimestamp: " + Icmppac.ReceiveTimestamp.ToString());
                    CurNode.Nodes.Add("TransmitTimestamp: " + Icmppac.TransmitTimestamp.ToString());
                }
                break;
                }
                TreeNode RawHeader = new TreeNode("Байты заголовка");
                TreeNode RawData   = new TreeNode("Байты нагрузки");
                RawHeader.Nodes.Add(getArrayBits(Icmppac.HeaderBytes));
                RawData.Nodes.Add(getArrayBits(Icmppac.ChildBytes));
                CurNode.Nodes.Add(RawHeader);
                CurNode.Nodes.Add(RawData);
            }
            break;

            case MyProtocolType.Udp:
            {
                UdpPacket Udppac = (UdpPacket)packet;
                CurNode.Text = "User Datagramm Protocol - Порт отправителя: " + Udppac.SourcePort + " Порт получателя: " + Udppac.DestPort;
                CurNode.Nodes.Add("Порт отправителя: " + Udppac.SourcePort.ToString());
                CurNode.Nodes.Add("Порт получателя: " + Udppac.DestPort.ToString());
                CurNode.Nodes.Add("Чексумма: " + Udppac.Checksum.ToString());
                CurNode.Nodes.Add("Длина: " + Udppac.Length.ToString() + " байт");
                TreeNode RawHeader = new TreeNode("Байты заголовка");
                TreeNode RawData   = new TreeNode("Байты нагрузки");
                RawHeader.Nodes.Add(getArrayBits(Udppac.HeaderBytes));
                RawData.Nodes.Add(getArrayBits(Udppac.ChildBytes));
                CurNode.Nodes.Add(RawHeader);
                CurNode.Nodes.Add(RawData);
            }

            break;

            case MyProtocolType.Tcp:
            {
                TcpPacket Tcppac = (TcpPacket)packet;
                CurNode.Text = "Transmission Control Protocol " + Tcppac.Description();
                CurNode.Nodes.Add("Sender port: " + Tcppac.SourcePort.ToString());
                CurNode.Nodes.Add("Recipient port: " + Tcppac.DestPort.ToString());
                CurNode.Nodes.Add("Sequence Number: " + Tcppac.SequenceNumber.ToString());
                CurNode.Nodes.Add("AcknowledgementNumber: " + Tcppac.AcknowledgementNumber.ToString());
                CurNode.Nodes.Add("Headline length: " + Tcppac.HeaderLength.ToString() + " ( " + Tcppac.HeaderLength * 4 + " байт)");
                CurNode.Nodes.Add("Flags: " + getString(Tcppac.Flags));
                CurNode.Nodes.Add("Window size : " + Tcppac.WindowSize.ToString());
                CurNode.Nodes.Add("Check Sum: " + Tcppac.CheckSum.ToString());
                CurNode.Nodes.Add("Index of importance: " + Tcppac.UrgentPointer.ToString());
                if (Tcppac.HeaderLength > 5)
                {
                    TreeNode Opt = new TreeNode("Опции");
                    Opt.Nodes.Add(getArrayBits(Tcppac.Options));
                    CurNode.Nodes.Add(Opt);
                }
                TreeNode RawHeader = new TreeNode("Байты заголовка");
                TreeNode RawData   = new TreeNode("Байты нагрузки");
                RawHeader.Nodes.Add(getArrayBits(Tcppac.HeaderBytes));
                RawData.Nodes.Add(getArrayBits(Tcppac.ChildBytes));
                CurNode.Nodes.Add(RawHeader);
                CurNode.Nodes.Add(RawData);
            }
            break;

            default: break;
            }
            return(CurNode);
        }