예제 #1
0
        //标记当前数据是否有效

        #region 构建数据行
        /// <summary>
        /// DataGridRow
        /// </summary>
        /// <returns>返回字符串数据</returns>
        public string[] Row(RawCapture rawPacket, uint packetID)
        {
            string[] rows = new string[7];

            rows[0] = string.Format("{0:D7}", packetID); //编号
            rows[1] = "Unknown";
            rows[2] = rawPacket.Data.Length.ToString();  //数据长度bytes
            rows[3] = "--";
            rows[4] = "--";
            rows[5] = "--";
            //rows[6] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff");
            rows[6] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            Packet packet = Packet.ParsePacket(rawPacket.LinkLayerType, rawPacket.Data);

            EthernetPacket ep = EthernetPacket.GetEncapsulated(packet);

            if (ep != null)
            {
                rows[1] = "Ethernet(v2)";
                rows[3] = Format.MacFormat(ep.SourceHwAddress.ToString());
                rows[4] = Format.MacFormat(ep.DestinationHwAddress.ToString());
                rows[5] = "[" + ep.Type.ToString() + "]";

                #region IP
                IpPacket ip = IpPacket.GetEncapsulated(packet);
                if (ip != null)
                {
                    if (ip.Version == IpVersion.IPv4)
                    {
                        rows[1] = "IPv4";
                    }
                    else
                    {
                        rows[1] = "IPv6";
                    }
                    rows[3] = ip.SourceAddress.ToString();
                    rows[4] = ip.DestinationAddress.ToString();
                    rows[5] = "[下层协议:" + ip.NextHeader.ToString() + "] [版本:" + ip.Version.ToString() + "]";

                    TcpPacket tcp = TcpPacket.GetEncapsulated(packet);
                    if (tcp != null)
                    {
                        rows[1]  = "TCP";
                        rows[3] += " [" + tcp.SourcePort.ToString() + "]";
                        rows[4] += " [" + tcp.DestinationPort.ToString() + "]";

                        #region 25:smtp协议;80, 8080, 3128: Http; 21: FTP;
                        if (tcp.DestinationPort.ToString() == "25" || tcp.SourcePort.ToString() == "25")
                        {
                            rows[1] = "SMTP";
                        }
                        else if (tcp.DestinationPort.ToString() == "80" || tcp.DestinationPort.ToString() == "8080" || tcp.DestinationPort.ToString() == "3128")
                        {
                            rows[1] = "HTTP";
                        }
                        else if (tcp.DestinationPort.ToString() == "21")
                        {
                            rows[1] = "FTP";
                        }
                        else if (tcp.DestinationPort.ToString() == "143")
                        {
                            rows[1] = "POP3";
                        }
                        #endregion
                        return(rows);
                    }
                    UdpPacket udp = UdpPacket.GetEncapsulated(packet);
                    if (udp != null)
                    {
                        if (rawPacket.Data[42] == ((byte)02))
                        {
                            rows[1] = "OICQ";
                        }
                        else
                        {
                            rows[1] = "UDP";
                        }
                        rows[3] += " [" + udp.SourcePort.ToString() + "]";
                        rows[4] += " [" + udp.DestinationPort.ToString() + "]";
                        return(rows);
                    }

                    ICMPv4Packet icmpv4 = ICMPv4Packet.GetEncapsulated(packet);
                    if (icmpv4 != null)
                    {
                        rows[1] = "ICMPv4";
                        rows[5] = "[校验:" + icmpv4.Checksum.ToString() + "] [类型:" + icmpv4.TypeCode.ToString() + "] [序列号:" + icmpv4.Sequence.ToString() + "]";
                        return(rows);
                    }
                    ICMPv6Packet icmpv6 = ICMPv6Packet.GetEncapsulated(packet);
                    if (icmpv6 != null)
                    {
                        rows[1] = "ICMPv6";
                        rows[5] = "[Code:" + icmpv6.Code.ToString() + "] [Type" + icmpv6.Type.ToString() + "]";
                        return(rows);
                    }
                    IGMPv2Packet igmp = IGMPv2Packet.GetEncapsulated(packet);
                    if (igmp != null)
                    {
                        rows[1] = "IGMP";
                        rows[5] = "[只适用于IGMPv2] [组地址:" + igmp.GroupAddress.ToString() + "]  [类型:" + igmp.Type.ToString() + "]";
                        return(rows);
                    }
                    return(rows);
                }
                #endregion

                ARPPacket arp = ARPPacket.GetEncapsulated(packet);
                if (arp != null)
                {
                    rows[1] = "ARP";
                    rows[3] = Format.MacFormat(arp.SenderHardwareAddress.ToString());
                    rows[4] = Format.MacFormat(arp.TargetHardwareAddress.ToString());
                    rows[5] = "[Arp操作方式:" + arp.Operation.ToString() + "] [发送者:" + arp.SenderProtocolAddress.ToString() + "] [目标:" + arp.TargetProtocolAddress.ToString() + "]";
                    return(rows);
                }
                WakeOnLanPacket wp = WakeOnLanPacket.GetEncapsulated(packet);
                if (wp != null)
                {
                    rows[1] = "Wake On Lan";
                    rows[3] = Format.MacFormat(ep.SourceHwAddress.ToString());
                    rows[4] = Format.MacFormat(wp.DestinationMAC.ToString());
                    rows[5] = "[唤醒网络地址:" + wp.DestinationMAC.ToString() + "] [有效性:" + wp.IsValid().ToString() + "]";
                    return(rows);
                }
                PPPoEPacket poe = PPPoEPacket.GetEncapsulated(packet);
                if (poe != null)
                {
                    rows[1] = "PPPoE";
                    rows[5] = poe.Type.ToString() + " " + poe.Version.ToString();
                    return(rows);
                }
                LLDPPacket llp = LLDPPacket.GetEncapsulated(packet);
                if (llp != null)
                {
                    rows[1] = "LLDP";
                    rows[5] = llp.ToString();
                    return(rows);
                }
                return(rows);
            }
            //链路层
            PPPPacket ppp = PPPPacket.GetEncapsulated(packet);
            if (ppp != null)
            {
                rows[1] = "PPP";
                rows[3] = "--";
                rows[4] = "--";
                rows[5] = "协议类型:" + ppp.Protocol.ToString();
                return(rows);
            }
            //PPPSerial
            PppSerialPacket ppps = PppSerialPacket.GetEncapsulated(packet);
            if (ppps != null)
            {
                rows[1] = "PPP";
                rows[3] = "--";
                rows[4] = "0x" + ppps.Address.ToString("X2");
                rows[5] = "地址:" + ppps.Address.ToString("X2") + " 控制:" + ppps.Control.ToString() + " 协议类型:" + ppps.Protocol.ToString();
                return(rows);
            }
            //Cisco HDLC
            CiscoHDLCPacket hdlc = CiscoHDLCPacket.GetEncapsulated(packet);
            if (hdlc != null)
            {
                rows[1] = "Cisco HDLC";
                rows[3] = "--";
                rows[4] = "0x" + hdlc.Address.ToString("X2");
                rows[5] = "地址:" + hdlc.Address.ToString("X2") + " 控制:" + hdlc.Control.ToString() + " 协议类型:" + hdlc.Protocol.ToString();
                return(rows);
            }
            #region
            //SmtpPacket smtp = SmtpPacket.
            #endregion

            PacketDotNet.Ieee80211.MacFrame ieee = Packet.ParsePacket(rawPacket.LinkLayerType, rawPacket.Data) as PacketDotNet.Ieee80211.MacFrame;
            if (ieee != null)
            {
                rows[1] = "IEEE802.11 MacFrame";
                rows[3] = "--";
                rows[4] = "--";
                rows[5] = "帧校验序列:" + ieee.FrameCheckSequence.ToString() + " 封装帧:" + ieee.FrameControl.ToString();
                return(rows);
            }
            PacketDotNet.Ieee80211.RadioPacket ieeePacket = Packet.ParsePacket(rawPacket.LinkLayerType, rawPacket.Data) as PacketDotNet.Ieee80211.RadioPacket;
            if (ieeePacket != null)
            {
                rows[1] = "IEEE Radio";
                rows[5] = "Version=" + ieeePacket.Version.ToString();
            }
            LinuxSLLPacket linux = Packet.ParsePacket(rawPacket.LinkLayerType, rawPacket.Data) as LinuxSLLPacket;
            if (linux != null)
            {
                rows[1] = "LinuxSLL";
                rows[5] = "Tyep=" + linux.Type.ToString() + " Protocol=" + linux.EthernetProtocolType.ToString();
            }
            return(rows);
        }
