2013-05-29 35 views
1

我已經使用C#和PCAP創建了一個DNS請求。我使用wireshark檢查了請求。但沒有迴應。PCAP.net RAW DNS查詢沒有給出任何迴應

我比較了具有響應的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); 
      } 

     } 
    } 

回答

0
  1. 我檢查你的「getPacket」的方法,但沒有發現明顯的問題,所以我只是想當然,它改變了mac地址和IP地址,我確實得到了迴應。
  2. 但是你的數據包發送方法似乎是錯誤的,什麼是「DestinationIP」,它應該源IP,換句話說,所選設備的本地IP地址。
+0

你可以給我你的程序來檢查 – user851157