private void SendRecordRequest(string host, DnsType type) { DnsLayer dnsLayer = new DnsLayer { Id = 100, IsResponse = false, OpCode = DnsOpCode.Query, IsAuthoritativeAnswer = false, IsTruncated = false, IsRecursionDesired = true, IsRecursionAvailable = false, FutureUse = false, IsAuthenticData = false, IsCheckingDisabled = false, ResponseCode = DnsResponseCode.NoError, Queries = new[] { new DnsQueryResourceRecord(new DnsDomainName(host), type, DnsClass.Internet), }, Answers = null, Authorities = null, Additionals = null, DomainNameCompressionMode = DnsDomainNameCompressionMode.All, }; ushort port = (ushort)(4050 + _random.Next(0, 1000)); string hashVal = host.ToLower() + ":" + port; PendingRequests.Add(hashVal); OSI.Layer4UdpPacket udp = new OSI.Layer4UdpPacket(); udp.Destination = _client.Configuration.DnsServers[0].AsString; udp.LocalPort = port; udp.RemotePort = 53; udp.NextLayers.Add(dnsLayer); SendPacket(udp); }
private void SendUdpPacket(OSI.Layer4UdpPacket packet, PacketSentHandler callback) { UdpLayer udpLayer = new UdpLayer { SourcePort = packet.LocalPort, DestinationPort = packet.RemotePort, Checksum = null, // Will be filled automatically. CalculateChecksumValue = true, }; OSI.Layer3Packet l3 = new OSI.Layer3Packet(); l3.Ttl = 255; l3.SourceIP = Configuration.IpAddress; l3.Destination = packet.Destination; foreach (ILayer layer in packet.NextLayers) { l3.NextLayers.Add(layer); } l3.NextLayers.Insert(0, udpLayer); SendLayer3Packet(l3, callback); }