dns日志
This commit is contained in:
parent
82e51ab358
commit
2b716eaef7
@ -22,7 +22,7 @@ namespace FastGithub.Dns
|
|||||||
private const string DNS_FILTER = "udp.DstPort == 53";
|
private const string DNS_FILTER = "udp.DstPort == 53";
|
||||||
private readonly FastGithubConfig fastGithubConfig;
|
private readonly FastGithubConfig fastGithubConfig;
|
||||||
private readonly ILogger<DnsInterceptor> logger;
|
private readonly ILogger<DnsInterceptor> logger;
|
||||||
private readonly TimeSpan ttl = TimeSpan.FromMinutes(1d);
|
private readonly TimeSpan ttl = TimeSpan.FromMinutes(2d);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 刷新DNS缓存
|
/// 刷新DNS缓存
|
||||||
@ -118,14 +118,14 @@ namespace FastGithub.Dns
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 反转ip
|
// 反转ip
|
||||||
var sourceAddress = ipPacket.SourceAddress;
|
var destAddress = ipPacket.DestinationAddress;
|
||||||
ipPacket.SourceAddress = ipPacket.DestinationAddress;
|
ipPacket.DestinationAddress = ipPacket.SourceAddress;
|
||||||
ipPacket.DestinationAddress = sourceAddress;
|
ipPacket.SourceAddress = destAddress;
|
||||||
|
|
||||||
// 反转端口
|
// 反转端口
|
||||||
var sourcePort = udpPacket.SourcePort;
|
var destPort = udpPacket.DestinationPort;
|
||||||
udpPacket.SourcePort = udpPacket.DestinationPort;
|
udpPacket.DestinationPort = udpPacket.SourcePort;
|
||||||
udpPacket.DestinationPort = sourcePort;
|
udpPacket.SourcePort = destPort;
|
||||||
|
|
||||||
// 设置dns响应
|
// 设置dns响应
|
||||||
var response = Response.FromRequest(request);
|
var response = Response.FromRequest(request);
|
||||||
@ -146,6 +146,8 @@ namespace FastGithub.Dns
|
|||||||
{
|
{
|
||||||
winDivertAddress.Direction = WinDivertDirection.Inbound;
|
winDivertAddress.Direction = WinDivertDirection.Inbound;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.logger.LogInformation($"已拦截dns查询{domain}并伪造响应内容为{IPAddress.Loopback}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -49,26 +49,11 @@ namespace FastGithub.HttpServer
|
|||||||
{
|
{
|
||||||
if (context.Request.Method == HttpMethods.Get && context.Request.Path == "/proxy.pac")
|
if (context.Request.Method == HttpMethods.Get && context.Request.Path == "/proxy.pac")
|
||||||
{
|
{
|
||||||
var buidler = new StringBuilder();
|
|
||||||
buidler.AppendLine("function FindProxyForURL(url, host){");
|
|
||||||
buidler.AppendLine($" var proxy = 'PROXY {context.Request.Host}';");
|
|
||||||
foreach (var domain in this.fastGithubConfig.GetDomainPatterns())
|
|
||||||
{
|
|
||||||
buidler.AppendLine($" if (shExpMatch(host, '{domain}')) return proxy;");
|
|
||||||
}
|
|
||||||
buidler.AppendLine(" return 'DIRECT';");
|
|
||||||
buidler.AppendLine("}");
|
|
||||||
var pacString = buidler.ToString();
|
|
||||||
|
|
||||||
context.Response.ContentType = "application/x-ns-proxy-autoconfig";
|
context.Response.ContentType = "application/x-ns-proxy-autoconfig";
|
||||||
|
var pacString = this.GetProxyPacString(context);
|
||||||
await context.Response.WriteAsync(pacString);
|
await context.Response.WriteAsync(pacString);
|
||||||
}
|
}
|
||||||
else if (context.Request.Method != HttpMethods.Connect)
|
else if (context.Request.Method == HttpMethods.Connect)
|
||||||
{
|
|
||||||
var destinationPrefix = $"{context.Request.Scheme}://{context.Request.Host}";
|
|
||||||
await this.httpForwarder.SendAsync(context, destinationPrefix, this.httpClient);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
var endpoint = await this.GetTargetEndPointAsync(context.Request);
|
var endpoint = await this.GetTargetEndPointAsync(context.Request);
|
||||||
using var targetSocket = new Socket(SocketType.Stream, ProtocolType.Tcp);
|
using var targetSocket = new Socket(SocketType.Stream, ProtocolType.Tcp);
|
||||||
@ -87,6 +72,31 @@ namespace FastGithub.HttpServer
|
|||||||
await Task.WhenAny(task1, task2);
|
await Task.WhenAny(task1, task2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var destinationPrefix = $"{context.Request.Scheme}://{context.Request.Host}";
|
||||||
|
await this.httpForwarder.SendAsync(context, destinationPrefix, this.httpClient);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取proxypac脚本
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private string GetProxyPacString(HttpContext context)
|
||||||
|
{
|
||||||
|
var buidler = new StringBuilder();
|
||||||
|
buidler.AppendLine("function FindProxyForURL(url, host){");
|
||||||
|
buidler.AppendLine($" var proxy = 'PROXY {context.Request.Host}';");
|
||||||
|
foreach (var domain in this.fastGithubConfig.GetDomainPatterns())
|
||||||
|
{
|
||||||
|
buidler.AppendLine($" if (shExpMatch(host, '{domain}')) return proxy;");
|
||||||
|
}
|
||||||
|
buidler.AppendLine(" return 'DIRECT';");
|
||||||
|
buidler.AppendLine("}");
|
||||||
|
return buidler.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -105,12 +115,13 @@ namespace FastGithub.HttpServer
|
|||||||
return new IPEndPoint(address, targetPort);
|
return new IPEndPoint(address, targetPort);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 不关心的域名,直接使用系统dns
|
||||||
if (this.fastGithubConfig.IsMatch(targetHost) == false)
|
if (this.fastGithubConfig.IsMatch(targetHost) == false)
|
||||||
{
|
{
|
||||||
return new DnsEndPoint(targetHost, targetPort);
|
return new DnsEndPoint(targetHost, targetPort);
|
||||||
}
|
}
|
||||||
|
|
||||||
// https,走反向代理中间人
|
// 目标端口为443,走https代理中间人
|
||||||
if (targetPort == HTTPS_PORT)
|
if (targetPort == HTTPS_PORT)
|
||||||
{
|
{
|
||||||
return new IPEndPoint(IPAddress.Loopback, HttpsReverseProxyPort.Value);
|
return new IPEndPoint(IPAddress.Loopback, HttpsReverseProxyPort.Value);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user