示例#1
0
        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);
        }
示例#2
0
        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);
        }