public void DnsRecordFactory_SRVRecordEmpty() { var data = new byte[0]; var factory = GetFactory(data); var info = new ResourceRecordInfo("query.example.com", ResourceRecordType.SRV, QueryClass.IN, 0, data.Length); Action act = () => factory.GetRecord(info); Assert.ThrowsAny <IndexOutOfRangeException>(act); }
public void DnsRecordFactory_TXTRecordWrongTextLength() { var data = new byte[0]; var factory = GetFactory(data); var info = new ResourceRecordInfo("query.example.com", ResourceRecordType.TXT, QueryClass.IN, 0, data.Length); var result = factory.GetRecord(info) as TxtRecord; Assert.Empty(result.EscapedText); }
public void DnsRecordFactory_NSRecordNotEnoughData() { var data = new byte[0]; var factory = GetFactory(data); var info = new ResourceRecordInfo("query.example.com", ResourceRecordType.NS, QueryClass.IN, 0, data.Length); var ex = Assert.ThrowsAny <DnsResponseParseException>(() => factory.GetRecord(info)); Assert.Equal(0, ex.Index); }
private DnsResourceRecord ResolveDnsKeyRecord(ResourceRecordInfo info) { var startIndex = _reader.Index; int flags = _reader.ReadUInt16NetworkOrder(); var protocol = _reader.ReadByte(); var algorithm = _reader.ReadByte(); var publicKey = _reader.ReadBytesToEnd(startIndex, info.RawDataLength).ToArray(); return(new DnsKeyRecord(info, flags, protocol, algorithm, publicKey)); }
private DnsResourceRecord ResolveTlsaRecord(ResourceRecordInfo info) { var startIndex = _reader.Index; var certificateUsage = _reader.ReadByte(); var selector = _reader.ReadByte(); var matchingType = _reader.ReadByte(); var certificateAssociationData = _reader.ReadBytesToEnd(startIndex, info.RawDataLength).ToArray(); return(new TlsaRecord(info, certificateUsage, selector, matchingType, certificateAssociationData)); }
private DnsResourceRecord ResolveDsRecord(ResourceRecordInfo info) { var startIndex = _reader.Index; var keyTag = _reader.ReadUInt16NetworkOrder(); var algorithm = _reader.ReadByte(); var digestType = _reader.ReadByte(); var digest = _reader.ReadBytesToEnd(startIndex, info.RawDataLength).ToArray(); return(new DsRecord(info, keyTag, algorithm, digestType, digest)); }
public void DnsRecordFactory_PTRRecordEmptyName() { var data = new byte[] { 0 }; var factory = GetFactory(data); var info = new ResourceRecordInfo("query.example.com", ResourceRecordType.PTR, QueryClass.IN, 0, data.Length); var result = factory.GetRecord(info) as PtrRecord; Assert.Equal(".", result.PtrDomainName.Value); }
public void DnsRecordFactory_ARecordNotEnoughData() { var data = new byte[] { 23, 23, 23 }; var factory = GetFactory(data); var info = new ResourceRecordInfo("example.com", ResourceRecordType.A, QueryClass.IN, 0, data.Length); Action act = () => factory.GetRecord(info); Assert.ThrowsAny <IndexOutOfRangeException>(act); }
public void DnsRecordFactory_ARecord() { var data = new byte[] { 23, 24, 25, 26 }; var factory = GetFactory(data); var info = new ResourceRecordInfo("example.com", ResourceRecordType.A, QueryClass.IN, 0, data.Length); var result = factory.GetRecord(info) as ARecord; Assert.Equal(result.Address, IPAddress.Parse("23.24.25.26")); }
public void DnsRecordFactory_NSRecordEmptyName() { var data = new byte[] { 0 }; var factory = GetFactory(data); var info = new ResourceRecordInfo("query.example.com", ResourceRecordType.NS, QueryClass.IN, 0, data.Length); var result = factory.GetRecord(info) as NsRecord; Assert.Equal(result.NSDName.Value, "."); }
public void DnsRecordFactory_MXRecordEmptyName() { var data = new byte[] { 1, 0, 0 }; var factory = GetFactory(data); var info = new ResourceRecordInfo("query.example.com", ResourceRecordType.MX, QueryClass.IN, 0, data.Length); var result = factory.GetRecord(info) as MxRecord; Assert.Equal(256, result.Preference); Assert.Equal(".", result.Exchange.Value); }
public void DnsRecordFactory_AAAARecord() { var data = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; var factory = GetFactory(data); var info = new ResourceRecordInfo("example.com", ResourceRecordType.AAAA, QueryClass.IN, 0, data.Length); var result = factory.GetRecord(info) as AaaaRecord; Assert.Equal(result.Address, IPAddress.Parse("102:304:506:708:90a:b0c:d0e:f10")); Assert.Equal(result.Address.GetAddressBytes(), data); }
private DnsResourceRecord ResolveSoaRecord(ResourceRecordInfo info) { var mName = _reader.ReadDnsName(); var rName = _reader.ReadDnsName(); var serial = _reader.ReadUInt32NetworkOrder(); var refresh = _reader.ReadUInt32NetworkOrder(); var retry = _reader.ReadUInt32NetworkOrder(); var expire = _reader.ReadUInt32NetworkOrder(); var minimum = _reader.ReadUInt32NetworkOrder(); return(new SoaRecord(info, mName, rName, serial, refresh, retry, expire, minimum)); }
public void DnsRecordFactory_ARecordNotEnoughData() { var data = new byte[] { 23, 23, 23 }; var factory = GetFactory(data); var info = new ResourceRecordInfo("example.com", ResourceRecordType.A, QueryClass.IN, 0, data.Length); var ex = Assert.ThrowsAny <DnsResponseParseException>(() => factory.GetRecord(info)); Assert.Contains("IPv4", ex.Message); Assert.Equal(0, ex.Index); Assert.Equal(4, ex.ReadLength); }
public void DnsRecordFactory_PTRRecord() { var name = DnsString.Parse("result.example.com"); var writer = new DnsDatagramWriter(); writer.WriteHostName(name.Value); var factory = GetFactory(writer.Data.ToArray()); var info = new ResourceRecordInfo("query.example.com", ResourceRecordType.PTR, QueryClass.IN, 0, writer.Data.Count); var result = factory.GetRecord(info) as PtrRecord; Assert.Equal(result.PtrDomainName, name); }
public void DnsRecordFactory_MBRecord() { var name = DnsString.Parse("Müsli.de"); var writer = new DnsDatagramWriter(); writer.WriteHostName(name.Value); var factory = GetFactory(writer.Data.ToArray()); var info = new ResourceRecordInfo("Müsli.de", ResourceRecordType.MB, QueryClass.IN, 0, writer.Data.Count); var result = factory.GetRecord(info) as MbRecord; Assert.Equal(result.MadName, name); Assert.Equal("müsli.de.", result.MadName.Original); }
public void Test_CaaWorker_Scan_Records() { // Arrange var workerInformation = new WorkerInformation() { Hostname = "http://www.google.com" }; var resourceRecord = new ResourceRecordInfo(DnsString.FromResponseQueryString(workerInformation.Hostname), ResourceRecordType.CAA, QueryClass.IN, 0, 0); var dnsRecords = new List <DnsResourceRecord>() { new CaaRecord(resourceRecord, 0, "issuewild", "pki.googl"), new CaaRecord(resourceRecord, 0, "issue", "letsencrypt.org"), new CaaRecord(resourceRecord, 0, "issuewild", "sslcerts.com"), new CaaRecord(resourceRecord, 0, "issue", "freecerts.com"), }; var dnsResponse = new Mock <IDnsQueryResponse>(); dnsResponse.Setup(x => x.Answers).Returns(dnsRecords); var lookupClientMock = new Mock <ILookupClient>(MockBehavior.Strict); lookupClientMock.Setup(x => x.QueryAsync(workerInformation.Hostname, QueryType.CAA, QueryClass.IN, null, default)).Returns(Task.FromResult(dnsResponse.Object)); var previousWorkerMock = new Mock <IAsyncWorker>(MockBehavior.Strict); previousWorkerMock.Setup(x => x.Scan(workerInformation)).Returns(Task.FromResult(new List <ScanResult>())); var service = new CaaWorker(previousWorkerMock.Object, lookupClientMock.Object); // Act var rawCaaRecords = service.Scan(workerInformation); rawCaaRecords.Wait(); // Assert var records = rawCaaRecords.Result; Assert.IsInstanceOfType(records.Single(), typeof(ParsedCaaResponse)); var caaRecord = records.Single() as ParsedCaaResponse; Assert.IsTrue(caaRecord.HasCaaRecords); Assert.AreEqual(2, caaRecord.IssueCas.Count); Assert.AreEqual("letsencrypt.org", caaRecord.IssueCas[0]); Assert.AreEqual("freecerts.com", caaRecord.IssueCas[1]); Assert.AreEqual(2, caaRecord.IssueWildCas.Count); Assert.AreEqual("pki.googl", caaRecord.IssueWildCas[0]); Assert.AreEqual("sslcerts.com", caaRecord.IssueWildCas[1]); }
private DnsResourceRecord ResolveRRSigRecord(ResourceRecordInfo info) { var startIndex = _reader.Index; var type = _reader.ReadUInt16NetworkOrder(); var algorithmNumber = _reader.ReadByte(); var labels = _reader.ReadByte(); var originalTtl = _reader.ReadUInt32NetworkOrder(); var signatureExpiration = _reader.ReadUInt32NetworkOrder(); var signatureInception = _reader.ReadUInt32NetworkOrder(); var keyTag = _reader.ReadUInt16NetworkOrder(); var signersName = _reader.ReadDnsName(); var signature = _reader.ReadBytesToEnd(startIndex, info.RawDataLength).ToArray(); return(new RRSigRecord(info, type, algorithmNumber, labels, originalTtl, signatureExpiration, signatureInception, keyTag, signersName, signature)); }
public void DnsRecordFactory_TXTRecordEmpty() { var textA = "Some Text"; var lineA = Encoding.ASCII.GetBytes(textA); var data = new List <byte> { 5 }; data.AddRange(lineA); var factory = GetFactory(data.ToArray()); var info = new ResourceRecordInfo("query.example.com", ResourceRecordType.TXT, QueryClass.IN, 0, data.Count); Assert.ThrowsAny <DnsResponseParseException>(() => factory.GetRecord(info)); }
public void DnsRecordFactory_SOARecord() { var data = new byte[] { 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 5 }; var factory = GetFactory(data); var info = new ResourceRecordInfo("query.example.com", ResourceRecordType.SOA, QueryClass.IN, 0, data.Length); var result = factory.GetRecord(info) as SoaRecord; Assert.Equal(".", result.MName.Value); Assert.Equal(".", result.RName.Value); Assert.True(result.Serial == 1); Assert.True(result.Refresh == 2); Assert.True(result.Retry == 3); Assert.True(result.Expire == 4); Assert.True(result.Minimum == 5); }
public void DnsRecordFactory_MXRecord() { var name = DnsString.Parse("result.example.com"); var writer = new DnsDatagramWriter(); writer.WriteByte(0); writer.WriteByte(1); writer.WriteHostName(name.Value); var factory = GetFactory(writer.Data.ToArray()); var info = new ResourceRecordInfo("query.example.com", ResourceRecordType.MX, QueryClass.IN, 0, writer.Data.Count); var result = factory.GetRecord(info) as MxRecord; Assert.Equal(1, result.Preference); Assert.Equal(result.Exchange, name); }
public void DnsRecordFactory_SRVRecord() { var name = DnsString.Parse("result.example.com"); var writer = new DnsDatagramWriter(); writer.WriteBytes(new byte[] { 0, 1, 1, 0, 2, 3 }, 6); writer.WriteHostName(name.Value); var factory = GetFactory(writer.Data.ToArray()); var info = new ResourceRecordInfo("query.example.com", ResourceRecordType.SRV, QueryClass.IN, 0, writer.Data.Count); var result = factory.GetRecord(info) as SrvRecord; Assert.Equal(result.Target, name); Assert.True(result.Priority == 1); Assert.True(result.Weight == 256); Assert.True(result.Port == 515); }
public void Test_DkimWorker_OneSelectors_Txt() { // Arrange var workerInformation = MockWorkerInformation(hostname: "google.com"); var hostnameWithSelector = "selector1._domainkey.google.com"; var settingsMock = Utils.CreateMock <ISettings>(); settingsMock.Setup(x => x.DkimSelectors).Returns(new List <string>() { "selector1._domainkey" }); var lookupClientMock = Utils.CreateMock <ILookupClient>(); var resourceRecord = new ResourceRecordInfo(DnsString.FromResponseQueryString(hostnameWithSelector), ResourceRecordType.TXT, QueryClass.IN, 0, 0); var txtRecords = new[] { "v=DKIM <key>" }; var dnsRecords = new List <TxtRecord>() { new TxtRecord(resourceRecord, txtRecords, txtRecords) }; var dnsResponse = new Mock <IDnsQueryResponse>(); dnsResponse.Setup(x => x.Answers).Returns(dnsRecords); lookupClientMock.Setup(x => x.QueryAsync(hostnameWithSelector, QueryType.TXT, QueryClass.IN, null, default)).Returns(Task.FromResult(dnsResponse.Object)); var previousWorkerMock = MockPreviousWorker(workerInformation); var worker = new DkimWorker(previousWorkerMock.Object, lookupClientMock.Object, settingsMock.Object); // Act var rawRecords = worker.Scan(workerInformation); rawRecords.Wait(); // Assert var records = rawRecords.Result; Assert.AreEqual(3, records.Count); AssertPreviousScanResults(new[] { records[0], records[1] }.ToList()); AssertDkimResponse(records[2], null, new[] { ("selector1._domainkey", QueryType.TXT, txtRecords.ToList()) }.ToList(), true);
private DnsResourceRecord ResolveTXTRecord(ResourceRecordInfo info) { int pos = _reader.Index; var values = new List <string>(); var utf8Values = new List <string>(); while ((_reader.Index - pos) < info.RawDataLength) { var length = _reader.ReadByte(); var bytes = _reader.ReadBytes(length); var escaped = DnsDatagramReader.ParseString(bytes); var utf = DnsDatagramReader.ReadUTF8String(bytes); values.Add(escaped); utf8Values.Add(utf); } return(new TxtRecord(info, values.ToArray(), utf8Values.ToArray())); }
public void DnsRecordFactory_RRSIGRecord() { var type = ResourceRecordType.NSEC; var algorithmNumber = DnsSecurityAlgorithm.ECDSAP256SHA256; var labels = 5; var originalTtl = 300; var signatureExpiration = 1589414400; var signatureInception = 1587600000; short keytag = 3942; var signersName = DnsString.Parse("result.example.com"); var signatureString = "kfyyKQoPZJFyOFSDqav7wj5XNRPqZssV2K2k8MJun28QSsCMHyWOjw9Hk4KofnEIUWNui3mMgAEFYbwoeRKkMf5uDAh6ryJ4veQNj86mgYJrpJppUplqlqJE8o1bx0I1VfwheL+M23bL5MnqSGiI5igmMDyeVUraVOO4RQyfGN0="; var signature = Convert.FromBase64String(signatureString); var writer = new DnsDatagramWriter(); writer.WriteInt16NetworkOrder((short)type); writer.WriteByte((byte)algorithmNumber); writer.WriteByte((byte)labels); writer.WriteInt32NetworkOrder(originalTtl); writer.WriteInt32NetworkOrder(signatureExpiration); writer.WriteInt32NetworkOrder(signatureInception); writer.WriteInt16NetworkOrder(keytag); writer.WriteHostName(signersName.Value); writer.WriteBytes(signature, signature.Length); var factory = GetFactory(writer.Data.ToArray()); var info = new ResourceRecordInfo("query.example.com", ResourceRecordType.RRSIG, QueryClass.IN, 0, writer.Data.Count); var result = factory.GetRecord(info) as RRSigRecord; Assert.Equal(type, result.CoveredType); Assert.Equal(algorithmNumber, result.Algorithm); Assert.Equal(labels, result.Labels); Assert.Equal(originalTtl, result.OriginalTtl); Assert.Equal(DateTimeOffset.FromUnixTimeSeconds(signatureExpiration), result.SignatureExpiration); Assert.Equal(DateTimeOffset.FromUnixTimeSeconds(signatureInception), result.SignatureInception); Assert.Equal(signersName.Value, result.SignersName); Assert.Equal(signature, result.Signature); Assert.Equal(signatureString, result.SignatureAsString); }
public void DnsRecordFactory_TXTRecord() { var textA = @"Some lines of text."; var textB = "Another line"; var lineA = Encoding.ASCII.GetBytes(textA); var lineB = Encoding.ASCII.GetBytes(textB); var data = new List <byte>(); data.Add((byte)lineA.Length); data.AddRange(lineA); data.Add((byte)lineB.Length); data.AddRange(lineB); var factory = GetFactory(data.ToArray()); var info = new ResourceRecordInfo("query.example.com", ResourceRecordType.TXT, QueryClass.IN, 0, data.Count); var result = factory.GetRecord(info) as TxtRecord; Assert.Equal(2, result.EscapedText.Count); Assert.Equal(result.EscapedText.ElementAt(0), textA); Assert.Equal(result.EscapedText.ElementAt(1), textB); }
public void Test_MxWorker_Scan_MxRecords() { //Arrange var workerInformation = MockWorkerInformation(hostname: "google.com"); var dnsString = DnsString.FromResponseQueryString(workerInformation.Hostname); var resourceRecord = new ResourceRecordInfo(dnsString, ResourceRecordType.MX, QueryClass.IN, 0, 0); var dnsResponse = new Mock <IDnsQueryResponse>(); dnsResponse.Setup(x => x.Answers).Returns(new List <DnsResourceRecord>() { new MxRecord(resourceRecord, 0, dnsString) }); var lookupClientMock = Utils.CreateMock <ILookupClient>(); lookupClientMock.Setup(x => x.QueryAsync(workerInformation.Hostname, QueryType.MX, QueryClass.IN, null, default)).Returns(Task.FromResult(dnsResponse.Object)); var previousWorkerMock = Utils.CreateMock <IAsyncWorker>(); previousWorkerMock.Setup(x => x.Scan(workerInformation)).Returns(Task.FromResult(MockScanResults())); var service = new MxWorker(previousWorkerMock.Object, lookupClientMock.Object); //Act var rawMxRecords = service.Scan(workerInformation); rawMxRecords.Wait(); // Assert var records = rawMxRecords.Result; Assert.AreEqual(3, records.Count); AssertPreviousScanResults(new[] { records[0], records[1] }.ToList()); AssertMxResponse(records[2], new List <string>() { "google.com." }, true); }
public void DnsRecordFactory_DnsKeyRecord() { var expectedPublicKey = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var expectedBytes = Encoding.UTF8.GetBytes(expectedPublicKey); var name = DnsString.Parse("example.com"); var writer = new DnsDatagramWriter(); writer.WriteInt16NetworkOrder(256); writer.WriteByte(3); writer.WriteByte((byte)DnsSecurityAlgorithm.RSASHA256); writer.WriteBytes(expectedBytes, expectedBytes.Length); var factory = GetFactory(writer.Data.ToArray()); var info = new ResourceRecordInfo(name, ResourceRecordType.DNSKEY, QueryClass.IN, 0, writer.Data.Count); var result = factory.GetRecord(info) as DnsKeyRecord; Assert.Equal(expectedBytes, result.PublicKey); Assert.Equal(256, result.Flags); Assert.Equal(3, result.Protocol); Assert.Equal(DnsSecurityAlgorithm.RSASHA256, result.Algorithm); }
public void ResolveServiceProcessResultReturnAEntityList() { IDnsQueryResponse result = null; var mockResult = new Mock <IDnsQueryResponse>(); DnsString canonicalName = DnsClient.DnsString.Parse("hostname.com"); ResourceRecordInfo info = new ResourceRecordInfo(canonicalName, DnsClient.Protocol.ResourceRecordType.SRV, DnsClient.QueryClass.IN, 10, 1); var record = new SrvRecord(info, 1, 10, 443, canonicalName); var cNameRecord = new CNameRecord(info, canonicalName); List <SrvRecord> answers = new List <SrvRecord>() { record }; mockResult.Setup(foo => foo.Answers).Returns(answers); mockResult.Setup(foo => foo.Additionals).Returns(new List <CNameRecord>() { cNameRecord }); result = mockResult.Object; List <DnsSrvResultEntry> ret = ResolveServiceProcessResult(result); }
public void DnsRecordFactory_SpecialChars() { var textA = "\"äöü \\slash/! @bla.com \""; var textB = "(Another line)"; var lineA = Encoding.UTF8.GetBytes(textA); var lineB = Encoding.UTF8.GetBytes(textB); var data = new List <byte>(); data.Add((byte)lineA.Length); data.AddRange(lineA); data.Add((byte)lineB.Length); data.AddRange(lineB); var factory = GetFactory(data.ToArray()); var info = new ResourceRecordInfo("query.example.com", ResourceRecordType.TXT, QueryClass.IN, 0, data.Count); var result = factory.GetRecord(info) as TxtRecord; Assert.Equal(2, result.EscapedText.Count); Assert.Equal(result.Text.ElementAt(0), textA); Assert.Equal("\\\"\\195\\164\\195\\182\\195\\188 \\\\slash/! @bla.com \\\"", result.EscapedText.ElementAt(0)); Assert.Equal(result.Text.ElementAt(1), textB); Assert.Equal(result.EscapedText.ElementAt(1), textB); }