Exemplo n.º 1
0
        private void Send()
        {
            while (true)
            {
                string input = TXData.Take();
                if (input == "")
                {
                    continue;
                }
                var Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
                var MD5Sum    = BitConverter.ToString(sha256Ctx.ComputeHash(System.Text.Encoding.Default.GetBytes(input + rand.Next(0, 65536).ToString()))).Replace("-", "");

                Stack <string> PiecedMsg = new Stack <string>();
                while (input.Length > 0)
                {
                    if (input.Length <= 5)
                    {
                        PiecedMsg.Push(input);
                        input = "";
                    }
                    else
                    {
                        var cutlen = rand.Next(0, input.Length);
                        PiecedMsg.Push(input.Substring(0, cutlen));
                        input = input.Substring(cutlen);
                    }
                }
                var PacketTotal = PiecedMsg.Count;

                while (PiecedMsg.Count > 0)
                {
                    IPAddress SrcIP, DstIP;
                    switch (rand.Next(0, 2))
                    {
                    case 0:
                        if (IPv6SrcList.Count != 0 && IPv6DstList.Count != 0)
                        {
                            DstIP = IPv6DstList[rand.Next(0, IPv6DstList.Count)];
                            SrcIP = IPv6SrcList[rand.Next(0, IPv6SrcList.Count)];
                        }
                        else
                        {
                            DstIP = IPv4DstList[rand.Next(0, IPv4DstList.Count)];
                            SrcIP = IPv4SrcList[rand.Next(0, IPv4SrcList.Count)];
                        }
                        break;

                    default:
                        if (IPv4SrcList.Count != 0 && IPv4DstList.Count != 0)
                        {
                            DstIP = IPv4DstList[rand.Next(0, IPv4DstList.Count)];
                            SrcIP = IPv4SrcList[rand.Next(0, IPv4SrcList.Count)];
                        }
                        else
                        {
                            DstIP = IPv6DstList[rand.Next(0, IPv6DstList.Count)];
                            SrcIP = IPv6SrcList[rand.Next(0, IPv6SrcList.Count)];
                        }
                        break;
                    }
                    var TXProtocolPacket = new ProtocolPacket {
                        PacketTimestamp = Timestamp, PacketTotal = PacketTotal, PacketMD5Sum = MD5Sum, PacketCount = PiecedMsg.Count, SrcIP = SrcIP.ToString(), DstIP = DstIP.ToString()
                    };
                    TXProtocolPacket.PiecedMsg = PiecedMsg.Pop();
                    var    udpPacket = new PacketDotNet.UdpPacket((ushort)rand.Next(1, 65536), (ushort)rand.Next(1, 65536));
                    long   nonceTime = (DateTimeOffset.Now.ToUnixTimeSeconds() / 300) * 300;
                    byte[] nonce     = sha256Ctx.ComputeHash(System.Text.Encoding.Default.GetBytes(nonceTime.ToString())).Take(8).ToArray();
                    var    NSecKey   = Key.Import(AeadAlgorithm.ChaCha20Poly1305, key, KeyBlobFormat.RawSymmetricKey);
                    var    NSecNonce = new Nonce(nonce, 4);
                    udpPacket.PayloadData = AeadAlgorithm.ChaCha20Poly1305.Encrypt(NSecKey, NSecNonce, null, Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(TXProtocolPacket)));
                    if (DstIP.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                    {
                        var ipv4Packet = new PacketDotNet.IPv4Packet(SrcIP, DstIP);
                        ipv4Packet.PayloadPacket = udpPacket;
                        udpPacket.UpdateCalculatedValues();
                        udpPacket.UpdateUDPChecksum();
                        ipv4Packet.UpdateCalculatedValues();
                        txBuffer.Add(new DivertPacket {
                            Addr = new WINDIVERT_ADDRESS {
                                Direction = 0
                            }, Data = ipv4Packet.Bytes
                        });
                    }
                    if (DstIP.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
                    {
                        var ipv6Packet = new PacketDotNet.IPv6Packet(SrcIP, DstIP);
                        ipv6Packet.NextHeader    = PacketDotNet.IPProtocolType.UDP;
                        ipv6Packet.PayloadPacket = udpPacket;
                        udpPacket.UpdateCalculatedValues();
                        udpPacket.UpdateUDPChecksum();
                        ipv6Packet.UpdateCalculatedValues();
                        txBuffer.Add(new DivertPacket {
                            Addr = new WINDIVERT_ADDRESS {
                                Direction = 0
                            }, Data = ipv6Packet.Bytes
                        });
                    }
                }
            }
        }
Exemplo n.º 2
0
        public static void GenerateDataGridViewRow(SharpPcap.CaptureEventArgs e)
        {
            PacketDotNet.Packet p;
            PacketDotNet.InternetLinkLayerPacket iLinkLayerPacket = null;
            String row_SourceAddress = "";
            String row_DestinationAddress = "";
            String row_Protocol = "";
            Int32 row_PacketLength = 0;
            DataGridViewCellStyle row_cellStyle = new DataGridViewCellStyle();
            String row_Time;

            // Compute the time of packet arrival
            TimeSpan timeInterval;
            timeInterval = (e.Packet.Timeval.Date.ToLocalTime() - CaptureStatistic.StartOfCapture);
            row_Time = timeInterval.Minutes.ToString() + ":" + timeInterval.Seconds.ToString() + "::" + timeInterval.Milliseconds.ToString();
            row_cellStyle.BackColor = Color.White;

            // Get PacketDotNet.Packet object
            p = PacketDotNet.Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);
            CaptureStatistic.NumberOfCapturedPackets++;

            switch (e.Packet.LinkLayerType)
            {
                case PacketDotNet.LinkLayers.Ethernet:
                    #region Parse Ethernet Packets
                    PacketDotNet.EthernetPacket etherPacket = PacketDotNet.EthernetPacket.GetEncapsulated(p);
                    iLinkLayerPacket = etherPacket;

                    // Get Some Ethernet Packet's fields
                    row_PacketLength = etherPacket.Bytes.Length;
                    switch (etherPacket.Type)
                    {
                        case PacketDotNet.EthernetPacketType.IpV4:
                            CaptureStatistic.CapturedIpV4++;
                            PacketDotNet.IPv4Packet ipv4Packet = (PacketDotNet.IPv4Packet)PacketDotNet.IPv4Packet.GetEncapsulated(etherPacket);
                            row_SourceAddress = ipv4Packet.SourceAddress.ToString();
                            row_DestinationAddress = ipv4Packet.DestinationAddress.ToString();
                            row_Protocol = "IPv4/" + ipv4Packet.Protocol.ToString();
                            switch (ipv4Packet.Protocol)
                            {
                                case PacketDotNet.IPProtocolType.TCP:
                                    CaptureStatistic.CapturedTcpV4++;
                                    row_cellStyle = ProtocolColor.TCP;
                                    break;
                                case PacketDotNet.IPProtocolType.UDP:
                                    CaptureStatistic.CapturedUdpV4++;
                                    row_cellStyle = ProtocolColor.UDP;
                                    break;
                                case PacketDotNet.IPProtocolType.GRE:
                                    CaptureStatistic.CapturedGre++;
                                    row_cellStyle = ProtocolColor.GRE;
                                    break;
                                case PacketDotNet.IPProtocolType.ICMP:
                                    CaptureStatistic.CapturedIcmpV4++;
                                    row_cellStyle = ProtocolColor.ICMP;
                                    break;
                                case PacketDotNet.IPProtocolType.IGMP:
                                    CaptureStatistic.CapturedIgmp++;
                                    row_cellStyle = ProtocolColor.IGMP;
                                    break;
                            }

                            break;

                        case PacketDotNet.EthernetPacketType.IpV6:
                            CaptureStatistic.CapturedIpV6++;
                            PacketDotNet.IPv6Packet ipv6Packet = (PacketDotNet.IPv6Packet)PacketDotNet.IPv6Packet.GetEncapsulated(etherPacket);
                            row_SourceAddress = ipv6Packet.SourceAddress.ToString();
                            row_DestinationAddress = ipv6Packet.DestinationAddress.ToString();
                            row_Protocol = "IPv6/" + ipv6Packet.NextHeader.ToString();
                            switch (ipv6Packet.NextHeader)
                            {
                                case PacketDotNet.IPProtocolType.GRE:
                                    CaptureStatistic.CapturedGre++;
                                    break;
                                case PacketDotNet.IPProtocolType.ICMP:
                                    CaptureStatistic.CapturedIcmpV4++;
                                    break;
                                case PacketDotNet.IPProtocolType.ICMPV6:
                                    CaptureStatistic.CapturedIcmpV6++;
                                    break;
                                case PacketDotNet.IPProtocolType.IGMP:
                                    CaptureStatistic.CapturedIgmp++;
                                    break;
                                case PacketDotNet.IPProtocolType.TCP:
                                    CaptureStatistic.CapturedTcpV6++;
                                    break;
                                case PacketDotNet.IPProtocolType.UDP:
                                    CaptureStatistic.CapturedUdpV6++;
                                    break;
                                default:
                                    break;
                            }
                            break;
                        case PacketDotNet.EthernetPacketType.Arp:
                            CaptureStatistic.CapturedArp++;
                            row_Protocol = "ARP";
                            row_SourceAddress = etherPacket.SourceHwAddress.ToString();
                            row_DestinationAddress = "Broadcast";
                            row_cellStyle = ProtocolColor.ARP;
                            break;

                        default:
                            row_Protocol = etherPacket.Type.ToString();
                            break;
                    }
                    #endregion
                    break;
            }

            // Add packet to the DataGridVeiw
            DataGridViewRow newRow = (DataGridViewRow)MainFormDataGridView.RowTemplate.Clone();

            newRow.CreateCells(MainFormDataGridView);
            newRow.Tag = iLinkLayerPacket;
            newRow.SetValues(CaptureStatistic.NumberOfCapturedPackets, row_Time, row_SourceAddress,
                row_DestinationAddress, row_Protocol, row_PacketLength);
            foreach (DataGridViewCell cell in newRow.Cells)
                cell.Style = row_cellStyle;

            MainFormDataGridView.Rows.Add(newRow);
        }
