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 }); } } } }
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); }
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); } } } } } } }
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); }