Commit 6703c3cd authored by Brickner_cp's avatar Brickner_cp

DNS

parent 82914442
...@@ -554,6 +554,11 @@ namespace PcapDotNet.Base ...@@ -554,6 +554,11 @@ namespace PcapDotNet.Base
return ((long)this).ToString(CultureInfo.InvariantCulture); return ((long)this).ToString(CultureInfo.InvariantCulture);
} }
public string ToString(string format)
{
return ((long)this).ToString(format);
}
private UInt48(long value) private UInt48(long value)
{ {
_mostSignificant = (ushort)(value >> 32); _mostSignificant = (ushort)(value >> 32);
......
...@@ -77,6 +77,7 @@ ...@@ -77,6 +77,7 @@
<Compile Include="MoreTcpOption.cs" /> <Compile Include="MoreTcpOption.cs" />
<Compile Include="WiresharkDatagramComparer.cs" /> <Compile Include="WiresharkDatagramComparer.cs" />
<Compile Include="WiresharkDatagramComparerArp.cs" /> <Compile Include="WiresharkDatagramComparerArp.cs" />
<Compile Include="WiresharkDatagramComparerDns.cs" />
<Compile Include="WiresharkDatagramComparerEthernet.cs" /> <Compile Include="WiresharkDatagramComparerEthernet.cs" />
<Compile Include="WiresharkDatagramComparerGre.cs" /> <Compile Include="WiresharkDatagramComparerGre.cs" />
<Compile Include="WiresharkDatagramComparerHttp.cs" /> <Compile Include="WiresharkDatagramComparerHttp.cs" />
......
...@@ -7,6 +7,7 @@ using System.Linq; ...@@ -7,6 +7,7 @@ using System.Linq;
using System.Xml.Linq; using System.Xml.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.VisualStudio.TestTools.UnitTesting;
using PcapDotNet.Packets; using PcapDotNet.Packets;
using PcapDotNet.Packets.Dns;
using PcapDotNet.Packets.Ethernet; using PcapDotNet.Packets.Ethernet;
using PcapDotNet.Packets.Gre; using PcapDotNet.Packets.Gre;
using PcapDotNet.Packets.Http; using PcapDotNet.Packets.Http;
...@@ -30,7 +31,7 @@ namespace PcapDotNet.Core.Test ...@@ -30,7 +31,7 @@ namespace PcapDotNet.Core.Test
private const bool IsRetry private const bool IsRetry
// = true; // = true;
= false; = false;
private const byte RetryNumber = 190; private const byte RetryNumber = 27;
/// <summary> /// <summary>
/// Gets or sets the test context which provides /// Gets or sets the test context which provides
...@@ -135,21 +136,33 @@ namespace PcapDotNet.Core.Test ...@@ -135,21 +136,33 @@ namespace PcapDotNet.Core.Test
Gre, Gre,
Udp, Udp,
Tcp, Tcp,
Dns,
Http, Http,
} }
private static Packet CreateRandomPacket(Random random) private static Packet CreateRandomPacket(Random random)
{ {
PacketType packetType = random.NextEnum<PacketType>();
// BUG: Limited timestamp due to Windows bug: https://connect.microsoft.com/VisualStudio/feedback/details/559198/net-4-datetime-tolocaltime-is-sometimes-wrong // BUG: Limited timestamp due to Windows bug: https://connect.microsoft.com/VisualStudio/feedback/details/559198/net-4-datetime-tolocaltime-is-sometimes-wrong
Packet packet;
do
{
packet = CreateRandomPacket(random, packetType);
} while (packet.Length > 65536);
return packet;
}
private static Packet CreateRandomPacket(Random random, PacketType packetType)
{
DateTime packetTimestamp = DateTime packetTimestamp =
random.NextDateTime(new DateTime(2010,1,1), new DateTime(2010,12,31)).ToUniversalTime().ToLocalTime(); random.NextDateTime(new DateTime(2010,1,1), new DateTime(2010,12,31)).ToUniversalTime().ToLocalTime();
//random.NextDateTime(PacketTimestamp.MinimumPacketTimestamp, PacketTimestamp.MaximumPacketTimestamp).ToUniversalTime().ToLocalTime(); //random.NextDateTime(PacketTimestamp.MinimumPacketTimestamp, PacketTimestamp.MaximumPacketTimestamp).ToUniversalTime().ToLocalTime();
EthernetLayer ethernetLayer = random.NextEthernetLayer(); EthernetLayer ethernetLayer = random.NextEthernetLayer();
IpV4Layer ipV4Layer = random.NextIpV4Layer(); IpV4Layer ipV4Layer = random.NextIpV4Layer();
PayloadLayer payloadLayer = random.NextPayloadLayer(random.Next(100)); PayloadLayer payloadLayer = random.NextPayloadLayer(random.Next(100));
switch (random.NextEnum<PacketType>()) switch (packetType)
// switch (PacketType.Icmp) // switch (PacketType.Icmp)
{ {
case PacketType.Ethernet: case PacketType.Ethernet:
...@@ -201,6 +214,21 @@ namespace PcapDotNet.Core.Test ...@@ -201,6 +214,21 @@ namespace PcapDotNet.Core.Test
ipV4Layer.Fragmentation = IpV4Fragmentation.None; ipV4Layer.Fragmentation = IpV4Fragmentation.None;
return PacketBuilder.Build(packetTimestamp, ethernetLayer, ipV4Layer, random.NextTcpLayer(), payloadLayer); return PacketBuilder.Build(packetTimestamp, ethernetLayer, ipV4Layer, random.NextTcpLayer(), payloadLayer);
case PacketType.Dns:
ethernetLayer.EtherType = EthernetType.None;
ipV4Layer.Protocol = null;
if (random.NextBool())
ipV4Layer.Fragmentation = IpV4Fragmentation.None;
UdpLayer udpLayer = random.NextUdpLayer();
DnsLayer dnsLayer = random.NextDnsLayer();
if (dnsLayer.IsQuery)
udpLayer.DestinationPort = 53;
else
udpLayer.SourcePort = 53;
return PacketBuilder.Build(packetTimestamp, ethernetLayer, ipV4Layer, udpLayer, dnsLayer);
case PacketType.Http: case PacketType.Http:
ethernetLayer.EtherType = EthernetType.None; ethernetLayer.EtherType = EthernetType.None;
ipV4Layer.Protocol = null; ipV4Layer.Protocol = null;
...@@ -223,7 +251,10 @@ namespace PcapDotNet.Core.Test ...@@ -223,7 +251,10 @@ namespace PcapDotNet.Core.Test
private static IEnumerable<Packet> CreateRandomPackets(Random random, int numPackets) private static IEnumerable<Packet> CreateRandomPackets(Random random, int numPackets)
{ {
for (int i = 0; i != numPackets; ++i) for (int i = 0; i != numPackets; ++i)
yield return CreateRandomPacket(random); {
Packet packet = CreateRandomPacket(random);
yield return packet;
}
} }
private static void ComparePacketsToWireshark(params Packet[] packets) private static void ComparePacketsToWireshark(params Packet[] packets)
......
...@@ -67,6 +67,9 @@ namespace PcapDotNet.Core.Test ...@@ -67,6 +67,9 @@ namespace PcapDotNet.Core.Test
case "tcp": case "tcp":
return new WiresharkDatagramComparerTcp(); return new WiresharkDatagramComparerTcp();
case "dns":
return new WiresharkDatagramComparerDns();
case "http": case "http":
return new WiresharkDatagramComparerHttp(); return new WiresharkDatagramComparerHttp();
......
...@@ -5,39 +5,41 @@ namespace PcapDotNet.Core.Test ...@@ -5,39 +5,41 @@ namespace PcapDotNet.Core.Test
{ {
public static class WiresharkStringExtensions public static class WiresharkStringExtensions
{ {
public static string ToWiresharkLiteral(this string value) public static string ToWiresharkLiteral(this string value, bool putLeadingZerosInHexAndBackslashesBeforeSpecialCharacters = true)
{ {
StringBuilder result = new StringBuilder(); StringBuilder result = new StringBuilder();
for (int i = 0; i != value.Length; ++i) for (int i = 0; i != value.Length; ++i)
{ {
char currentChar = value[i]; char currentChar = value[i];
switch (currentChar) if (currentChar == '\0')
return result.ToString();
if (putLeadingZerosInHexAndBackslashesBeforeSpecialCharacters)
{ {
case '\\': switch (currentChar)
case '"': {
result.Append('\\'); case '\\':
result.Append(currentChar); case '"':
break; result.Append('\\');
result.Append(currentChar);
case '\r': continue;
result.Append(@"\r");
break; case '\r':
result.Append(@"\r");
case '\n': continue;
result.Append(@"\n");
break; case '\n':
result.Append(@"\n");
default: continue;
if (currentChar >= 0x7F || currentChar < 0x20) }
{ }
result.Append(@"\x");
result.Append(((int)currentChar).ToString("x2")); if (currentChar >= 0x7F || currentChar < 0x20)
break; {
} result.Append(@"\x");
result.Append(((int)currentChar).ToString("x" + (putLeadingZerosInHexAndBackslashesBeforeSpecialCharacters ? "2" : "")));
result.Append(currentChar);
break;
} }
else
result.Append(currentChar);
} }
return result.ToString(); return result.ToString();
......
...@@ -24,7 +24,7 @@ namespace PcapDotNet.Core.Test ...@@ -24,7 +24,7 @@ namespace PcapDotNet.Core.Test
{ {
XAttribute attribute = element.Attribute(attributeName); XAttribute attribute = element.Attribute(attributeName);
if (attribute == null) if (attribute == null)
throw new ArgumentException("element " + element.Name + " doesn't contain attribute " + attributeName, "attributeName"); return string.Empty;
return attribute.Value; return attribute.Value;
} }
...@@ -168,5 +168,15 @@ namespace PcapDotNet.Core.Test ...@@ -168,5 +168,15 @@ namespace PcapDotNet.Core.Test
{ {
element.AssertValue(expectedValue.ToString("x8")); element.AssertValue(expectedValue.ToString("x8"));
} }
public static void AssertValue(this XElement element, UInt48 expectedValue)
{
element.AssertValue(expectedValue.ToString("x12"));
}
public static void AssertValue(this XElement element, SerialNumber32 expectedValue)
{
element.AssertValue(expectedValue.Value);
}
} }
} }
\ No newline at end of file
...@@ -95,31 +95,31 @@ namespace PcapDotNet.Packets.Test ...@@ -95,31 +95,31 @@ namespace PcapDotNet.Packets.Test
dnsLayer.Additionals = new List<DnsDataResourceRecord>(); dnsLayer.Additionals = new List<DnsDataResourceRecord>();
TestDomainNameCompression(0, dnsLayer); TestDomainNameCompression(0, dnsLayer);
dnsLayer.Queries.Add(new DnsQueryResourceRecord(new DnsDomainName(""), DnsType.All, DnsClass.In)); dnsLayer.Queries.Add(new DnsQueryResourceRecord(new DnsDomainName(""), DnsType.Any, DnsClass.In));
TestDomainNameCompression(0, dnsLayer); TestDomainNameCompression(0, dnsLayer);
dnsLayer.Answers.Add(new DnsDataResourceRecord(new DnsDomainName(""), DnsType.All, DnsClass.In, 100, new DnsResourceDataAnything(DataSegment.Empty))); dnsLayer.Answers.Add(new DnsDataResourceRecord(new DnsDomainName(""), DnsType.Any, DnsClass.In, 100, new DnsResourceDataAnything(DataSegment.Empty)));
TestDomainNameCompression(0, dnsLayer); TestDomainNameCompression(0, dnsLayer);
dnsLayer.Answers.Add(new DnsDataResourceRecord(new DnsDomainName("abc"), DnsType.All, DnsClass.In, 100, new DnsResourceDataAnything(DataSegment.Empty))); dnsLayer.Answers.Add(new DnsDataResourceRecord(new DnsDomainName("abc"), DnsType.Any, DnsClass.In, 100, new DnsResourceDataAnything(DataSegment.Empty)));
TestDomainNameCompression(0, dnsLayer); TestDomainNameCompression(0, dnsLayer);
dnsLayer.Answers.Add(new DnsDataResourceRecord(new DnsDomainName("abc"), DnsType.All, DnsClass.In, 100, new DnsResourceDataAnything(DataSegment.Empty))); dnsLayer.Answers.Add(new DnsDataResourceRecord(new DnsDomainName("abc"), DnsType.Any, DnsClass.In, 100, new DnsResourceDataAnything(DataSegment.Empty)));
TestDomainNameCompression(3, dnsLayer); TestDomainNameCompression(3, dnsLayer);
dnsLayer.Answers.Add(new DnsDataResourceRecord(new DnsDomainName("def.abc"), DnsType.All, DnsClass.In, 100, new DnsResourceDataAnything(DataSegment.Empty))); dnsLayer.Answers.Add(new DnsDataResourceRecord(new DnsDomainName("def.abc"), DnsType.Any, DnsClass.In, 100, new DnsResourceDataAnything(DataSegment.Empty)));
TestDomainNameCompression(6, dnsLayer); TestDomainNameCompression(6, dnsLayer);
dnsLayer.Answers.Add(new DnsDataResourceRecord(new DnsDomainName("abc.def"), DnsType.All, DnsClass.In, 100, new DnsResourceDataAnything(DataSegment.Empty))); dnsLayer.Answers.Add(new DnsDataResourceRecord(new DnsDomainName("abc.def"), DnsType.Any, DnsClass.In, 100, new DnsResourceDataAnything(DataSegment.Empty)));
TestDomainNameCompression(6, dnsLayer); TestDomainNameCompression(6, dnsLayer);
dnsLayer.Authorities.Add(new DnsDataResourceRecord(new DnsDomainName("abc.def"), DnsType.All, DnsClass.In, 100, new DnsResourceDataAnything(DataSegment.Empty))); dnsLayer.Authorities.Add(new DnsDataResourceRecord(new DnsDomainName("abc.def"), DnsType.Any, DnsClass.In, 100, new DnsResourceDataAnything(DataSegment.Empty)));
TestDomainNameCompression(13, dnsLayer); TestDomainNameCompression(13, dnsLayer);
dnsLayer.Authorities.Add(new DnsDataResourceRecord(new DnsDomainName("abd.def"), DnsType.All, DnsClass.In, 100, new DnsResourceDataAnything(DataSegment.Empty))); dnsLayer.Authorities.Add(new DnsDataResourceRecord(new DnsDomainName("abd.def"), DnsType.Any, DnsClass.In, 100, new DnsResourceDataAnything(DataSegment.Empty)));
TestDomainNameCompression(16, dnsLayer); TestDomainNameCompression(16, dnsLayer);
dnsLayer.Additionals.Add(new DnsDataResourceRecord(new DnsDomainName("hello.abd.def"), DnsType.All, DnsClass.In, 100, new DnsResourceDataAnything(DataSegment.Empty))); dnsLayer.Additionals.Add(new DnsDataResourceRecord(new DnsDomainName("hello.abd.def"), DnsType.Any, DnsClass.In, 100, new DnsResourceDataAnything(DataSegment.Empty)));
TestDomainNameCompression(23, dnsLayer); TestDomainNameCompression(23, dnsLayer);
} }
......
...@@ -14,6 +14,8 @@ namespace PcapDotNet.Packets.TestUtils ...@@ -14,6 +14,8 @@ namespace PcapDotNet.Packets.TestUtils
{ {
public static DnsLayer NextDnsLayer(this Random random) public static DnsLayer NextDnsLayer(this Random random)
{ {
const int MaxRecordsPerSection = 5;
DnsLayer dnsLayer = new DnsLayer(); DnsLayer dnsLayer = new DnsLayer();
dnsLayer.Id = random.NextUShort(); dnsLayer.Id = random.NextUShort();
dnsLayer.IsQuery = random.NextBool(); dnsLayer.IsQuery = random.NextBool();
...@@ -22,25 +24,26 @@ namespace PcapDotNet.Packets.TestUtils ...@@ -22,25 +24,26 @@ namespace PcapDotNet.Packets.TestUtils
dnsLayer.IsTruncated = random.NextBool(); dnsLayer.IsTruncated = random.NextBool();
dnsLayer.IsRecusionDesired = random.NextBool(); dnsLayer.IsRecusionDesired = random.NextBool();
dnsLayer.IsRecusionAvailable = random.NextBool(); dnsLayer.IsRecusionAvailable = random.NextBool();
dnsLayer.FutureUse = random.NextByte(DnsDatagram.MaxFutureUse + 1); dnsLayer.FutureUse = random.NextBool();
dnsLayer.ResponseCode = random.NextEnum<DnsResponseCode>(); dnsLayer.ResponseCode = random.NextEnum(DnsResponseCode.BadVersOrBadSig, DnsResponseCode.BadKey, DnsResponseCode.BadTime, DnsResponseCode.BadMode,
DnsResponseCode.BadName, DnsResponseCode.BadAlg, DnsResponseCode.BadTrunc);
dnsLayer.DomainNameCompressionMode = random.NextEnum<DnsDomainNameCompressionMode>(); dnsLayer.DomainNameCompressionMode = random.NextEnum<DnsDomainNameCompressionMode>();
int numQueries = random.Next(10); int numQueries = random.Next(MaxRecordsPerSection + 1);
List<DnsQueryResourceRecord> queries = new List<DnsQueryResourceRecord>(); List<DnsQueryResourceRecord> queries = new List<DnsQueryResourceRecord>();
for (int i = 0; i != numQueries; ++i) for (int i = 0; i != numQueries; ++i)
queries.Add(random.NextDnsQueryResourceRecord()); queries.Add(random.NextDnsQueryResourceRecord());
dnsLayer.Queries = queries; dnsLayer.Queries = queries;
int numAnswers = random.Next(10); int numAnswers = random.Next(MaxRecordsPerSection + 1);
List<DnsDataResourceRecord> answers = new List<DnsDataResourceRecord>(); List<DnsDataResourceRecord> answers = new List<DnsDataResourceRecord>();
for (int i = 0; i != numAnswers; ++i) for (int i = 0; i != numAnswers; ++i)
answers.Add(random.NextDnsDataResourceRecord()); answers.Add(random.NextDnsDataResourceRecord());
dnsLayer.Answers = answers; dnsLayer.Answers = answers;
int numAuthorities = random.Next(10); int numAuthorities = random.Next(MaxRecordsPerSection + 1);
List<DnsDataResourceRecord> authorities = new List<DnsDataResourceRecord>(); List<DnsDataResourceRecord> authorities = new List<DnsDataResourceRecord>();
for (int i = 0; i != numAuthorities; ++i) for (int i = 0; i != numAuthorities; ++i)
authorities.Add(random.NextDnsDataResourceRecord()); authorities.Add(random.NextDnsDataResourceRecord());
dnsLayer.Authorities = authorities; dnsLayer.Authorities = authorities;
int numAdditionals = random.Next(10); int numAdditionals = random.Next(MaxRecordsPerSection + 1);
List<DnsDataResourceRecord> additionals = new List<DnsDataResourceRecord>(); List<DnsDataResourceRecord> additionals = new List<DnsDataResourceRecord>();
for (int i = 0; i != numAdditionals; ++i) for (int i = 0; i != numAdditionals; ++i)
additionals.Add(random.NextDnsDataResourceRecord()); additionals.Add(random.NextDnsDataResourceRecord());
...@@ -179,7 +182,8 @@ namespace PcapDotNet.Packets.TestUtils ...@@ -179,7 +182,8 @@ namespace PcapDotNet.Packets.TestUtils
random.NextDataSegment(random.Next(100))); random.NextDataSegment(random.Next(100)));
case DnsType.Key: case DnsType.Key:
return new DnsResourceDataKey(random.NextBool(), random.NextBool(), random.NextEnum<DnsKeyNameType>(), random.NextFlags<DnsKeySignatory>(), return new DnsResourceDataKey(random.NextBool(), random.NextBool(), random.NextBool(), random.NextBool(), random.NextBool(),
random.NextBool(), random.NextEnum<DnsKeyNameType>(), random.NextFlags<DnsKeySignatory>(),
random.NextEnum<DnsKeyProtocol>(), random.NextEnum<DnsAlgorithm>(), random.NextEnum<DnsKeyProtocol>(), random.NextEnum<DnsAlgorithm>(),
random.NextBool() ? (ushort?)random.NextUShort() : null, random.NextDataSegment(random.Next(100))); random.NextBool() ? (ushort?)random.NextUShort() : null, random.NextDataSegment(random.Next(100)));
...@@ -275,7 +279,8 @@ namespace PcapDotNet.Packets.TestUtils ...@@ -275,7 +279,8 @@ namespace PcapDotNet.Packets.TestUtils
return new DnsResourceDataNextDomainSecure(random.NextDnsDomainName(), random.NextDnsTypeArray(random.Next(100))); return new DnsResourceDataNextDomainSecure(random.NextDnsDomainName(), random.NextDnsTypeArray(random.Next(100)));
case DnsType.DnsKey: case DnsType.DnsKey:
return new DnsResourceDataDnsKey(random.NextBool(), random.NextBool(), random.NextByte(), random.NextEnum<DnsAlgorithm>(), random.NextDataSegment(random.Next(100))); return new DnsResourceDataDnsKey(random.NextBool(), random.NextBool(), random.NextBool(), random.NextByte(), random.NextEnum<DnsAlgorithm>(),
random.NextDataSegment(random.Next(100)));
case DnsType.NSec3: case DnsType.NSec3:
return new DnsResourceDataNextDomainSecure3(random.NextEnum<DnsSecNSec3HashAlgorithm>(), random.NextFlags<DnsSecNSec3Flags>(), return new DnsResourceDataNextDomainSecure3(random.NextEnum<DnsSecNSec3HashAlgorithm>(), random.NextFlags<DnsSecNSec3Flags>(),
......
...@@ -57,6 +57,11 @@ namespace PcapDotNet.Packets ...@@ -57,6 +57,11 @@ namespace PcapDotNet.Packets
public byte Last { get { return this[Length - 1]; } } public byte Last { get { return this[Length - 1]; } }
public DataSegment SubSegment(int offset, int length)
{
return SubSegment(ref offset, length);
}
/// <summary> /// <summary>
/// Returns the Segment's bytes as a read only MemoryStream with a non-public buffer. /// Returns the Segment's bytes as a read only MemoryStream with a non-public buffer.
/// </summary> /// </summary>
...@@ -177,11 +182,6 @@ namespace PcapDotNet.Packets ...@@ -177,11 +182,6 @@ namespace PcapDotNet.Packets
return subSegemnt; return subSegemnt;
} }
internal DataSegment SubSegment(int offset, int length)
{
return SubSegment(ref offset, length);
}
internal bool ReadBool(int offset, byte mask) internal bool ReadBool(int offset, byte mask)
{ {
return (this[offset] & mask) == mask; return (this[offset] & mask) == mask;
......
...@@ -33,6 +33,11 @@ namespace PcapDotNet.Packets.Dns ...@@ -33,6 +33,11 @@ namespace PcapDotNet.Packets.Dns
} }
} }
public bool IsRoot
{
get { return NumLabels == 0; }
}
public int NonCompressedLength public int NonCompressedLength
{ {
get get
...@@ -43,9 +48,9 @@ namespace PcapDotNet.Packets.Dns ...@@ -43,9 +48,9 @@ namespace PcapDotNet.Packets.Dns
public override string ToString() public override string ToString()
{ {
if (_ascii == null) if (_utf8 == null)
_ascii = _labels.Select(label => label.ToString(Encoding.UTF8)).SequenceToString('.') + "."; _utf8 = _labels.Select(label => label.ToString(Encoding.UTF8)).SequenceToString('.') + ".";
return _ascii; return _utf8;
} }
public bool Equals(DnsDomainName other) public bool Equals(DnsDomainName other)
...@@ -160,6 +165,6 @@ namespace PcapDotNet.Packets.Dns ...@@ -160,6 +165,6 @@ namespace PcapDotNet.Packets.Dns
private static readonly DnsDomainName _root = new DnsDomainName(""); private static readonly DnsDomainName _root = new DnsDomainName("");
private readonly List<DataSegment> _labels; private readonly List<DataSegment> _labels;
private string _ascii; private string _utf8;
} }
} }
\ No newline at end of file
...@@ -30,8 +30,12 @@ namespace PcapDotNet.Packets.Dns ...@@ -30,8 +30,12 @@ namespace PcapDotNet.Packets.Dns
public bool IsRecusionAvailable { get; set;} public bool IsRecusionAvailable { get; set;}
public byte FutureUse { get; set; } public bool FutureUse { get; set; }
public bool IsAuthenticData { get; set; }
public bool IsCheckingDisabled { get; set; }
public DnsResponseCode ResponseCode { get; set; } public DnsResponseCode ResponseCode { get; set; }
public List<DnsQueryResourceRecord> Queries { get; set; } public List<DnsQueryResourceRecord> Queries { get; set; }
...@@ -77,8 +81,8 @@ namespace PcapDotNet.Packets.Dns ...@@ -77,8 +81,8 @@ namespace PcapDotNet.Packets.Dns
protected override void Write(byte[] buffer, int offset) protected override void Write(byte[] buffer, int offset)
{ {
DnsDatagram.Write(buffer, offset, DnsDatagram.Write(buffer, offset,
Id, IsResponse, Opcode, IsAuthoritiveAnswer, IsTruncated, IsRecusionDesired, IsRecusionAvailable, FutureUse, ResponseCode, Id, IsResponse, Opcode, IsAuthoritiveAnswer, IsTruncated, IsRecusionDesired, IsRecusionAvailable, FutureUse, IsAuthenticData,
Queries, Answers, Authorities, Additionals, DomainNameCompressionMode); IsCheckingDisabled, ResponseCode, Queries, Answers, Authorities, Additionals, DomainNameCompressionMode);
} }
/// <summary> /// <summary>
...@@ -99,15 +103,17 @@ namespace PcapDotNet.Packets.Dns ...@@ -99,15 +103,17 @@ namespace PcapDotNet.Packets.Dns
public bool Equals(DnsLayer other) public bool Equals(DnsLayer other)
{ {
return other != null && return other != null &&
Id == other.Id && Id.Equals(other.Id) &&
IsQuery == other.IsQuery && IsQuery.Equals(other.IsQuery) &&
Opcode == other.Opcode && Opcode.Equals(other.Opcode) &&
IsAuthoritiveAnswer == other.IsAuthoritiveAnswer && IsAuthoritiveAnswer.Equals(other.IsAuthoritiveAnswer) &&
IsTruncated == other.IsTruncated && IsTruncated.Equals(other.IsTruncated) &&
IsRecusionDesired == other.IsRecusionDesired && IsRecusionDesired.Equals(other.IsRecusionDesired) &&
IsRecusionAvailable == other.IsRecusionAvailable && IsRecusionAvailable.Equals(other.IsRecusionAvailable) &&
FutureUse == other.FutureUse && FutureUse.Equals(other.FutureUse) &&
ResponseCode == other.ResponseCode && IsAuthenticData.Equals(other.IsAuthenticData) &&
IsCheckingDisabled.Equals(other.IsCheckingDisabled) &&
ResponseCode.Equals(other.ResponseCode) &&
(Queries.IsNullOrEmpty() && other.Queries.IsNullOrEmpty() || Queries.SequenceEqual(other.Queries)) && (Queries.IsNullOrEmpty() && other.Queries.IsNullOrEmpty() || Queries.SequenceEqual(other.Queries)) &&
(Answers.IsNullOrEmpty() && other.Answers.IsNullOrEmpty() || Answers.SequenceEqual(other.Answers)) && (Answers.IsNullOrEmpty() && other.Answers.IsNullOrEmpty() || Answers.SequenceEqual(other.Answers)) &&
(Authorities.IsNullOrEmpty() && other.Authorities.IsNullOrEmpty() || Authorities.SequenceEqual(other.Authorities)) && (Authorities.IsNullOrEmpty() && other.Authorities.IsNullOrEmpty() || Authorities.SequenceEqual(other.Authorities)) &&
......
...@@ -89,7 +89,7 @@ namespace PcapDotNet.Packets.Dns ...@@ -89,7 +89,7 @@ namespace PcapDotNet.Packets.Dns
internal static bool TryParseBase(DnsDatagram dns, int offsetInDns, internal static bool TryParseBase(DnsDatagram dns, int offsetInDns,
out DnsDomainName domainName, out DnsType type, out DnsClass dnsClass, out int numBytesRead) out DnsDomainName domainName, out DnsType type, out DnsClass dnsClass, out int numBytesRead)
{ {
type = DnsType.All; type = DnsType.Any;
dnsClass = DnsClass.Any; dnsClass = DnsClass.Any;
if (!DnsDomainName.TryParse(dns, offsetInDns, dns.Length - offsetInDns, out domainName, out numBytesRead)) if (!DnsDomainName.TryParse(dns, offsetInDns, dns.Length - offsetInDns, out domainName, out numBytesRead))
return false; return false;
......
...@@ -178,7 +178,7 @@ ...@@ -178,7 +178,7 @@
Sig = 24, Sig = 24,
/// <summary> /// <summary>
/// RFCs 2535, 3755, 4034. /// RFCs 2065, 2535, 3755, 4034.
/// For security key. /// For security key.
/// Payload type: DnsResourceDataKey. /// Payload type: DnsResourceDataKey.
/// </summary> /// </summary>
...@@ -340,7 +340,7 @@ ...@@ -340,7 +340,7 @@
NSec = 47, NSec = 47,
/// <summary> /// <summary>
/// RFCs 3755, 4034. /// RFCs 3755, 4034, 5011.
/// DNSKEY. /// DNSKEY.
/// Represents the public key. /// Represents the public key.
/// Payload type: DnsResourceDataDnsKey. /// Payload type: DnsResourceDataDnsKey.
...@@ -483,7 +483,7 @@ ...@@ -483,7 +483,7 @@
/// A request for all records /// A request for all records
/// Query Type. /// Query Type.
/// </summary> /// </summary>
All = 255, Any = 255,
/// <summary> /// <summary>
/// Faltstrom. /// Faltstrom.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment