From 7d1e5b2b2b4de6a15d52aedd880d6000f2c700de Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=99=88=E5=9B=BD=E4=BC=9F?= <366193849@qq.com>
Date: Wed, 14 Jul 2021 14:59:38 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96dns=E9=80=BB=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FastGithub.Dns/GithubRequestResolver.cs | 39 ++++++++++++++++---------
1 file changed, 25 insertions(+), 14 deletions(-)
diff --git a/FastGithub.Dns/GithubRequestResolver.cs b/FastGithub.Dns/GithubRequestResolver.cs
index 7ff1f7f..84e7a8b 100644
--- a/FastGithub.Dns/GithubRequestResolver.cs
+++ b/FastGithub.Dns/GithubRequestResolver.cs
@@ -8,6 +8,7 @@ using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using System;
using System.Linq;
+using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Threading.Tasks;
@@ -76,24 +77,15 @@ namespace FastGithub.Dns
var ttl = this.options.CurrentValue.GithubTTL;
var record = new IPAddressResourceRecord(question.Name, address, ttl);
response.AnswerRecords.Add(record);
- this.logger.LogInformation(record.ToString());
+ this.logger.LogInformation($"[{domain}->{address}]");
}
}
else
{
- var localhost = System.Net.Dns.GetHostName();
- var addresses = await System.Net.Dns.GetHostAddressesAsync(localhost);
- var ttl = TimeSpan.FromMinutes(1d);
-
- foreach (var item in addresses)
- {
- if (item.AddressFamily == AddressFamily.InterNetwork)
- {
- var record = new IPAddressResourceRecord(question.Name, item, ttl);
- response.AnswerRecords.Add(record);
- this.logger.LogInformation(record.ToString());
- }
- }
+ var address = await this.GetLocalHostAddress();
+ var record = new IPAddressResourceRecord(question.Name, address, TimeSpan.FromMinutes(1));
+ response.AnswerRecords.Add(record);
+ this.logger.LogInformation($"[{domain}->{address}]");
}
if (response.AnswerRecords.Count == 0)
@@ -103,5 +95,24 @@ namespace FastGithub.Dns
return response;
}
+
+ ///
+ /// 获取本机ip
+ ///
+ ///
+ private async Task GetLocalHostAddress()
+ {
+ try
+ {
+ var localhost = System.Net.Dns.GetHostName();
+ var addresses = await System.Net.Dns.GetHostAddressesAsync(localhost);
+ var address = addresses.FirstOrDefault(item => item.AddressFamily == AddressFamily.InterNetwork);
+ return address ?? IPAddress.Loopback;
+ }
+ catch (Exception)
+ {
+ return IPAddress.Loopback;
+ }
+ }
}
}