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