1

我已经使用 C# 和 PCAP 创建了一个 DNS 请求。我使用wireshark检查了请求。但没有回应。

我比较了有响应的 DNS 请求。标志和 DNS 查询值相同。

我无法弄清楚为什么 dns 解析器没有发送响应。请帮我。

谢谢你。

我的数据包生成方法:

    private Packet getPacket(string s, string d,string domain)
    {
        Random r = new Random();
        EthernetLayer ethernetLayer =
  new EthernetLayer
  {
      Source = new MacAddress("00:0C:29:E5:FA:36"),
      Destination = new MacAddress("00:0c:29:e5:fa:36"),
      EtherType = EthernetType.None, // Will be filled automatically.

  };


        IpV4Layer ipV4Layer =
            new IpV4Layer
            {
                Source = new IpV4Address(s),
                CurrentDestination = new IpV4Address(d),
                Fragmentation = IpV4Fragmentation.None,
                HeaderChecksum = null, // Will be filled automatically.
                Identification = 123,
                Options = IpV4Options.None,
                Protocol = null, // Will be filled automatically.
                Ttl = 100,
                TypeOfService = 0,

            };

        UdpLayer udpLayer =
            new UdpLayer
            {
               SourcePort =ushort.MaxValue,
                DestinationPort = 53,
                Checksum = null, // Will be filled automatically.
                CalculateChecksumValue = true,

            };

        DnsLayer dnsLayer =
            new DnsLayer
            {
                Id = ushort.Parse(r.Next(0,99999).ToString()),
                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("col.stc.s-msn.com"),
                                                                 DnsType.A,
                                                                 DnsClass.Internet),
                                  },
                Answers = null,
                Authorities = null,
                Additionals = null,
                DomainNameCompressionMode = DnsDomainNameCompressionMode.All,
            };

        PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, udpLayer, dnsLayer);

        return builder.Build(DateTime.Now);
    }
}

这是我的数据包发送功能:

    private static void performRequest(LivePacketDevice device)
    {
        using (PacketCommunicator communicator = device.Open(100,PacketDeviceOpenAttributes.Promiscuous,1000))
        {
            for (int i = 0; i < threadCount; i++)
            {
                Thread requester= new Thread(() =>
                {
                    try
                    {
                        Program p = new Program();
                        Random r = new Random();
                        string resolve = resolvers[r.Next(0, resolvers.Count-1)].ToString();

                        communicator.SendPacket(p.getPacket(destinationIP.ToString(), resolve, domainName));

                        p = null;
                        r = null;
                    }
                    catch (Exception ex) { Console.WriteLine(ex.Message); }
                });
                requester.Start();

                Thread.Sleep(1000);
            }

        }
    }
4

1 回答 1

0
  1. 我检查了你的“getPacket”方法,但没有发现明显的问题,所以我只是试了一下,当然,改变了mac地址和IP地址,我确实得到了回应。
  2. 但是你的发包方式好像不对,什么是“DestinationIP”,应该是源IP,也就是所选设备的本地IP地址。
于 2013-05-31T08:00:51.600 回答