Exemplo n.º 3
0
        private void device_OnPacketArrival(object sender, CaptureEventArgs e)
        {
            var time = e.Packet.Timeval.Date;
            var len  = e.Packet.Data.Length;

            var pack = PacketDotNet.Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);

            if (pack is PacketDotNet.EthernetPacket)
            {
                PacketDotNet.EthernetPacket ethPack = pack as PacketDotNet.EthernetPacket;
                if (ethPack.PayloadPacket is PacketDotNet.IPv4Packet)
                {
                    PacketDotNet.IPv4Packet ipPack = ethPack.PayloadPacket as PacketDotNet.IPv4Packet;
                    //TCP
                    if (ipPack.PayloadPacket is PacketDotNet.TcpPacket)
                    {
                        PacketDotNet.TcpPacket tcpPack = ipPack.PayloadPacket as PacketDotNet.TcpPacket;
                        if ((ipPack.DestinationAddress.ToString().Equals("172.25.25.50") && tcpPack.DestinationPort == 8001) ||
                            (ipPack.SourceAddress.ToString().Equals("172.25.25.50") && tcpPack.SourcePort == 8001))
                        {
                            //Console.WriteLine("TCP:{0}:{1}-{2}:{3}",ipPack.SourceAddress, tcpPack.SourcePort,ipPack.DestinationAddress,tcpPack.DestinationPort);
                            if (tcpPack.PayloadData != null && tcpPack.PayloadData.Length > 0)
                            {
                                Console.WriteLine("读取数据:{0}", System.Text.Encoding.UTF8.GetString(tcpPack.PayloadData));
                            }
                        }
                    }
                    //UDP
                    else if (ipPack.PayloadPacket is PacketDotNet.UdpPacket)
                    {
                        PacketDotNet.UdpPacket udp = ipPack.PayloadPacket as PacketDotNet.UdpPacket;
                        if (ipPack.DestinationAddress.ToString().Equals("172.25.25.69") && udp.DestinationPort == 5060)
                        {
                            if (udp.PayloadData != null && udp.PayloadData.Length > 0)
                            {
                                Console.WriteLine("读取数据:{0}", System.Text.Encoding.UTF8.GetString(udp.PayloadData));
                            }
                        }
                        //if (ipPack.DestinationAddress.ToString().Equals("172.25.25.69") && udp.DestinationPort == 18038)
                        if (ipPack.DestinationAddress.ToString().Equals("172.25.25.66") && udp.DestinationPort == 18132)
                        {
                            if (udp.PayloadData != null && udp.PayloadData.Length > 100)
                            {
                                RtpPacket rtpPacket  = new RtpPacket(udp.PayloadData);
                                RtpHeader rtpHeader  = new RtpHeader(udp.PayloadData);
                                int       packetRate = RTPPayloadTypes.GetSamplingFrequency((RTPPayloadTypesEnum)Enum.ToObject(typeof(RTPPayloadTypesEnum), rtpHeader.PayloadType)); //8000

                                int minSec = ((int)rtpHeader.Timestamp - _preTimestamp - _prePacketLength) / (packetRate / 1000);
                                _preTimestamp    = (int)rtpHeader.Timestamp;
                                _prePacketLength = rtpPacket.Payload.Length;

                                //写文件
                                string fileName = "F:\\" + "testRtp9" + ".wav";
                                PCMU   m_PCMU   = new PCMU();
                                //语音包
                                using (System.IO.FileStream fs = new System.IO.FileStream(fileName,
                                                                                          System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write, System.IO.FileShare.None))
                                {
                                    byte[] temp = null; //空白语音
                                    byte[] dec  = null; //payload荷载数据
                                    byte[] data = null; //完整数据
                                    //空白
                                    if (minSec > 0)
                                    {
                                        //temp = new byte[16 * minSec];
                                        //dec = m_PCMU.Decode_pcm8(rtpPacket.Payload, 0, rtpPacket.Payload.Length);

                                        //data = new byte[temp.Length + dec.Length];
                                        //Array.Copy(temp, 0, data, 0, temp.Length);
                                        //Array.Copy(dec, 0, data, temp.Length, dec.Length);

                                        temp = new byte[8 * minSec];
                                        for (int i = 0; i < temp.Length; i++)
                                        {
                                            temp[i] = 0xFE;
                                        }
                                        dec = rtpPacket.Payload;

                                        data = new byte[temp.Length + dec.Length];

                                        Array.Copy(temp, 0, data, 0, temp.Length);
                                        Array.Copy(dec, 0, data, temp.Length, dec.Length);
                                        data = m_PCMU.Decode_ulaw_pcm8(data, 0, data.Length);
                                    }
                                    else
                                    {
                                        data = m_PCMU.Decode_ulaw_pcm8(rtpPacket.Payload, 0, rtpPacket.Payload.Length);
                                    }

                                    fs.Position = fs.Length;

                                    fs.Write(data, 0, data.Length);
                                }
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 4
0
        public static void GenerateTreeViewNode(PacketDotNet.InternetLinkLayerPacket p, Int32 NodesState)
        {
            PacketDotNet.EthernetPacket etherpacket;
            TreeNode linkLayerNode = new TreeNode();
            TreeNode networkLayerNdoe = new TreeNode();
            TreeNode transportLayerNode = new TreeNode();

            if (p is PacketDotNet.EthernetPacket)
            {
                etherpacket = (PacketDotNet.EthernetPacket)p;

                linkLayerNode.Text = "Ethernet Packet (Header Length = " + etherpacket.Bytes.Length.ToString() + " Bytes)";
                linkLayerNode.Nodes.Add("Source Address: " + FriendlyName.GetFriendlyMAC(etherpacket.SourceHwAddress));
                linkLayerNode.Nodes.Add("Destination Address: " + FriendlyName.GetFriendlyMAC(etherpacket.DestinationHwAddress));
                linkLayerNode.Nodes.Add("Payload Protocol: " + etherpacket.Type.ToString());

                //
                // Add Network Layer Node
                //
                switch (etherpacket.Type)
                {
                    case PacketDotNet.EthernetPacketType.IpV4:
                        #region IPv4
                        PacketDotNet.IPv4Packet ipv4Packet = (PacketDotNet.IPv4Packet)PacketDotNet.IPv4Packet.GetEncapsulated(etherpacket);
                        networkLayerNdoe.Text = "IPv4 Protocol";
                        networkLayerNdoe.Nodes.Add("Version: " + ipv4Packet.Version.ToString());
                        networkLayerNdoe.Nodes.Add("IHL (Header Length): " + ipv4Packet.HeaderLength.ToString());
                        networkLayerNdoe.Nodes.Add("Type Of Service: " + ipv4Packet.TypeOfService.ToString());
                        networkLayerNdoe.Nodes.Add("Total Length: " + ipv4Packet.TotalLength.ToString());
                        networkLayerNdoe.Nodes.Add("Identification: " + ipv4Packet.Id.ToString());
                        networkLayerNdoe.Nodes.Add("Fragment Flags: " + ipv4Packet.FragmentFlags.ToString());
                        networkLayerNdoe.Nodes.Add("Fragment Offset: " + ipv4Packet.FragmentOffset.ToString());
                        networkLayerNdoe.Nodes.Add("Time To Live: " + ipv4Packet.TimeToLive.ToString());
                        networkLayerNdoe.Nodes.Add("Protocol: " + ipv4Packet.Protocol.ToString());
                        networkLayerNdoe.Nodes.Add("Checksum: " + ipv4Packet.Checksum.ToString());
                        networkLayerNdoe.Nodes.Add("Source IP: " + ipv4Packet.SourceAddress.ToString());
                        networkLayerNdoe.Nodes.Add("Destination IP: " + ipv4Packet.DestinationAddress.ToString());
                        //networkLayerNdoe.Nodes.Add("Source IP: " + ipv4Packet.);

                        // Add Transport Layer Node
                        switch (ipv4Packet.Protocol)
                        {
                            case PacketDotNet.IPProtocolType.ICMP:
                                break;
                            case PacketDotNet.IPProtocolType.IGMP:
                                break;
                            case PacketDotNet.IPProtocolType.IPV6:
                                break;
                            case PacketDotNet.IPProtocolType.TCP:
                                PacketDotNet.TcpPacket tcpPacket;
                                tcpPacket = (PacketDotNet.TcpPacket)ipv4Packet.PayloadPacket;
                                transportLayerNode.Text = "TCP Datagram";
                                transportLayerNode.Nodes.Add("Source Port: " + tcpPacket.SourcePort.ToString());
                                transportLayerNode.Nodes.Add("Destination Port: " + tcpPacket.DestinationPort.ToString());
                                transportLayerNode.Nodes.Add("Sequence Number: " + tcpPacket.SequenceNumber.ToString());
                                transportLayerNode.Nodes.Add("Acknowledgment Number: " + tcpPacket.AcknowledgmentNumber.ToString());
                                transportLayerNode.Nodes.Add("DataOffset Number: " + tcpPacket.DataOffset.ToString());
                                transportLayerNode.Nodes.Add("URG: " + FriendlyName.BoolToNum(tcpPacket.Urg));
                                transportLayerNode.Nodes.Add("ACK: " + FriendlyName.BoolToNum(tcpPacket.Ack));
                                transportLayerNode.Nodes.Add("PSH: " + FriendlyName.BoolToNum(tcpPacket.Psh));
                                transportLayerNode.Nodes.Add("RST: " + FriendlyName.BoolToNum(tcpPacket.Rst));
                                transportLayerNode.Nodes.Add("SYN: " + FriendlyName.BoolToNum(tcpPacket.Syn));
                                transportLayerNode.Nodes.Add("FIN: " + FriendlyName.BoolToNum(tcpPacket.Fin));
                                transportLayerNode.Nodes.Add("Window Size: " + tcpPacket.WindowSize.ToString());
                                transportLayerNode.Nodes.Add("Checksum: " + tcpPacket.Checksum.ToString());
                                transportLayerNode.Nodes.Add("Urgent Pointer: " + tcpPacket.UrgentPointer.ToString());
                                transportLayerNode.Nodes.Add("Options: ");
                                transportLayerNode.Nodes.Add("(Payload Length: " + tcpPacket.PayloadData.Length.ToString() + ")");

                                break;
                            case PacketDotNet.IPProtocolType.UDP:
                                PacketDotNet.UdpPacket udpPacket;
                                udpPacket = (PacketDotNet.UdpPacket)ipv4Packet.PayloadPacket;
                                transportLayerNode.Text = "UDP Datagram";
                                transportLayerNode.Nodes.Add("Source Port: " + udpPacket.SourcePort.ToString());
                                transportLayerNode.Nodes.Add("Destination Port: " + udpPacket.DestinationPort.ToString());
                                transportLayerNode.Nodes.Add("Length: " + udpPacket.Length.ToString());
                                transportLayerNode.Nodes.Add("Checksum: " + udpPacket.Checksum.ToString());
                                transportLayerNode.Nodes.Add("(Payload Length: " + udpPacket.PayloadData.Length.ToString() + ")");
                                break;
                            default:
                                break;
                        }
                        #endregion
                        break;

                    case PacketDotNet.EthernetPacketType.IpV6:

                        break;
                    case PacketDotNet.EthernetPacketType.Arp:
                        PacketDotNet.ARPPacket arpPacket;
                        arpPacket = (PacketDotNet.ARPPacket)PacketDotNet.ARPPacket.GetEncapsulated(etherpacket);
                        networkLayerNdoe.Text = "ARP Packet";
                        networkLayerNdoe.Nodes.Add("Hardware Type: " + arpPacket.HardwareAddressType.ToString());
                        networkLayerNdoe.Nodes.Add("Protocol Type: " + arpPacket.ProtocolAddressType.ToString());
                        networkLayerNdoe.Nodes.Add("Hardware Address Length: " + arpPacket.HardwareAddressLength.ToString());
                        networkLayerNdoe.Nodes.Add("Protocol Address Length: " + arpPacket.ProtocolAddressLength.ToString());
                        networkLayerNdoe.Nodes.Add("Operation: " + arpPacket.Operation.ToString());
                        networkLayerNdoe.Nodes.Add("Sender Hardware Address: " + arpPacket.SenderHardwareAddress.ToString());
                        networkLayerNdoe.Nodes.Add("Sender Protocol Address: " + arpPacket.SenderProtocolAddress.ToString());
                        networkLayerNdoe.Nodes.Add("Target Hardware Address: " + arpPacket.TargetHardwareAddress.ToString());
                        networkLayerNdoe.Nodes.Add("Target Protocol Address: " + arpPacket.TargetProtocolAddress.ToString());

                        break;

                    default:
                        break;
                }

            }
            // Add Node to TreeView
            MainFormTreeView.Nodes.Clear();
            switch (NodesState)
            {
                case 1:
                    linkLayerNode.Expand();
                    networkLayerNdoe.Expand();
                    if (transportLayerNode.Nodes.Count > 0)
                        transportLayerNode.Expand();
                    break;
                case 2: // Default_first
                    linkLayerNode.Expand();
                    break;
                case 3: // Default_Second
                    networkLayerNdoe.Expand();
                    break;
                case 4: // Default_Third
                    if (transportLayerNode.Nodes.Count > 0)
                        transportLayerNode.Expand();
                    break;
            }
            MainFormTreeView.Nodes.Add(linkLayerNode);
            MainFormTreeView.Nodes.Add(networkLayerNdoe);
            if (transportLayerNode.Nodes.Count > 0)
                MainFormTreeView.Nodes.Add(transportLayerNode);
        }