예제 #2
0
        public void ConstructFromValues()
        {
            var expectedChassisIDType           = ChassisSubTypes.NetworkAddress;
            var expectedChassisIDNetworkAddress = new NetworkAddress(new IPAddress(new byte[4] {
                0x0A, 0x00, 0x01, 0x01
            }));
            var expectedPortIDBytes = new byte[15] {
                0x30, 0x30, 0x31, 0x42, 0x35, 0x34, 0x39, 0x34, 0x35, 0x41, 0x38, 0x42, 0x3a, 0x50, 0x32
            };
            ushort expectedTimeToLive                   = 120;
            string expectedPortDescription              = "Port Description";
            string expectedSystemName                   = "SystemName";
            string expectedSystemDescription            = "System Description";
            ushort expectedSystemCapabilitiesCapability = 18;
            ushort expectedSystemCapabilitiesEnabled    = 16;
            var    managementAddressNetworkAddress      = new NetworkAddress(new IPAddress(new byte[4] {
                0x0A, 0x00, 0x01, 0x01
            }));
            var  managementAddressObjectIdentifier = "Object Identifier";
            uint managementAddressInterfaceNumber  = 0x44060124;

            var expectedOrganizationUniqueIdentifier = new byte[3] {
                0x24, 0x10, 0x12
            };
            var expectedOrganizationSubType       = 2;
            var expectedOrganizationSpecificBytes = new byte[4] {
                0xBA, 0xAD, 0xF0, 0x0D
            };

            var valuesLLDPPacket = new LLDPPacket();

            Console.WriteLine("valuesLLDPPacket.ToString() {0}", valuesLLDPPacket.ToString());
            valuesLLDPPacket.TlvCollection.Add(new ChassisID(expectedChassisIDType, expectedChassisIDNetworkAddress));
            Console.WriteLine("valuesLLDPPacket.ToString() {0}", valuesLLDPPacket.ToString());
            //valuesLLDPPacket.TlvCollection.Add(new PortID(lldpPacket, PortSubTypes.MACAddress, new PhysicalAddress(new byte[6] { 0x00, 0x1C, 0x23, 0xAF, 0x08, 0xF3 })));
            valuesLLDPPacket.TlvCollection.Add(new PortID(PortSubTypes.LocallyAssigned, expectedPortIDBytes));
            valuesLLDPPacket.TlvCollection.Add(new TimeToLive(expectedTimeToLive));
            valuesLLDPPacket.TlvCollection.Add(new PortDescription(expectedPortDescription));
            valuesLLDPPacket.TlvCollection.Add(new SystemName(expectedSystemName));
            valuesLLDPPacket.TlvCollection.Add(new SystemDescription(expectedSystemDescription));
            valuesLLDPPacket.TlvCollection.Add(new SystemCapabilities(expectedSystemCapabilitiesCapability, expectedSystemCapabilitiesEnabled));
            valuesLLDPPacket.TlvCollection.Add(new ManagementAddress(managementAddressNetworkAddress,
                                                                     InterfaceNumbering.SystemPortNumber,
                                                                     managementAddressInterfaceNumber,
                                                                     managementAddressObjectIdentifier));
            valuesLLDPPacket.TlvCollection.Add(new OrganizationSpecific(expectedOrganizationUniqueIdentifier,
                                                                        expectedOrganizationSubType,
                                                                        expectedOrganizationSpecificBytes));
            valuesLLDPPacket.TlvCollection.Add(new EndOfLLDPDU());

            var lldpBytes = valuesLLDPPacket.Bytes;

            Console.WriteLine("valuesLLDPPacket.ToString() {0}", valuesLLDPPacket.ToString());

            // reparse these bytes back into a lldp packet
            var lldpPacket = new LLDPPacket(new ByteArraySegment(lldpBytes));

            Console.WriteLine("lldpPacket.ToString() {0}", lldpPacket.ToString());

            int expectedTlvCount = 10;

            Assert.AreEqual(expectedTlvCount, lldpPacket.TlvCollection.Count);

            int count = 1;

            foreach (TLV tlv in lldpPacket.TlvCollection)
            {
                Console.WriteLine("Type: " + tlv.GetType().ToString());
                switch (count)
                {
                case 1:
                    Assert.AreEqual(typeof(ChassisID), tlv.GetType());
                    var chassisID = (ChassisID)tlv;
                    Assert.AreEqual(ChassisSubTypes.NetworkAddress, chassisID.SubType);
                    Assert.AreEqual(typeof(NetworkAddress), chassisID.SubTypeValue.GetType());
                    Console.WriteLine(expectedChassisIDNetworkAddress.ToString());
                    Console.WriteLine(chassisID.SubTypeValue.ToString());
                    Assert.AreEqual(expectedChassisIDNetworkAddress, chassisID.SubTypeValue);
                    break;

                case 2:
                    Assert.AreEqual(typeof(PortID), tlv.GetType());
                    var portID = (PortID)tlv;
                    Assert.AreEqual(PortSubTypes.LocallyAssigned, portID.SubType);
                    Assert.AreEqual(expectedPortIDBytes, portID.SubTypeValue);
                    //Assert.AreEqual(PortSubTypes.MACAddress, portID.SubType);
                    //var macAddress = new PhysicalAddress(new byte[6] { 0x00, 0x1C, 0x23, 0xAF, 0x08, 0xF3 });
                    //Assert.AreEqual(macAddress, portID.SubTypeValue);
                    break;

                case 3:
                    Assert.AreEqual(typeof(TimeToLive), tlv.GetType());
                    Assert.AreEqual(expectedTimeToLive, ((TimeToLive)tlv).Seconds);
                    break;

                case 4:
                    Assert.AreEqual(typeof(PortDescription), tlv.GetType());
                    Assert.AreEqual(expectedPortDescription, ((PortDescription)tlv).Description);
                    break;

                case 5:
                    Assert.AreEqual(typeof(SystemName), tlv.GetType());
                    Assert.AreEqual(expectedSystemName, ((SystemName)tlv).Name);
                    break;

                case 6:
                    Assert.AreEqual(typeof(SystemDescription), tlv.GetType());
                    Assert.AreEqual(expectedSystemDescription, ((SystemDescription)tlv).Description);
                    break;

                case 7:
                    Assert.AreEqual(typeof(SystemCapabilities), tlv.GetType());
                    var capabilities = (SystemCapabilities)tlv;
                    Assert.IsTrue(capabilities.IsCapable(CapabilityOptions.Repeater));
                    Assert.IsTrue(capabilities.IsEnabled(CapabilityOptions.Router));
                    Assert.IsFalse(capabilities.IsCapable(CapabilityOptions.Bridge));
                    Assert.IsFalse(capabilities.IsCapable(CapabilityOptions.DocsisCableDevice));
                    Assert.IsFalse(capabilities.IsCapable(CapabilityOptions.Other));
                    Assert.IsFalse(capabilities.IsCapable(CapabilityOptions.StationOnly));
                    Assert.IsFalse(capabilities.IsCapable(CapabilityOptions.Telephone));
                    Assert.IsFalse(capabilities.IsCapable(CapabilityOptions.WLanAP));
                    break;

                case 8:
                    Assert.AreEqual(typeof(ManagementAddress), tlv.GetType());
                    var mgmtAdd = (ManagementAddress)tlv;
                    Assert.AreEqual(AddressFamily.IPv4, mgmtAdd.AddressSubType);
                    Assert.AreEqual(managementAddressNetworkAddress, mgmtAdd.MgmtAddress);
                    Assert.AreEqual(InterfaceNumbering.SystemPortNumber, mgmtAdd.InterfaceSubType);
                    Assert.AreEqual(managementAddressInterfaceNumber, mgmtAdd.InterfaceNumber);
                    int expectedObjIdLength = managementAddressObjectIdentifier.Length;
                    Assert.AreEqual(expectedObjIdLength, mgmtAdd.ObjIdLength);
                    Assert.AreEqual(managementAddressObjectIdentifier, mgmtAdd.ObjectIdentifier);
                    break;

                case 9:
                    Assert.AreEqual(typeof(OrganizationSpecific), tlv.GetType());
                    var orgSpecifig = (OrganizationSpecific)tlv;
                    Assert.AreEqual(expectedOrganizationUniqueIdentifier, orgSpecifig.OrganizationUniqueID);
                    Assert.AreEqual(expectedOrganizationSubType, orgSpecifig.OrganizationDefinedSubType);
                    Assert.AreEqual(expectedOrganizationSpecificBytes, orgSpecifig.OrganizationDefinedInfoString);
                    break;

                case 10:
                    Assert.AreEqual(typeof(EndOfLLDPDU), tlv.GetType());
                    break;

                default:
                    throw new ArgumentException();
                }

                // increment the counter
                count++;
            }
        }
