修复dns客户端问题
This commit is contained in:
parent
8adbacc16e
commit
1bd5d8da95
@ -86,7 +86,7 @@ disabled_server_names = []
|
|||||||
## (dnscrypt-proxy will always encrypt everything even using UDP), and can
|
## (dnscrypt-proxy will always encrypt everything even using UDP), and can
|
||||||
## only increase latency.
|
## only increase latency.
|
||||||
|
|
||||||
force_tcp = true
|
force_tcp = false
|
||||||
|
|
||||||
|
|
||||||
## SOCKS proxy
|
## SOCKS proxy
|
||||||
|
|||||||
@ -70,7 +70,7 @@ namespace FastGithub.Dns
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.ProcessDnsPacket(packetBuffer, ref packetLength);
|
this.ProcessDnsPacket(packetBuffer, ref winDivertAddress, ref packetLength);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -136,7 +136,9 @@ namespace FastGithub.Dns
|
|||||||
/// 处理DNS数据包
|
/// 处理DNS数据包
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="packetBuffer"></param>
|
/// <param name="packetBuffer"></param>
|
||||||
private void ProcessDnsPacket(byte[] packetBuffer, ref uint packetLength)
|
/// <param name="winDivertAddress"></param>
|
||||||
|
/// <param name="packetLength"></param>
|
||||||
|
private void ProcessDnsPacket(byte[] packetBuffer, ref WinDivertAddress winDivertAddress, ref uint packetLength)
|
||||||
{
|
{
|
||||||
var packetData = packetBuffer.AsSpan(0, (int)packetLength).ToArray();
|
var packetData = packetBuffer.AsSpan(0, (int)packetLength).ToArray();
|
||||||
var packet = Packet.ParsePacket(LinkLayers.Raw, packetData);
|
var packet = Packet.ParsePacket(LinkLayers.Raw, packetData);
|
||||||
@ -144,6 +146,11 @@ namespace FastGithub.Dns
|
|||||||
var udpPacket = (UdpPacket)ipPacket.PayloadPacket;
|
var udpPacket = (UdpPacket)ipPacket.PayloadPacket;
|
||||||
|
|
||||||
var request = Request.FromArray(udpPacket.PayloadData);
|
var request = Request.FromArray(udpPacket.PayloadData);
|
||||||
|
if (request.OperationCode != OperationCode.Query)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var question = request.Questions.FirstOrDefault();
|
var question = request.Questions.FirstOrDefault();
|
||||||
if (question == null || question.Type != RecordType.A)
|
if (question == null || question.Type != RecordType.A)
|
||||||
{
|
{
|
||||||
@ -175,6 +182,16 @@ namespace FastGithub.Dns
|
|||||||
// 修改数据内容和数据长度
|
// 修改数据内容和数据长度
|
||||||
packet.Bytes.CopyTo(packetBuffer, 0);
|
packet.Bytes.CopyTo(packetBuffer, 0);
|
||||||
packetLength = (uint)packet.Bytes.Length;
|
packetLength = (uint)packet.Bytes.Length;
|
||||||
|
|
||||||
|
// 反转方向
|
||||||
|
if (winDivertAddress.Direction == WinDivertDirection.Inbound)
|
||||||
|
{
|
||||||
|
winDivertAddress.Direction = WinDivertDirection.Outbound;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
winDivertAddress.Direction = WinDivertDirection.Inbound;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
using DNS.Client.RequestResolver;
|
using DNS.Client;
|
||||||
|
using DNS.Client.RequestResolver;
|
||||||
using DNS.Protocol;
|
using DNS.Protocol;
|
||||||
using DNS.Protocol.ResourceRecords;
|
using DNS.Protocol.ResourceRecords;
|
||||||
using FastGithub.Configuration;
|
using FastGithub.Configuration;
|
||||||
@ -178,7 +179,11 @@ namespace FastGithub.DomainResolve
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var request = new Request();
|
var request = new Request
|
||||||
|
{
|
||||||
|
RecursionDesired = true,
|
||||||
|
OperationCode = OperationCode.Query
|
||||||
|
};
|
||||||
request.Questions.Add(new Question(new Domain(domain.Host), RecordType.A));
|
request.Questions.Add(new Question(new Domain(domain.Host), RecordType.A));
|
||||||
|
|
||||||
using var timeoutTokenSource = new CancellationTokenSource(this.lookupTimeout);
|
using var timeoutTokenSource = new CancellationTokenSource(this.lookupTimeout);
|
||||||
@ -288,7 +293,8 @@ namespace FastGithub.DomainResolve
|
|||||||
|
|
||||||
public Task<IResponse> Resolve(IRequest request, CancellationToken cancellationToken = default)
|
public Task<IResponse> Resolve(IRequest request, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
return this.resolver.Resolve(request, cancellationToken);
|
var clientRequest = new ClientRequest(this.resolver, request);
|
||||||
|
return clientRequest.Resolve(cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user