У меня есть 2 DNS-сервера (domainserverwithport.com:5356 и domainserverwithoutport.com), к которым я подключаюсь для запроса поиска.У одного есть номер порта, а у другого нет.
Тот, у кого нет номера порта, подключается и получает ответ на запрос.Но второй ничего не возвращает.И при использовании ARSoft.Tools.Net.Core, я не мог видеть вариант создания нового DNSClient с IP-адресом и номером порта.Пожалуйста, есть ли способ обойти это?
Я сделал следующее для DNS-сервера, у которого нет номера порта.
var ip = Dns.GetHostEntry("domainserverwithoutport.com");
Console.WriteLine(ip.AddressList[0]);
var newIp = ip.AddressList[0];
IPAddress iPAddress = IPAddress.Parse(newIp.ToString());
var result = EnumDnsQuery(iPAddress.ToString(), "8.7.4.3.9.5.3.1.0.9.4.3.2.e164.arpa.4.couretech.0ceed", RecordType.Naptr, 0, 5000);
и метод EnumDnsQuery
public static EnumDnsResponse EnumDnsQuery(string serverIp, string domain,
RecordType recordType, int maximumRetries = 0, int queryTimeout = QUERY_TIMEOUT_MILLISECONDS)
{
int retriesToUse = maximumRetries > 0 ? maximumRetries : 0;
DnsMessage dnsMessage = null;
TimeSpan duration = TimeSpan.Zero;
IPAddress ipAddress = IPAddress.Parse(serverIp);
DomainName domainName = DomainName.Parse(domain);
var stopwatch = new Stopwatch();
DnsClient client = new DnsClient(ipAddress, queryTimeout);
int attempts = 0;
stopwatch.Start();
while (dnsMessage == null && attempts <= retriesToUse)
{
attempts++;
dnsMessage = client.Resolve(domainName, recordType);
}
stopwatch.Stop();
string rawMessage = string.Empty;
if (dnsMessage != null && recordType == RecordType.Naptr)
{
var naptrRecords = dnsMessage.AnswerRecords.Where(x => x.GetType() == typeof(NaptrRecord))
.Select(x => (NaptrRecord)x)
.Where(x => x.Services.Equals("E2U+pstn:tel"))
.OrderByDescending(x => x.Order);
var naptrRecord = naptrRecords.FirstOrDefault();
if (naptrRecord != null)
rawMessage = naptrRecord.RegExp.Trim('!');
}
else if (dnsMessage != null && recordType == RecordType.Txt)
{
var txtRecords = dnsMessage.AnswerRecords.Where(x => x.GetType() == typeof(TxtRecord))
.Select(x => (TxtRecord)x);
var txtRecord = txtRecords.FirstOrDefault();
if (txtRecord == null)
rawMessage = txtRecord.TextData.Trim('!');
}
return new EnumDnsResponse(
dnsMessage: dnsMessage,
rawMessage: rawMessage,
totalDuration: stopwatch.Elapsed,
attempts: attempts);
}
Приведенный выше код возвращает сообщение DnsMessage.Но когда я делаю то же самое для другого сервера домена, который ожидает номер порта, DnsMessage становится нулевым. Пожалуйста, есть ли способ обойти это?