예제 #3
0
 private void lbxCapturedPacketList_SelectionChanged(object sender, SelectionChangedEventArgs e)
 {
     try
     {
         gbxPacketInfo.Visibility = Visibility.Visible;
         Packet packet = lbxCapturedPacketList.SelectedItem as Packet;
         Console.WriteLine(packet.GetType());
         TcpPacket       tcp      = (TcpPacket)packet.Extract(typeof(TcpPacket));
         IpPacket        ip       = (IpPacket)packet.Extract(typeof(IpPacket));
         EthernetPacket  ethernet = (EthernetPacket)packet.Extract(typeof(EthernetPacket));
         UdpPacket       udp      = (UdpPacket)packet.Extract(typeof(UdpPacket));
         ICMPv4Packet    icmpv4   = (ICMPv4Packet)packet.Extract(typeof(ICMPv4Packet));
         ICMPv6Packet    icmpv6   = (ICMPv6Packet)packet.Extract(typeof(ICMPv6Packet));
         ICMPv6Packet    igmp     = (ICMPv6Packet)packet.Extract(typeof(ICMPv6Packet));
         PPPoEPacket     PPPoE    = (PPPoEPacket)packet.Extract(typeof(PPPoEPacket));
         PPPPacket       pppp     = (PPPPacket)packet.Extract(typeof(PPPPacket));
         LLDPPacket      LLDP     = (LLDPPacket)packet.Extract(typeof(LLDPPacket));
         WakeOnLanPacket WOL      = (WakeOnLanPacket)packet.Extract(typeof(WakeOnLanPacket));
         if (tcp != null)
         {
             this.Dispatcher.Invoke((Action)(() =>
             {
                 tbxInfo.Text = tcp.ToString(StringOutputType.Verbose);
             }));
         }
         if (ip != null)
         {
             this.Dispatcher.Invoke((Action)(() =>
             {
                 tbxInfo.Text = ip.ToString(StringOutputType.Verbose);
             }));
         }
         if (ethernet != null)
         {
             this.Dispatcher.Invoke((Action)(() =>
             {
                 tbxInfo.Text = ethernet.ToString(StringOutputType.Verbose);
             }));
         }
         if (udp != null)
         {
             this.Dispatcher.Invoke((Action)(() =>
             {
                 tbxInfo.Text = udp.ToString(StringOutputType.Verbose);
             }));
         }
         if (icmpv4 != null)
         {
             this.Dispatcher.Invoke((Action)(() =>
             {
                 tbxInfo.Text = icmpv4.ToString(StringOutputType.Verbose);
             }));
         }
         if (icmpv6 != null)
         {
             this.Dispatcher.Invoke((Action)(() =>
             {
                 tbxInfo.Text = icmpv6.ToString(StringOutputType.Verbose);
             }));
         }
         if (igmp != null)
         {
             this.Dispatcher.Invoke((Action)(() =>
             {
                 tbxInfo.Text = igmp.ToString(StringOutputType.Verbose);
             }));
         }
         if (PPPoE != null)
         {
             this.Dispatcher.Invoke((Action)(() =>
             {
                 tbxInfo.Text = PPPoE.ToString(StringOutputType.Verbose);
             }));
         }
         if (pppp != null)
         {
             this.Dispatcher.Invoke((Action)(() =>
             {
                 tbxInfo.Text = pppp.ToString(StringOutputType.Verbose);
             }));
         }
         if (LLDP != null)
         {
             this.Dispatcher.Invoke((Action)(() =>
             {
                 tbxInfo.Text = LLDP.ToString(StringOutputType.Verbose);
             }));
         }
         if (WOL != null)
         {
             this.Dispatcher.Invoke((Action)(() =>
             {
                 tbxInfo.Text = WOL.ToString(StringOutputType.Verbose);
             }));
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine("{0} Exception caught.", ex);
     }
 }