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; + } + } } }