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); } }
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)); } }
public ArrivedPacket(int number, TimeSpan CaptureTime, IPv4Packet packet) { this.number = number; this.Capturetime = CaptureTime; this.packet = packet; }
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); }