mirror of
https://github.com/fergalmoran/DnsServer.git
synced 2026-03-23 05:50:22 +00:00
added qname and app record name check.
This commit is contained in:
@@ -147,6 +147,10 @@ namespace Failover
|
||||
public Task<DnsDatagram> ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, string appRecordName, uint appRecordTtl, string appRecordData)
|
||||
{
|
||||
DnsQuestionRecord question = request.Question[0];
|
||||
|
||||
if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase))
|
||||
return Task.FromResult<DnsDatagram>(null);
|
||||
|
||||
switch (question.Type)
|
||||
{
|
||||
case DnsResourceRecordType.A:
|
||||
|
||||
@@ -120,6 +120,9 @@ namespace Failover
|
||||
{
|
||||
DnsQuestionRecord question = request.Question[0];
|
||||
|
||||
if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase))
|
||||
return Task.FromResult<DnsDatagram>(null);
|
||||
|
||||
using JsonDocument jsonDocument = JsonDocument.Parse(appRecordData);
|
||||
JsonElement jsonAppRecordData = jsonDocument.RootElement;
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
using DnsServerCore.ApplicationCommon;
|
||||
using MaxMind.GeoIP2.Responses;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
@@ -78,6 +79,10 @@ namespace GeoContinent
|
||||
public Task<DnsDatagram> ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, string appRecordName, uint appRecordTtl, string appRecordData)
|
||||
{
|
||||
DnsQuestionRecord question = request.Question[0];
|
||||
|
||||
if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase))
|
||||
return Task.FromResult<DnsDatagram>(null);
|
||||
|
||||
switch (question.Type)
|
||||
{
|
||||
case DnsResourceRecordType.A:
|
||||
|
||||
@@ -76,6 +76,11 @@ namespace GeoContinent
|
||||
|
||||
public Task<DnsDatagram> ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, string appRecordName, uint appRecordTtl, string appRecordData)
|
||||
{
|
||||
DnsQuestionRecord question = request.Question[0];
|
||||
|
||||
if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase))
|
||||
return Task.FromResult<DnsDatagram>(null);
|
||||
|
||||
using JsonDocument jsonDocument = JsonDocument.Parse(appRecordData);
|
||||
JsonElement jsonAppRecordData = jsonDocument.RootElement;
|
||||
JsonElement jsonContinent = default;
|
||||
@@ -114,10 +119,10 @@ namespace GeoContinent
|
||||
|
||||
IReadOnlyList<DnsResourceRecord> answers;
|
||||
|
||||
if (request.Question[0].Name.Equals(zoneName, StringComparison.OrdinalIgnoreCase)) //check for zone apex
|
||||
answers = new DnsResourceRecord[] { new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.ANAME, DnsClass.IN, appRecordTtl, new DnsANAMERecordData(cname)) }; //use ANAME
|
||||
if (question.Name.Equals(zoneName, StringComparison.OrdinalIgnoreCase)) //check for zone apex
|
||||
answers = new DnsResourceRecord[] { new DnsResourceRecord(question.Name, DnsResourceRecordType.ANAME, DnsClass.IN, appRecordTtl, new DnsANAMERecordData(cname)) }; //use ANAME
|
||||
else
|
||||
answers = new DnsResourceRecord[] { new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.CNAME, DnsClass.IN, appRecordTtl, new DnsCNAMERecordData(cname)) };
|
||||
answers = new DnsResourceRecord[] { new DnsResourceRecord(question.Name, DnsResourceRecordType.CNAME, DnsClass.IN, appRecordTtl, new DnsCNAMERecordData(cname)) };
|
||||
|
||||
EDnsOption[] options;
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
using DnsServerCore.ApplicationCommon;
|
||||
using MaxMind.GeoIP2.Responses;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
@@ -78,6 +79,10 @@ namespace GeoCountry
|
||||
public Task<DnsDatagram> ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, string appRecordName, uint appRecordTtl, string appRecordData)
|
||||
{
|
||||
DnsQuestionRecord question = request.Question[0];
|
||||
|
||||
if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase))
|
||||
return Task.FromResult<DnsDatagram>(null);
|
||||
|
||||
switch (question.Type)
|
||||
{
|
||||
case DnsResourceRecordType.A:
|
||||
|
||||
@@ -76,6 +76,11 @@ namespace GeoCountry
|
||||
|
||||
public Task<DnsDatagram> ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, string appRecordName, uint appRecordTtl, string appRecordData)
|
||||
{
|
||||
DnsQuestionRecord question = request.Question[0];
|
||||
|
||||
if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase))
|
||||
return Task.FromResult<DnsDatagram>(null);
|
||||
|
||||
using JsonDocument jsonDocument = JsonDocument.Parse(appRecordData);
|
||||
JsonElement jsonAppRecordData = jsonDocument.RootElement;
|
||||
JsonElement jsonCountry = default;
|
||||
@@ -114,10 +119,10 @@ namespace GeoCountry
|
||||
|
||||
IReadOnlyList<DnsResourceRecord> answers;
|
||||
|
||||
if (request.Question[0].Name.Equals(zoneName, StringComparison.OrdinalIgnoreCase)) //check for zone apex
|
||||
answers = new DnsResourceRecord[] { new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.ANAME, DnsClass.IN, appRecordTtl, new DnsANAMERecordData(cname)) }; //use ANAME
|
||||
if (question.Name.Equals(zoneName, StringComparison.OrdinalIgnoreCase)) //check for zone apex
|
||||
answers = new DnsResourceRecord[] { new DnsResourceRecord(question.Name, DnsResourceRecordType.ANAME, DnsClass.IN, appRecordTtl, new DnsANAMERecordData(cname)) }; //use ANAME
|
||||
else
|
||||
answers = new DnsResourceRecord[] { new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.CNAME, DnsClass.IN, appRecordTtl, new DnsCNAMERecordData(cname)) };
|
||||
answers = new DnsResourceRecord[] { new DnsResourceRecord(question.Name, DnsResourceRecordType.CNAME, DnsClass.IN, appRecordTtl, new DnsCNAMERecordData(cname)) };
|
||||
|
||||
EDnsOption[] options;
|
||||
|
||||
|
||||
@@ -95,6 +95,10 @@ namespace GeoDistance
|
||||
public Task<DnsDatagram> ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, string appRecordName, uint appRecordTtl, string appRecordData)
|
||||
{
|
||||
DnsQuestionRecord question = request.Question[0];
|
||||
|
||||
if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase))
|
||||
return Task.FromResult<DnsDatagram>(null);
|
||||
|
||||
switch (question.Type)
|
||||
{
|
||||
case DnsResourceRecordType.A:
|
||||
|
||||
@@ -93,6 +93,11 @@ namespace GeoDistance
|
||||
|
||||
public Task<DnsDatagram> ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, string appRecordName, uint appRecordTtl, string appRecordData)
|
||||
{
|
||||
DnsQuestionRecord question = request.Question[0];
|
||||
|
||||
if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase))
|
||||
return Task.FromResult<DnsDatagram>(null);
|
||||
|
||||
Location location = null;
|
||||
|
||||
bool ecsUsed = false;
|
||||
@@ -146,10 +151,10 @@ namespace GeoDistance
|
||||
|
||||
IReadOnlyList<DnsResourceRecord> answers;
|
||||
|
||||
if (request.Question[0].Name.Equals(zoneName, StringComparison.OrdinalIgnoreCase)) //check for zone apex
|
||||
answers = new DnsResourceRecord[] { new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.ANAME, DnsClass.IN, appRecordTtl, new DnsANAMERecordData(cname)) }; //use ANAME
|
||||
if (question.Name.Equals(zoneName, StringComparison.OrdinalIgnoreCase)) //check for zone apex
|
||||
answers = new DnsResourceRecord[] { new DnsResourceRecord(question.Name, DnsResourceRecordType.ANAME, DnsClass.IN, appRecordTtl, new DnsANAMERecordData(cname)) }; //use ANAME
|
||||
else
|
||||
answers = new DnsResourceRecord[] { new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.CNAME, DnsClass.IN, appRecordTtl, new DnsCNAMERecordData(cname)) };
|
||||
answers = new DnsResourceRecord[] { new DnsResourceRecord(question.Name, DnsResourceRecordType.CNAME, DnsClass.IN, appRecordTtl, new DnsCNAMERecordData(cname)) };
|
||||
|
||||
EDnsOption[] options;
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using DnsServerCore.ApplicationCommon;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
@@ -139,6 +140,10 @@ namespace SplitHorizon
|
||||
public Task<DnsDatagram> ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, string appRecordName, uint appRecordTtl, string appRecordData)
|
||||
{
|
||||
DnsQuestionRecord question = request.Question[0];
|
||||
|
||||
if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase))
|
||||
return Task.FromResult<DnsDatagram>(null);
|
||||
|
||||
switch (question.Type)
|
||||
{
|
||||
case DnsResourceRecordType.A:
|
||||
|
||||
@@ -50,6 +50,11 @@ namespace SplitHorizon
|
||||
|
||||
public Task<DnsDatagram> ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, string appRecordName, uint appRecordTtl, string appRecordData)
|
||||
{
|
||||
DnsQuestionRecord question = request.Question[0];
|
||||
|
||||
if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase))
|
||||
return Task.FromResult<DnsDatagram>(null);
|
||||
|
||||
using JsonDocument jsonDocument = JsonDocument.Parse(appRecordData);
|
||||
JsonElement jsonAppRecordData = jsonDocument.RootElement;
|
||||
JsonElement jsonCname = default;
|
||||
@@ -105,7 +110,6 @@ namespace SplitHorizon
|
||||
if (string.IsNullOrEmpty(cname))
|
||||
return Task.FromResult<DnsDatagram>(null);
|
||||
|
||||
DnsQuestionRecord question = request.Question[0];
|
||||
IReadOnlyList<DnsResourceRecord> answers;
|
||||
|
||||
if (question.Name.Equals(zoneName, StringComparison.OrdinalIgnoreCase)) //check for zone apex
|
||||
|
||||
@@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using DnsServerCore.ApplicationCommon;
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Threading.Tasks;
|
||||
@@ -47,26 +48,31 @@ namespace WhatIsMyDns
|
||||
|
||||
public Task<DnsDatagram> ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, string appRecordName, uint appRecordTtl, string appRecordData)
|
||||
{
|
||||
DnsQuestionRecord question = request.Question[0];
|
||||
|
||||
if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase))
|
||||
return Task.FromResult<DnsDatagram>(null);
|
||||
|
||||
DnsResourceRecord answer;
|
||||
|
||||
switch (request.Question[0].Type)
|
||||
switch (question.Type)
|
||||
{
|
||||
case DnsResourceRecordType.A:
|
||||
if (remoteEP.AddressFamily != AddressFamily.InterNetwork)
|
||||
return Task.FromResult<DnsDatagram>(null);
|
||||
|
||||
answer = new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.A, DnsClass.IN, appRecordTtl, new DnsARecordData(remoteEP.Address));
|
||||
answer = new DnsResourceRecord(question.Name, DnsResourceRecordType.A, DnsClass.IN, appRecordTtl, new DnsARecordData(remoteEP.Address));
|
||||
break;
|
||||
|
||||
case DnsResourceRecordType.AAAA:
|
||||
if (remoteEP.AddressFamily != AddressFamily.InterNetworkV6)
|
||||
return Task.FromResult<DnsDatagram>(null);
|
||||
|
||||
answer = new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.AAAA, DnsClass.IN, appRecordTtl, new DnsAAAARecordData(remoteEP.Address));
|
||||
answer = new DnsResourceRecord(question.Name, DnsResourceRecordType.AAAA, DnsClass.IN, appRecordTtl, new DnsAAAARecordData(remoteEP.Address));
|
||||
break;
|
||||
|
||||
case DnsResourceRecordType.TXT:
|
||||
answer = new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.TXT, DnsClass.IN, appRecordTtl, new DnsTXTRecordData(remoteEP.Address.ToString()));
|
||||
answer = new DnsResourceRecord(question.Name, DnsResourceRecordType.TXT, DnsClass.IN, appRecordTtl, new DnsTXTRecordData(remoteEP.Address.ToString()));
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user