commit
5dd1a6cf8f
@ -91,7 +91,10 @@ namespace FastGithub.DomainResolve
|
|||||||
|
|
||||||
foreach (var fallbackDns in this.fastGithubConfig.FallbackDns)
|
foreach (var fallbackDns in this.fastGithubConfig.FallbackDns)
|
||||||
{
|
{
|
||||||
yield return fallbackDns;
|
if (Socket.OSSupportsIPv6 || fallbackDns.AddressFamily != AddressFamily.InterNetworkV6)
|
||||||
|
{
|
||||||
|
yield return fallbackDns;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,17 +156,8 @@ namespace FastGithub.DomainResolve
|
|||||||
? (IRequestResolver)new TcpRequestResolver(dns)
|
? (IRequestResolver)new TcpRequestResolver(dns)
|
||||||
: new UdpRequestResolver(dns, new TcpRequestResolver(dns), this.resolveTimeout);
|
: new UdpRequestResolver(dns, new TcpRequestResolver(dns), this.resolveTimeout);
|
||||||
|
|
||||||
var request = new Request
|
var answerRecords = await GetAnswerRecordsAsync(resolver, endPoint.Host, cancellationToken);
|
||||||
{
|
var addresses = answerRecords
|
||||||
RecursionDesired = true,
|
|
||||||
OperationCode = OperationCode.Query
|
|
||||||
};
|
|
||||||
|
|
||||||
request.Questions.Add(new Question(new Domain(endPoint.Host), RecordType.A));
|
|
||||||
var clientRequest = new ClientRequest(resolver, request);
|
|
||||||
var response = await clientRequest.Resolve(cancellationToken);
|
|
||||||
|
|
||||||
var addresses = response.AnswerRecords
|
|
||||||
.OfType<IPAddressResourceRecord>()
|
.OfType<IPAddressResourceRecord>()
|
||||||
.Where(item => IPAddress.IsLoopback(item.IPAddress) == false)
|
.Where(item => IPAddress.IsLoopback(item.IPAddress) == false)
|
||||||
.Select(item => item.IPAddress)
|
.Select(item => item.IPAddress)
|
||||||
@ -179,7 +173,7 @@ namespace FastGithub.DomainResolve
|
|||||||
addresses = await OrderByConnectAnyAsync(addresses, endPoint.Port, cancellationToken);
|
addresses = await OrderByConnectAnyAsync(addresses, endPoint.Port, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
var timeToLive = response.AnswerRecords.First().TimeToLive;
|
var timeToLive = answerRecords.First().TimeToLive;
|
||||||
if (timeToLive <= TimeSpan.Zero)
|
if (timeToLive <= TimeSpan.Zero)
|
||||||
{
|
{
|
||||||
timeToLive = this.defaultEmptyTtl;
|
timeToLive = this.defaultEmptyTtl;
|
||||||
@ -187,6 +181,43 @@ namespace FastGithub.DomainResolve
|
|||||||
|
|
||||||
return new LookupResult(addresses, timeToLive);
|
return new LookupResult(addresses, timeToLive);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取答案
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="resolver"></param>
|
||||||
|
/// <param name="domain"></param>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private static async Task<IList<IResourceRecord>> GetAnswerRecordsAsync(IRequestResolver resolver, string domain, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
var answerRecords = await GetAnswerAsync(RecordType.A);
|
||||||
|
if (Socket.OSSupportsIPv6 == true)
|
||||||
|
{
|
||||||
|
var ipv6Records = await GetAnswerAsync(RecordType.AAAA);
|
||||||
|
foreach (var record in ipv6Records)
|
||||||
|
{
|
||||||
|
answerRecords.Add(record);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return answerRecords;
|
||||||
|
|
||||||
|
async Task<IList<IResourceRecord>> GetAnswerAsync(RecordType recordType)
|
||||||
|
{
|
||||||
|
var request = new Request
|
||||||
|
{
|
||||||
|
RecursionDesired = true,
|
||||||
|
OperationCode = OperationCode.Query
|
||||||
|
};
|
||||||
|
|
||||||
|
request.Questions.Add(new Question(new Domain(domain), recordType));
|
||||||
|
var clientRequest = new ClientRequest(resolver, request);
|
||||||
|
var response = await clientRequest.Resolve(cancellationToken);
|
||||||
|
return response.AnswerRecords;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 连接速度排序
|
/// 连接速度排序
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -142,16 +142,9 @@ namespace FastGithub.PacketIntercept.Dns
|
|||||||
|
|
||||||
// dns响应数据
|
// dns响应数据
|
||||||
var response = Response.FromRequest(request);
|
var response = Response.FromRequest(request);
|
||||||
if (question.Type == RecordType.A)
|
var loopback = question.Type == RecordType.A ? IPAddress.Loopback : IPAddress.Loopback.MapToIPv6();
|
||||||
{
|
var record = new IPAddressResourceRecord(domain, loopback, this.ttl);
|
||||||
var record = new IPAddressResourceRecord(domain, IPAddress.Loopback, this.ttl);
|
response.AnswerRecords.Add(record);
|
||||||
response.AnswerRecords.Add(record);
|
|
||||||
this.logger.LogInformation($"{domain}->{IPAddress.Loopback}");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.logger.LogInformation($"{domain}->NULL");
|
|
||||||
}
|
|
||||||
var responsePayload = response.ToArray();
|
var responsePayload = response.ToArray();
|
||||||
|
|
||||||
// 修改payload和包长
|
// 修改payload和包长
|
||||||
@ -187,6 +180,7 @@ namespace FastGithub.PacketIntercept.Dns
|
|||||||
: WinDivertDirection.Inbound;
|
: WinDivertDirection.Inbound;
|
||||||
|
|
||||||
WinDivert.WinDivertHelperCalcChecksums(winDivertBuffer, packetLength, ref winDivertAddress, WinDivertChecksumHelperParam.All);
|
WinDivert.WinDivertHelperCalcChecksums(winDivertBuffer, packetLength, ref winDivertAddress, WinDivertChecksumHelperParam.All);
|
||||||
|
this.logger.LogInformation($"{domain}->{loopback}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user