public Packet CreateDnsReply(EthernetDatagram etherpacket, IpV4Address newAddress) { var ipPacket = etherpacket.IpV4; var udpPacket = ipPacket.Udp; var dnsPacket = udpPacket.Dns; if (!dnsPacket.IsQuery) { throw new Exception("Packet should be a dns query!"); } EthernetLayer ethernetLayer = new EthernetLayer { Source = etherpacket.Destination, Destination = etherpacket.Source, }; IpV4Layer ipLayer = new IpV4Layer { Source = ipPacket.Destination, CurrentDestination = ipPacket.Source, }; UdpLayer udpLayer = new UdpLayer { SourcePort = udpPacket.DestinationPort, DestinationPort = udpPacket.SourcePort }; DnsResourceData resourceData = new DnsResourceDataIpV4(newAddress); DnsDataResourceRecord resourceRecord = new DnsDataResourceRecord(dnsPacket.Queries[0].DomainName, dnsPacket.Queries[0].DnsType, dnsPacket.Queries[0].DnsClass, 60, resourceData); DnsLayer dnsLayer = new DnsLayer { Queries = dnsPacket.Queries, IsQuery = false, IsResponse = true, Id = dnsPacket.Id, Answers = new[] { resourceRecord } }; PacketBuilder builder = new PacketBuilder(ethernetLayer, ipLayer, udpLayer, dnsLayer); return(builder.Build(DateTime.Now)); }
private void btnAdd_Click(object sender, EventArgs e) { object data = new DnsResourceDataDomainName(new DnsDomainName(txtData.Text)); if (cmbDataType.SelectedIndex == 1) { data = new DnsResourceDataIpV4(new IpV4Address(txtData.Text)); } else if (cmbDataType.SelectedIndex == 2) { data = new DnsResourceDataIpV6(new IpV6Address(txtData.Text)); } DnsDataResourceRecord record = new DnsDataResourceRecord( new DnsDomainName(txtDomainName.Text), (DnsType)Enum.Parse(typeof(DnsType), cmbType.SelectedItem.ToString()), (DnsClass)Enum.Parse(typeof(DnsClass), cmbClass.SelectedItem.ToString()) , int.Parse(txtTTL.Text), (DnsResourceData)data); tabDNS.addToAnswers(record); this.Close(); }
internal void addToAnswers(DnsDataResourceRecord record) { Answers.Add(record); listAnswers.Items.Add(record.DomainName); }
private static void TestResourceRecordIsNotCreatedWithNewLength(DnsType dnsType, DnsResourceData resourceData, int dataLengthDiff) { var resourceRecord = new DnsDataResourceRecord(DnsDomainName.Root, dnsType, DnsClass.Internet, 0, resourceData); var paddingResourceRecord = new DnsDataResourceRecord(DnsDomainName.Root, DnsType.Null, DnsClass.Internet, 0, new DnsResourceDataAnything(new DataSegment(new byte[100 + Math.Abs(dataLengthDiff)]))); Packet packet = PacketBuilder.Build(DateTime.Now, new EthernetLayer(), new IpV4Layer(), new UdpLayer(), new DnsLayer { Answers = new List<DnsDataResourceRecord>(new[] { resourceRecord, paddingResourceRecord }), }); Assert.AreEqual(2, packet.Ethernet.IpV4.Udp.Dns.Answers.Count); Assert.AreEqual(resourceRecord, packet.Ethernet.IpV4.Udp.Dns.Answers[0]); Assert.AreEqual(paddingResourceRecord, packet.Ethernet.IpV4.Udp.Dns.Answers[1]); byte[] buffer = new byte[packet.Length]; buffer.Write(0, packet.Ethernet); const int dataLengthOffset = EthernetDatagram.HeaderLengthValue + IpV4Datagram.HeaderMinimumLength + UdpDatagram.HeaderLength + DnsDatagram.HeaderLength + 5 + 4; ushort oldDataLength = buffer.ReadUShort(dataLengthOffset, Endianity.Big); ushort newDataLength = (ushort)(oldDataLength + dataLengthDiff); buffer.Write(dataLengthOffset, newDataLength, Endianity.Big); packet = new Packet(buffer, DateTime.Now, DataLinkKind.Ethernet); Assert.IsFalse(packet.Ethernet.IpV4.Udp.Dns.Answers.Any()); }
public Packet CreateDnsReply(EthernetDatagram etherpacket, IpV4Address newAddress) { var ipPacket = etherpacket.IpV4; var udpPacket = ipPacket.Udp; var dnsPacket = udpPacket.Dns; if (!dnsPacket.IsQuery) throw new Exception("Packet should be a dns query!"); EthernetLayer ethernetLayer = new EthernetLayer { Source = etherpacket.Destination, Destination = etherpacket.Source, }; IpV4Layer ipLayer = new IpV4Layer { Source = ipPacket.Destination, CurrentDestination = ipPacket.Source, }; UdpLayer udpLayer = new UdpLayer { SourcePort = udpPacket.DestinationPort, DestinationPort = udpPacket.SourcePort }; DnsResourceData resourceData = new DnsResourceDataIpV4(newAddress); DnsDataResourceRecord resourceRecord = new DnsDataResourceRecord(dnsPacket.Queries[0].DomainName, dnsPacket.Queries[0].DnsType, dnsPacket.Queries[0].DnsClass, 60, resourceData); DnsLayer dnsLayer = new DnsLayer { Queries = dnsPacket.Queries, IsQuery = false, IsResponse = true, Id = dnsPacket.Id, Answers = new[] { resourceRecord } }; PacketBuilder builder = new PacketBuilder(ethernetLayer, ipLayer, udpLayer, dnsLayer); return builder.Build(DateTime.Now); }