This commit is contained in:
老九 2021-10-31 10:52:48 +08:00
parent 977694eaa8
commit e478f0855c
3 changed files with 30 additions and 25 deletions

View File

@ -22,7 +22,7 @@ namespace FastGithub.PacketIntercept.Dns
[SupportedOSPlatform("windows")]
sealed class DnsInterceptor : IDnsInterceptor
{
private const string DNS_FILTER = "ip and udp.DstPort == 53";
private const string DNS_FILTER = "udp.DstPort == 53";
private readonly FastGithubConfig fastGithubConfig;
private readonly ILogger<DnsInterceptor> logger;
@ -129,7 +129,7 @@ namespace FastGithub.PacketIntercept.Dns
}
var question = request.Questions.First();
if (question.Type != RecordType.A)
if (question.Type != RecordType.A && question.Type != RecordType.AAAA)
{
return;
}
@ -142,8 +142,11 @@ namespace FastGithub.PacketIntercept.Dns
// dns响应数据
var response = Response.FromRequest(request);
var record = new IPAddressResourceRecord(domain, IPAddress.Loopback, this.ttl);
response.AnswerRecords.Add(record);
if (question.Type == RecordType.A)
{
var record = new IPAddressResourceRecord(domain, IPAddress.Loopback, this.ttl);
response.AnswerRecords.Add(record);
}
var responsePayload = response.ToArray();
// 修改payload和包长
@ -151,10 +154,21 @@ namespace FastGithub.PacketIntercept.Dns
packetLength = (uint)((int)packetLength + responsePayload.Length - requestPayload.Length);
// 修改ip包
var destAddress = packet.IPv4Header->DstAddr;
packet.IPv4Header->DstAddr = packet.IPv4Header->SrcAddr;
packet.IPv4Header->SrcAddr = destAddress;
packet.IPv4Header->Length = (ushort)packetLength;
IPAddress destAddress;
if (packet.IPv4Header != null)
{
destAddress = packet.IPv4Header->DstAddr;
packet.IPv4Header->DstAddr = packet.IPv4Header->SrcAddr;
packet.IPv4Header->SrcAddr = destAddress;
packet.IPv4Header->Length = (ushort)packetLength;
}
else
{
destAddress = packet.IPv6Header->DstAddr;
packet.IPv6Header->DstAddr = packet.IPv6Header->SrcAddr;
packet.IPv6Header->SrcAddr = destAddress;
packet.IPv6Header->Length = (ushort)packetLength;
}
// 修改udp包
var destPort = packet.UdpHeader->DstPort;

View File

@ -31,7 +31,7 @@ namespace FastGithub.UI
public List<string> Labels { get; } = new List<string>();
public Func<double, string> YFormatter { get; } = value => $"{value:0.00}KB/s";
public Func<double, string> YFormatter { get; } = value => $"{FlowRate.ToNetworkSizeString((long)value)}/s";
public FlowChart()
{
@ -69,11 +69,11 @@ namespace FastGithub.UI
var json = await response.EnsureSuccessStatusCode().Content.ReadAsStringAsync();
var flowRate = Newtonsoft.Json.JsonConvert.DeserializeObject<FlowRate>(json);
this.textBlockRead.Text = flowRate.ToTotalReadString();
this.textBlockWrite.Text = flowRate.ToTotalWriteString();
this.textBlockRead.Text = FlowRate.ToNetworkSizeString(flowRate.TotalRead);
this.textBlockWrite.Text = FlowRate.ToNetworkSizeString(flowRate.TotalWrite);
this.readSeries.Values.Add(flowRate.ReadRate / 1024);
this.writeSeries.Values.Add(flowRate.WriteRate / 1024);
this.readSeries.Values.Add(flowRate.ReadRate);
this.writeSeries.Values.Add(flowRate.WriteRate);
this.Labels.Add(DateTime.Now.ToString("HH:mm:ss"));
if (this.Labels.Count > 60)

View File

@ -14,19 +14,10 @@
public double ReadRate { get; set; }
public double WriteRate { get; set; }
public double WriteRate { get; set; }
public string ToTotalReadString()
{
return ToNetworkString(this.TotalRead);
}
public string ToTotalWriteString()
{
return ToNetworkString(this.TotalWrite);
}
private static string ToNetworkString(long value)
public static string ToNetworkSizeString(long value)
{
if (value < 1024)
{