From 05a712e6b1139297fc3ec34e8e18f24fc3806aa5 Mon Sep 17 00:00:00 2001 From: M Sasan MH Date: Mon, 31 Jul 2023 20:31:40 +0430 Subject: [PATCH] v2.3.5 --- CheckDotNet.bat | 80 + MsmhTools/CustomControls/CustomProgressBar.cs | 137 +- MsmhTools/MsmhTools.csproj | 2 +- .../MsmhTools/DnsTool/DNSCryptConfigEditor.cs | 19 +- MsmhTools/MsmhTools/DnsTool/DnsReader.cs | 72 +- MsmhTools/MsmhTools/Extensions.cs | 5 + .../MsmhTools/HTTPProxyServer/CommonTools.cs | 40 +- .../MsmhTools/HTTPProxyServer/DPIBypass.cs | 83 +- .../HTTPProxyServer/HTTPProxyServer.cs | 90 +- .../HTTPProxyServer/HTTPProxyServerProgram.cs | 47 +- .../MsmhTools/HTTPProxyServer/Request.cs | 5 + MsmhTools/MsmhTools/HTTPProxyServer/Tunnel.cs | 83 +- MsmhTools/MsmhTools/Info.cs | 26 + MsmhTools/MsmhTools/Network.cs | 2 +- MsmhTools/MsmhTools/SniModifire.cs | 453 ++++ MsmhTools/MsmhTools/SniReader.cs | 203 +- SDCHttpProxy/Program.cs | 76 +- .../PublishProfiles/FolderProfile.pubxml.user | 2 +- SDCHttpProxy/SDCHttpProxy.csproj | 2 +- SecureDNSClient/Forms/Certificate.cs | 81 + SecureDNSClient/Forms/CheckServers.cs | 112 +- SecureDNSClient/Forms/Connect.cs | 52 +- SecureDNSClient/Forms/ConnectToFakeProxy.cs | 23 +- .../Forms/ConnectToServersUsingProxy.cs | 6 +- .../Forms/ConnectToWorkingServers.cs | 4 - .../Forms/FormDnsLookup.Designer.cs | 17 + SecureDNSClient/Forms/FormDnsLookup.cs | 15 +- SecureDNSClient/Forms/FormIpScanner.cs | 2 +- SecureDNSClient/Forms/FormMain.Designer.cs | 254 +- SecureDNSClient/Forms/FormMain.cs | 2168 ++--------------- SecureDNSClient/Forms/FormMain.resx | 3 + SecureDNSClient/Forms/GoodbyeDPI.cs | 81 +- SecureDNSClient/Forms/Methods.cs | 468 ++++ SecureDNSClient/Forms/SavedDnsServers.cs | 406 +++ SecureDNSClient/Forms/SetDNS.cs | 67 +- SecureDNSClient/Forms/SetProxy.cs | 4 - SecureDNSClient/Forms/Share.cs | 255 +- .../Forms/TryToBypassFPUsingGoodbyeDPI.cs | 68 +- .../Forms/TryToBypassFPUsingProxyDPI.cs | 122 +- SecureDNSClient/Forms/UpdateStatusAuto.cs | 713 ++++++ .../NecessaryFiles/Resource1.Designer.cs | 2 +- .../NecessaryFiles/SDCHttpProxy.exe | Bin 1482049 -> 1495873 bytes SecureDNSClient/NecessaryFiles/versions.txt | 2 +- .../PublishProfiles/FolderProfile.pubxml.user | 2 +- .../Properties/Resources.Designer.cs | 20 + SecureDNSClient/Properties/Resources.resx | 6 + SecureDNSClient/Resources/Farvahar.png | Bin 0 -> 257672 bytes SecureDNSClient/Resources/FarvaharBlueRed.png | Bin 0 -> 238748 bytes .../Resources/FarvaharBlueRed128x60.png | Bin 0 -> 6716 bytes .../SecureDNS/CamouflageDNSServer.cs | 91 +- SecureDNSClient/SecureDNS/CheckDns.cs | 503 ++++ SecureDNSClient/SecureDNS/SecureDNS.cs | 291 +-- SecureDNSClient/SecureDNSClient.csproj | 6 +- SecureDNSClient/SecureDNSClient.csproj.user | 12 + .../PublishProfiles/FolderProfile.pubxml.user | 2 +- .../SecureDNSClientPortable.csproj | 2 +- 56 files changed, 4372 insertions(+), 2915 deletions(-) create mode 100644 CheckDotNet.bat create mode 100644 MsmhTools/MsmhTools/SniModifire.cs create mode 100644 SecureDNSClient/Forms/Certificate.cs create mode 100644 SecureDNSClient/Forms/Methods.cs create mode 100644 SecureDNSClient/Forms/SavedDnsServers.cs create mode 100644 SecureDNSClient/Forms/UpdateStatusAuto.cs create mode 100644 SecureDNSClient/Resources/Farvahar.png create mode 100644 SecureDNSClient/Resources/FarvaharBlueRed.png create mode 100644 SecureDNSClient/Resources/FarvaharBlueRed128x60.png create mode 100644 SecureDNSClient/SecureDNS/CheckDns.cs diff --git a/CheckDotNet.bat b/CheckDotNet.bat new file mode 100644 index 0000000..6b910c4 --- /dev/null +++ b/CheckDotNet.bat @@ -0,0 +1,80 @@ +mode con cols=100 lines=20 +@echo OFF & color 1F +:START +title Check .Net 6 Runtime Installation - MSasanMH +REM SETLOCAL: ensure the lifetime of the environment will end with the termination of the batch. +SETLOCAL EnableExtensions EnableDelayedExpansion + +REM =============== Get Current Path: +pushd %~dp0 +set CurrentPath=%CD% +popd + +REM =============== Get System Architecture: +REG Query "HKLM\Hardware\Description\System\CentralProcessor\0" >NUL 2>&1 +IF %ERRORLEVEL% EQU 0 ( +REG Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > NUL && SET sArchitecture=x86 || SET sArchitecture=x64 +) ELSE ( +REM Default Architecture if reading registry failed: +SET sArchitecture=x64 +) + +:Check +IF !sArchitecture! == x64 ( + IF NOT EXIST "%HomeDrive%\Program Files\dotnet\dotnet.exe" GOTO :NotInstalledX64 + IF NOT EXIST "%HomeDrive%\Program Files (x86)\dotnet\dotnet.exe" GOTO :NotInstalledX86 + + start /b /wait "" "%HomeDrive%\Program Files\dotnet\dotnet.exe" --list-runtimes >"%CurrentPath%\tmp.txt" + SET CheckNet64=false + for /f "tokens=*" %%a in ('find /I "Microsoft.WindowsDesktop.App 6" ^< "%CurrentPath%\tmp.txt"') do ( + SET CheckNet64=true + ) + IF !CheckNet64! == false GOTO :NotInstalledX64 + + start /b /wait "" "%HomeDrive%\Program Files (x86)\dotnet\dotnet.exe" --list-runtimes >"%CurrentPath%\tmp.txt" + SET CheckNet86=false + for /f "tokens=*" %%a in ('find /I "Microsoft.WindowsDesktop.App 6" ^< "%CurrentPath%\tmp.txt"') do ( + SET CheckNet86=true + ) + IF !CheckNet86! == false GOTO :NotInstalledX86 + +) ELSE IF !sArchitecture! == x86 ( + IF NOT EXIST "%HomeDrive%\Program Files\dotnet\dotnet.exe" GOTO :NotInstalledX86 + + start /b /wait "" "%HomeDrive%\Program Files\dotnet\dotnet.exe" --list-runtimes >"%CurrentPath%\tmp.txt" + SET CheckNet=false + for /f "tokens=*" %%a in ('find /I "Microsoft.WindowsDesktop.App 6" ^< "%CurrentPath%\tmp.txt"') do ( + SET CheckNet=true + ) + IF !CheckNet! == false GOTO :NotInstalledX86 + +) + +:Installed +ECHO. +ECHO All requirements are installed. +ECHO. +GOTO :Exit + +:NotInstalledX64 +ECHO. +ECHO .NET Desktop Runtime v6 x64 is Not Installed. +ECHO. +GOTO :DownloadNet + +:NotInstalledX86 +ECHO. +ECHO .NET Desktop Runtime v6 x86 is Not Installed. +ECHO. +GOTO :DownloadNet + +:DownloadNet +ECHO Download: +ECHO https://dotnet.microsoft.com/en-us/download/dotnet/6.0 +ECHO. +GOTO :Exit + +:Exit +IF EXIST "%CurrentPath%\tmp.txt" DEL /F /Q "%CurrentPath%\tmp.txt" >nul 2>&1 +EndLocal +Pause diff --git a/MsmhTools/CustomControls/CustomProgressBar.cs b/MsmhTools/CustomControls/CustomProgressBar.cs index a3401a9..73ea2f6 100644 --- a/MsmhTools/CustomControls/CustomProgressBar.cs +++ b/MsmhTools/CustomControls/CustomProgressBar.cs @@ -1,5 +1,6 @@ using MsmhTools; using System.ComponentModel; +using System.Diagnostics; using System.Drawing.Drawing2D; using System.Windows.Forms.Design; /* @@ -18,7 +19,7 @@ public class CustomProgressBar : ProgressBar [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public new event EventHandler? RightToLeftLayoutChanged; - private Color mBorderColor = Color.Red; + private Color mBorderColor = Color.Blue; [EditorBrowsable(EditorBrowsableState.Always), Browsable(true)] [Editor(typeof(WindowsFormsComponentEditor), typeof(Color))] [Category("Appearance"), Description("Border Color")] @@ -35,6 +36,22 @@ public Color BorderColor } } + private int mRoundedCorners = 0; + [EditorBrowsable(EditorBrowsableState.Always), Browsable(true)] + [Category("Appearance"), Description("Rounded Corners")] + public int RoundedCorners + { + get { return mRoundedCorners; } + set + { + if (mRoundedCorners != value) + { + mRoundedCorners = value; + Invalidate(); + } + } + } + private Color mChunksColor = Color.LightBlue; [EditorBrowsable(EditorBrowsableState.Always), Browsable(true)] [Editor(typeof(WindowsFormsComponentEditor), typeof(Color))] @@ -84,26 +101,11 @@ public override Font Font } } - private DateTime? mStartTime = null; - [EditorBrowsable(EditorBrowsableState.Always), Browsable(true)] - [Category("Appearance"), Description("Set Start Time Programmatically (Optional)")] - public DateTime? StartTime - { - get { return mStartTime; } - set - { - if (mStartTime != value) - { - mStartTime = value; - Invalidate(); - } - } - } + public bool StopTimer { get; set; } = false; + private readonly Stopwatch StopWatch = new(); private static bool ApplicationIdle = false; - private TimeSpan elapsedTime; - private string? elapsedTimeString; - private int once = 0; + private string ElapsedTimeString = string.Empty; private bool onceIV = true; public CustomProgressBar() : base() @@ -183,7 +185,8 @@ protected override void OnPaint(PaintEventArgs e) else chunksColorGradient = chunksColor.ChangeBrightness(-0.5f); - Rectangle rect = ClientRectangle; + //Rectangle rect = ClientRectangle; + Rectangle rect = new(0, 0, ClientRectangle.Width - 1, ClientRectangle.Height - 1); Graphics g = e.Graphics; // Draw horizontal bar (Background and Border) With Default System Color: //ProgressBarRenderer.DrawHorizontalBar(g, rect); @@ -191,10 +194,19 @@ protected override void OnPaint(PaintEventArgs e) // Draw horizontal bar (Background and Border) With Custom Color: // Fill Background using SolidBrush bgBrush = new(backColor); - g.FillRectangle(bgBrush, rect); + g.FillRoundedRectangle(bgBrush, rect, RoundedCorners, RoundedCorners, RoundedCorners, RoundedCorners); // Draw Border - ControlPaint.DrawBorder(g, rect, borderColor, ButtonBorderStyle.Solid); + using Pen penB = new(borderColor); + g.DrawRoundedRectangle(penB, rect, RoundedCorners, RoundedCorners, RoundedCorners, RoundedCorners); + + // Min + if (Value == Minimum) + { + if (!StopWatch.IsRunning) StopWatch.Start(); + StopWatch.Restart(); + return; + } // Padding if (Value > 0) @@ -205,30 +217,32 @@ protected override void OnPaint(PaintEventArgs e) // Draw Chunks By Custom Color: // The Following Is The Width Of The Bar. This Will Vary With Each Value. - int fillWidth = Width * Value / (Maximum - Minimum); + int fillWidth = rect.Width * Value / (Maximum - Minimum); // GDI+ Doesn't Like Rectangles 0px Wide or Height if (fillWidth == 0) { // Draw Only Border And Exit - ControlPaint.DrawBorder(g, rect, borderColor, ButtonBorderStyle.Solid); + g.DrawRoundedRectangle(penB, rect, RoundedCorners, RoundedCorners, RoundedCorners, RoundedCorners); return; } // Rectangles For Upper And Lower Half Of Bar - Rectangle topRect = new(0, 0, fillWidth, Height / 2); - Rectangle buttomRect = new(0, Height / 2, fillWidth, Height / 2); + int y = Value < 2 ? 1 : 0; + Rectangle topRect = new(0, y, fillWidth, (rect.Height / 2) + 1 - y); // +1 to avoid "having a dark line in the middle of the bar" + Rectangle buttomRect = new(0, (rect.Height / 2) - y, fillWidth, (rect.Height / 2) - y); // Paint Upper Half - using LinearGradientBrush gbUH = new(new Point(0, 0), new Point(0, Height / 2), chunksColorGradient, chunksColor); - e.Graphics.FillRectangle(gbUH, topRect); + int right = Value < RoundedCorners ? Value : RoundedCorners; + using LinearGradientBrush gbUH = new(new Point(topRect.X, topRect.Y), new Point(topRect.X, topRect.Height), chunksColorGradient, chunksColor); + g.FillRoundedRectangle(gbUH, topRect, RoundedCorners, right, 0, 0); // Paint Lower Half - // (this.Height/2 - 1 Because There Would Be A Dark Line In The Middle Of The Bar) - using LinearGradientBrush gbLH = new(new Point(0, Height / 2 - 1), new Point(0, Height), chunksColor, chunksColorGradient); - e.Graphics.FillRectangle(gbLH, buttomRect); + // -1 to avoid "out of memory exception" + using LinearGradientBrush gbLH = new(new Point(buttomRect.X, buttomRect.Y - 1), new Point(buttomRect.X, buttomRect.Height), chunksColor, chunksColorGradient); + g.FillRoundedRectangle(gbLH, buttomRect, 0, 0, right, RoundedCorners); // Paint Border - ControlPaint.DrawBorder(g, rect, borderColor, ButtonBorderStyle.Solid); + g.DrawRoundedRectangle(penB, rect, RoundedCorners, RoundedCorners, RoundedCorners, RoundedCorners); } // Compute Percent @@ -267,42 +281,35 @@ protected override void OnPaint(PaintEventArgs e) g.DrawString(CustomText, Font, brush, locationCustomTextRight); } } - + // Compute Elapsed Time - if (StartTime.HasValue == true) + if (StopTimer && StopWatch.IsRunning) StopWatch.Stop(); + + ElapsedTimeString = timer(); + + // Max + if (Value == Maximum) { - if (percent == 0) - { - elapsedTime = new(0, 0, 0, 0, 0); - elapsedTimeString = string.Empty; - } - else if (1 < percent && percent < 100) - { - elapsedTime = (TimeSpan)(DateTime.Now - StartTime); - elapsedTimeString = string.Format(@"Time: {0:00}:{1:00}:{2:000}", elapsedTime.Minutes, elapsedTime.Seconds, Math.Round((double)elapsedTime.Milliseconds / 10)); - once = 0; - } - else if (percent == 100) - { - if (once == 0) - { - elapsedTime = (TimeSpan)(DateTime.Now - StartTime); - elapsedTimeString = string.Format(@"Time: {0:00}:{1:00}:{2:000}", elapsedTime.Minutes, elapsedTime.Seconds, Math.Round((double)elapsedTime.Milliseconds / 10)); - once++; - } - } + if (StopWatch.IsRunning) StopWatch.Stop(); + } - SizeF lenElapsedTime = g.MeasureString(elapsedTimeString, Font); - if (RightToLeft == RightToLeft.No) - { - Point locationElapsedTimeRight = new(Convert.ToInt32(Width - lenElapsedTime.Width - 5), Convert.ToInt32((Height / 2) - lenElapsedTime.Height / 2)); - g.DrawString(elapsedTimeString, Font, brush, locationElapsedTimeRight); - } - else - { - Point locationElapsedTimeLeft = new(5, Convert.ToInt32((Height / 2) - lenElapsedTime.Height / 2)); - g.DrawString(elapsedTimeString, Font, brush, locationElapsedTimeLeft); - } + string timer() + { + TimeSpan eTime = StopWatch.Elapsed; + eTime = TimeSpan.FromMilliseconds(Math.Round(eTime.TotalMilliseconds, 1)); + return $"Time: {eTime:hh\\:mm\\:ss\\.f}"; + } + + SizeF lenElapsedTime = g.MeasureString(ElapsedTimeString, Font); + if (RightToLeft == RightToLeft.No) + { + Point locationElapsedTimeRight = new(Convert.ToInt32(Width - lenElapsedTime.Width - 5), Convert.ToInt32((Height / 2) - lenElapsedTime.Height / 2)); + g.DrawString(ElapsedTimeString, Font, brush, locationElapsedTimeRight); + } + else + { + Point locationElapsedTimeLeft = new(5, Convert.ToInt32((Height / 2) - lenElapsedTime.Height / 2)); + g.DrawString(ElapsedTimeString, Font, brush, locationElapsedTimeLeft); } } diff --git a/MsmhTools/MsmhTools.csproj b/MsmhTools/MsmhTools.csproj index 8f7a45c..277c668 100644 --- a/MsmhTools/MsmhTools.csproj +++ b/MsmhTools/MsmhTools.csproj @@ -6,7 +6,7 @@ enable true enable - $(VersionPrefix)1.1.0 + $(VersionPrefix)1.2.0 $(Authors)MSasanMH MSasanMH diff --git a/MsmhTools/MsmhTools/DnsTool/DNSCryptConfigEditor.cs b/MsmhTools/MsmhTools/DnsTool/DNSCryptConfigEditor.cs index be293eb..b7d8d5d 100644 --- a/MsmhTools/MsmhTools/DnsTool/DNSCryptConfigEditor.cs +++ b/MsmhTools/MsmhTools/DnsTool/DNSCryptConfigEditor.cs @@ -191,7 +191,7 @@ public void DisableDoH() } } - public void ChangePersonalServer(string sdns) + public void ChangePersonalServer(string[] sdns) { string sectionName = "[static]"; string keyName = "stamp"; @@ -209,15 +209,20 @@ public void ChangePersonalServer(string sdns) { ConfigList.RemoveRange(n + 1, ConfigList.Count - (n + 1)); } - + // e.g. [static.Personal] // e.g. stamp = 'sdns://AgcAAAAAAAAABzEuMC4wLjEAEmRucy5jbG91ZGZsYXJlLmNvbQovZG5zLXF1ZXJ5' - string newLine1 = "[static.Personal]"; - string newLine2 = $"{keyName} = '{sdns}'"; - ConfigList.Add(string.Empty); - ConfigList.Add(newLine1); - ConfigList.Add(newLine2); + for (int i = 0; i < sdns.Length; i++) + { + ConfigList.Add(string.Empty); + string newLine1 = $"[static.Personal{i + 1}]"; + ConfigList.Add(newLine1); + string sdnsOne = sdns[i]; + string newLine2 = $"{keyName} = '{sdnsOne}'"; + ConfigList.Add(newLine2); + } + break; } } diff --git a/MsmhTools/MsmhTools/DnsTool/DnsReader.cs b/MsmhTools/MsmhTools/DnsTool/DnsReader.cs index e0b3ee2..446afd6 100644 --- a/MsmhTools/MsmhTools/DnsTool/DnsReader.cs +++ b/MsmhTools/MsmhTools/DnsTool/DnsReader.cs @@ -1,9 +1,5 @@ using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; using System.Net; -using System.Text; namespace MsmhTools.DnsTool { @@ -95,31 +91,21 @@ public DnsReader(string dns, string? companyNameDataFileContent) Protocol = DnsProtocol.DoQ; ProtocolName = DnsProtocolName.DoQ; } + else if (dns.ToLower().StartsWith("tcp://") || dns.ToLower().StartsWith("udp://")) + { + // Plain DNS + SetIpPortHostPath(dns, 53); + + Protocol = DnsProtocol.PlainDNS; + ProtocolName = DnsProtocolName.PlainDNS; + } else { - if (dns.Contains(':')) - { - string[] split = dns.Split(':'); - string ip = split[0]; - string port = split[1]; - if (Network.IsIPv4Valid(ip, out IPAddress _)) - { - if (!string.IsNullOrEmpty(port)) - { - bool isPortValid = int.TryParse(port, out int outPort); - if (isPortValid && outPort >= 1 && outPort <= 65535) - { - // Plain DNS - IP = ip; - if (!string.IsNullOrEmpty(CompanyNameDataFileContent)) - CompanyName = GetCompanyName(ip, CompanyNameDataFileContent); - Port = outPort; - Protocol = DnsProtocol.PlainDNS; - ProtocolName = DnsProtocolName.PlainDNS; - } - } - } - } + // Plain DNS + SetIpPortHost(dns, 53); + + Protocol = DnsProtocol.PlainDNS; + ProtocolName = DnsProtocolName.PlainDNS; } } } @@ -142,7 +128,37 @@ private void SetIpPortHostPath(string dns, int defaultPort) IP = ip.ToString(); } if (!string.IsNullOrEmpty(CompanyNameDataFileContent)) - CompanyName = GetCompanyName(host, CompanyNameDataFileContent); + { + string? ipOrHost = Host; + if (string.IsNullOrEmpty(ipOrHost)) ipOrHost = IP; + if (string.IsNullOrEmpty(ipOrHost)) ipOrHost = host; + CompanyName = GetCompanyName(ipOrHost, CompanyNameDataFileContent); + } + } + + private void SetIpPortHost(string hostIpPort, int defaultPort) + { + Network.GetHostDetails(hostIpPort, defaultPort, out string host, out int port, out string _, out bool isIPv6); + Port = port; + bool isIPv4 = Network.IsIPv4Valid(host, out IPAddress? _); + if (isIPv6 || isIPv4) + { + IP = host; + } + else + { + Host = host; + IPAddress? ip = Network.HostToIP(host); + if (ip != null) + IP = ip.ToString(); + } + if (!string.IsNullOrEmpty(CompanyNameDataFileContent)) + { + string? ipOrHost = Host; + if (string.IsNullOrEmpty(ipOrHost)) ipOrHost = IP; + if (string.IsNullOrEmpty(ipOrHost)) ipOrHost = host; + CompanyName = GetCompanyName(ipOrHost, CompanyNameDataFileContent); + } } private static string GetCompanyName(string host, string fileContent) diff --git a/MsmhTools/MsmhTools/Extensions.cs b/MsmhTools/MsmhTools/Extensions.cs index 2919cbb..89dd8ea 100644 --- a/MsmhTools/MsmhTools/Extensions.cs +++ b/MsmhTools/MsmhTools/Extensions.cs @@ -23,6 +23,11 @@ public static class Methods } public static class Extensions { + //----------------------------------------------------------------------------------- + public static TimeSpan Round(this TimeSpan timeSpan, int precision) + { + return TimeSpan.FromSeconds(Math.Round(timeSpan.TotalSeconds, precision)); + } //----------------------------------------------------------------------------------- public static void AppendText(this RichTextBox richTextBox, string text, Color color) { diff --git a/MsmhTools/MsmhTools/HTTPProxyServer/CommonTools.cs b/MsmhTools/MsmhTools/HTTPProxyServer/CommonTools.cs index 77d6cab..ce801b1 100644 --- a/MsmhTools/MsmhTools/HTTPProxyServer/CommonTools.cs +++ b/MsmhTools/MsmhTools/HTTPProxyServer/CommonTools.cs @@ -30,7 +30,7 @@ internal static async Task IsIpBlocked(string ip, int port, int timeoutMS) bool canConnect; try { - canConnect = await CanConnect(false, ip, port, timeoutMS); + canConnect = await CanConnect(ip, port, timeoutMS); } catch (Exception) { @@ -66,7 +66,7 @@ internal static async Task IsHostBlockedBySNI(string host, int port, int t bool canConnect; try { - canConnect = await CanConnect(true, host, port, timeoutMS); + canConnect = await CanConnect(host, port, timeoutMS); } catch (Exception) { @@ -125,19 +125,25 @@ private static async Task CanTcpConnect(string host, int port, int timeout return false; } - private static async Task CanConnect(bool https, string host, int port, int timeoutMS) + public static async Task CanConnect(string host, int port, int timeoutMS) { var task = Task.Run(async () => { try { - string url; - if (https) url = $"https://{host}:{port}"; - else url = $"http://{host}"; + string url = $"https://{host}:{port}"; + if (port == 80) url = $"http://{host}"; Uri uri = new(url, UriKind.Absolute); - using HttpClient httpClient = new(); + // Ignore Cert + using HttpClientHandler handler = new(); + handler.ClientCertificateOptions = ClientCertificateOption.Manual; + handler.ServerCertificateCustomValidationCallback = + (httpRequestMessage, cert, cetChain, policyErrors) => true; + using HttpClient httpClient = new(handler); + + //using HttpClient httpClient = new(); httpClient.Timeout = TimeSpan.FromMilliseconds(timeoutMS); await httpClient.GetAsync(uri); @@ -145,6 +151,26 @@ private static async Task CanConnect(bool https, string host, int port, in } catch (Exception) { + try + { + if (port != 80) + { + string url = $"http://{host}"; + + Uri uri = new(url, UriKind.Absolute); + + using HttpClient httpClient = new(); + httpClient.Timeout = TimeSpan.FromMilliseconds(timeoutMS); + + await httpClient.GetAsync(uri); + return true; + } + } + catch (Exception) + { + return false; + } + return false; } }); diff --git a/MsmhTools/MsmhTools/HTTPProxyServer/DPIBypass.cs b/MsmhTools/MsmhTools/HTTPProxyServer/DPIBypass.cs index af487e6..13bf33a 100644 --- a/MsmhTools/MsmhTools/HTTPProxyServer/DPIBypass.cs +++ b/MsmhTools/MsmhTools/HTTPProxyServer/DPIBypass.cs @@ -37,7 +37,7 @@ public void Set(Mode mode, int beforeSniChunks, ChunkMode chunkMode, int sniChun } // Max Data Length = 65536 - private readonly int MaxDataLength = 65536; + private const int MaxDataLength = 65536; public enum Mode { Program, @@ -88,81 +88,28 @@ public void Send(DPIBypass bp) private void Test(byte[] data, Socket socket, int beforeSniChunks, int sniChunks, int offset, DPIBypass bp) { - Debug.WriteLine("SendDataInFragmentAllExtensions"); + Debug.WriteLine("Send Data in TEST"); // Create packets List packets = new(); packets.Clear(); - List fbl = new(); - byte[] fb = new byte[1]; - fb[0] = 0x2; - for (int n = 0; n < 8; n++) - packets.Add(fb); - - SniReader sniReader = new(data); - - if (beforeSniChunks == 1 && sniChunks == 1) + SniModifire sniModifire = new(data); + if (sniModifire.HasSni) { - packets.Add(data); + packets.Add(sniModifire.ModifiedData); + SendPackets(sniModifire.ModifiedData, socket, bp, packets); } else { - if (sniReader.HaveTlsExtensions) - { - int prevIndex; - int pos = 0; - SniReader.TlsExtensions allExtensions = sniReader.AllExtensions; - - pos += allExtensions.StartIndex; - prevIndex = pos - allExtensions.StartIndex; - - // Create packet before SNI - int beforeSniLength = allExtensions.StartIndex - prevIndex; - if (beforeSniLength > 0) - { - byte[] beforeSNI = new byte[beforeSniLength]; - Buffer.BlockCopy(data, prevIndex, beforeSNI, 0, beforeSniLength); - - List chunkedbeforeSNI = ChunkDataNormal(beforeSNI, beforeSniChunks, offset); - packets = packets.Concat(chunkedbeforeSNI).ToList(); - //Debug.WriteLine($"{prevIndex} ======> {beforeSniLength}"); - } - - // Create SNI packet - List chunkedSNI = ChunkDataNormal(allExtensions.Data, sniChunks, offset); - packets = packets.Concat(chunkedSNI).ToList(); - - //Debug.WriteLine($"{beforeSniLength} ====== {sni.SniStartIndex}"); - //Debug.WriteLine($"{sni.SniStartIndex} ======> {sni.SniStartIndex + sni.SniLength}"); - - pos = allExtensions.StartIndex + allExtensions.Length; - - // Create packet after SNI - if (pos < data.Length) - { - int afterSniStartIndex = pos; - int afterSniLength = data.Length - pos; - byte[] afterSni = new byte[afterSniLength]; - Buffer.BlockCopy(data, afterSniStartIndex, afterSni, 0, afterSniLength); - packets.Add(afterSni); - - //Debug.WriteLine($"{sni.SniStartIndex + sni.SniLength} ====== {afterSniStartIndex}"); - //Debug.WriteLine($"{afterSniStartIndex} ======> {afterSniStartIndex + afterSniLength}"); - //Debug.WriteLine($"{afterSniStartIndex + afterSniLength} ====== {data.Length}"); - } - } - else - { - packets.Add(data); - } + packets.Add(data); + SendPackets(data, socket, bp, packets); } - SendPackets(data, socket, bp, packets); } private void SendDataInFragmentAllExtensions(byte[] data, Socket socket, int beforeSniChunks, int sniChunks, int offset, DPIBypass bp) { - Debug.WriteLine("SendDataInFragmentAllExtensions"); + //Debug.WriteLine("SendDataInFragmentAllExtensions"); // Create packets List packets = new(); packets.Clear(); @@ -175,7 +122,7 @@ private void SendDataInFragmentAllExtensions(byte[] data, Socket socket, int bef } else { - if (sniReader.HaveTlsExtensions) + if (sniReader.HasTlsExtensions) { int prevIndex; int pos = 0; @@ -230,7 +177,7 @@ private void SendDataInFragmentAllExtensions(byte[] data, Socket socket, int bef private void SendDataInFragmentSniExtension(byte[] data, Socket socket, int beforeSniChunks, int sniChunks, int offset, DPIBypass bp) { - Debug.WriteLine("SendDataInFragmentSniExtension"); + //Debug.WriteLine("SendDataInFragmentSniExtension"); // Create packets List packets = new(); packets.Clear(); @@ -244,7 +191,7 @@ private void SendDataInFragmentSniExtension(byte[] data, Socket socket, int befo } else { - if (sniReader.HaveSniExtension) + if (sniReader.HasSniExtension) { int prevIndex; int pos = 0; @@ -310,17 +257,17 @@ private void SendDataInFragmentSNI(byte[] data, Socket socket, int beforeSniChun // Create packets List packets = new(); packets.Clear(); - + SniReader sniReader = new(data); if (sniReader.SniList.Count > 1) Debug.WriteLine($"=======================> We Have {sniReader.SniList.Count} SNIs."); - + if (beforeSniChunks == 1 && sniChunks == 1) { packets.Add(data); } else { - if (sniReader.HaveSni) + if (sniReader.HasSni) { int prevIndex; int pos = 0; diff --git a/MsmhTools/MsmhTools/HTTPProxyServer/HTTPProxyServer.cs b/MsmhTools/MsmhTools/HTTPProxyServer/HTTPProxyServer.cs index 8300967..fc92f42 100644 --- a/MsmhTools/MsmhTools/HTTPProxyServer/HTTPProxyServer.cs +++ b/MsmhTools/MsmhTools/HTTPProxyServer/HTTPProxyServer.cs @@ -72,6 +72,7 @@ public void EnableDontBypass(Program.DontBypass dontBypassProgram) private System.Timers.Timer KillOnOverloadTimer { get; set; } = new(5000); private PerformanceCounter PFC { get; set; } = new(); + private float CpuUsage { get; set; } = 0; private bool Cancel = false; @@ -92,6 +93,11 @@ public void EnableDontBypass(Program.DontBypass dontBypassProgram) /// public float KillOnCpuUsage { get; set; } = 25; + /// + /// Kill Request if didn't receive data for n seconds. Default: 0 Sec (Disabled) + /// + public int RequestTimeoutSec { get; set; } = 0; + public HTTPProxyServer() { // Captive Portal and others @@ -146,13 +152,12 @@ public void Start(IPAddress ipAddress, int port, int maxThreads) // Terminator.WaitOne(); //}); - } private void KillOnOverloadTimer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e) { - float cpu = PFC.NextValue() / Environment.ProcessorCount; - if (AllRequests >= _Settings.MaxThreads || cpu > KillOnCpuUsage) + CpuUsage = PFC.NextValue() / Environment.ProcessorCount; + if (AllRequests >= _Settings.MaxThreads || CpuUsage > KillOnCpuUsage) { KillAll(); } @@ -248,7 +253,7 @@ private async void AcceptConnections() while (!Cancel) { - TcpClient tcpClient = await _TcpListener.AcceptTcpClientAsync(); + TcpClient tcpClient = await _TcpListener.AcceptTcpClientAsync().ConfigureAwait(false); if (tcpClient.Connected) ProcessConnectionSync(tcpClient); if (_CancelToken.IsCancellationRequested || Cancel) break; @@ -283,15 +288,15 @@ private async void ProcessConnection(TcpClient client) // Generate unique int int connectionId = Guid.NewGuid().GetHashCode() + BitConverter.ToInt32(Guid.NewGuid().ToByteArray(), 0); - //Debug.WriteLine($"Active Requests: {AllRequests} of {_Settings.MaxThreads}"); + Debug.WriteLine($"Active Requests: {AllRequests} of {_Settings.MaxThreads}"); try { // Check if Max Exceeded - if (AllRequests >= _Settings.MaxThreads) + if (AllRequests >= _Settings.MaxThreads || CpuUsage > KillOnCpuUsage) { // Event - string msgEventErr = $"AcceptConnections connection count {AllRequests} exceeds configured max {_Settings.MaxThreads}."; + string msgEventErr = $"AcceptConnections Max Exceeded, {AllRequests} of {_Settings.MaxThreads} Requests. CPU: {CpuUsage} of {KillOnCpuUsage}."; OnErrorOccurred?.Invoke(msgEventErr, EventArgs.Empty); Debug.WriteLine(msgEventErr); @@ -356,6 +361,7 @@ private async void ProcessConnection(TcpClient client) req.SourcePort = clientPort; req.DestIp = serverIp; req.DestPort = serverPort; + req.TimeoutSec = RequestTimeoutSec; // Block Port 80 if (BlockPort80 && req.DestHostPort == 80) @@ -436,20 +442,17 @@ private async void ProcessConnection(TcpClient client) // Is Upstream Active bool isUpStreamProgramActive = UpStreamProxyProgram.UpStreamMode != Program.UpStreamProxy.Mode.Disable; - if (isUpStreamProgramActive) - { - // Check if Dest Host or IP is blocked - bool isIp = IPAddress.TryParse(req.DestHostname, out IPAddress _); - if (isIp) - req.IsDestBlocked = await CommonTools.IsIpBlocked(req.DestHostname, req.DestHostPort, 2000); - else - req.IsDestBlocked = await CommonTools.IsHostBlocked(req.DestHostname, req.DestHostPort, 2000); + // Check if Dest Host or IP is blocked + bool isIp = IPAddress.TryParse(req.DestHostname, out IPAddress _); + if (isIp) + req.IsDestBlocked = await CommonTools.IsIpBlocked(req.DestHostname, req.DestHostPort, 2000); + else + req.IsDestBlocked = await CommonTools.IsHostBlocked(req.DestHostname, req.DestHostPort, 2000); - if (req.IsDestBlocked && isIp) - msgReqEvent += " (IP is blocked)"; - if (req.IsDestBlocked && !isIp) - msgReqEvent += " (Host is blocked)"; - } + if (req.IsDestBlocked && isIp) + msgReqEvent += " (IP is blocked)"; + if (req.IsDestBlocked && !isIp) + msgReqEvent += " (Host is blocked)"; // Apply upstream? bool applyUpStreamProxy = false; @@ -478,8 +481,8 @@ private async void ProcessConnection(TcpClient client) string msgEvent = $"{clientEndpoint} proxying request via CONNECT to {req.FullUrl}"; OnDebugInfoReceived?.Invoke(msgEvent, EventArgs.Empty); - //await Task.Run(async () => await ConnectHttpsRequest(connectionId, client, req, applyUpStreamProxy)); - await ConnectHttpsRequest(connectionId, client, req, applyUpStreamProxy); + ConnectHttpsRequest(connectionId, client, req, applyUpStreamProxy); + //await ConnectHttpsRequest(connectionId, client, req, applyUpStreamProxy); } else { @@ -487,11 +490,12 @@ private async void ProcessConnection(TcpClient client) string msgEvent = $"{clientEndpoint} proxying request to {req.FullUrl}"; OnDebugInfoReceived?.Invoke(msgEvent, EventArgs.Empty); - await ConnectHttpRequestAsync(req, client); + ConnectHttpRequestAsync(req, client); + //await ConnectHttpRequestAsync(req, client); } - if (client.Connected) client.Close(); - if (AllRequests > 0) AllRequests--; + //if (client.Connected) client.Close(); + //if (AllRequests > 0) AllRequests--; } catch (IOException) { @@ -511,7 +515,7 @@ private async void ProcessConnection(TcpClient client) //======================================== Connect HTTPS Request - private async Task ConnectHttpsRequest(int connectionId, TcpClient client, Request req, bool applyUpStreamProxy = false) + private async void ConnectHttpsRequest(int connectionId, TcpClient client, Request req, bool applyUpStreamProxy = false) { if (Cancel) return; if (client.Client == null) return; @@ -553,6 +557,7 @@ private async Task ConnectHttpsRequest(int connectionId, TcpClient client, Reque // Event Error string msgEventErr = $"Hostname was null or empty."; OnErrorOccurred?.Invoke(msgEventErr, EventArgs.Empty); + disposeIt(); return; } } @@ -561,6 +566,7 @@ private async Task ConnectHttpsRequest(int connectionId, TcpClient client, Reque // Event Error string msgEventErr = $"Connect Request failed to {req.DestHostname}:{req.DestHostPort}"; OnErrorOccurred?.Invoke(msgEventErr, EventArgs.Empty); + disposeIt(); return; } @@ -573,7 +579,11 @@ static byte[] ConnectResponse() string resp = "HTTP/1.1 200 Connection Established\r\nConnection: close\r\n\r\n"; return Encoding.UTF8.GetBytes(resp); } - if (client.Client == null) return; + if (client.Client == null) + { + disposeIt(); + return; + } client.Client.Send(connectResponse); if (string.IsNullOrEmpty(req.SourceIp) || string.IsNullOrEmpty(req.DestIp)) @@ -581,6 +591,7 @@ static byte[] ConnectResponse() // Event Error string msgEventErr = $"Source or dest IP were null or empty. SourceIp: {req.SourceIp} DestIp: {req.DestIp}"; OnErrorOccurred?.Invoke(msgEventErr, EventArgs.Empty); + disposeIt(); return; } @@ -617,40 +628,45 @@ void CurrentTunnel_OnErrorOccurred(object? sender, EventArgs e) } catch (SocketException) { - // do nothing + disposeIt(); } catch (Exception e) { // Event Error string msgEventErr = $"Connect Request: {e.Message}"; OnErrorOccurred?.Invoke(msgEventErr, EventArgs.Empty); + disposeIt(); } finally { - if (_TunnelManager != null) - _TunnelManager.Remove(connectionId); - - if (client != null) - client.Dispose(); + disposeIt(); + } - if (server != null) - server.Dispose(); + void disposeIt() + { + if (_TunnelManager != null) _TunnelManager.Remove(connectionId); + if (client != null) client.Dispose(); + if (server != null) server.Dispose(); + if (AllRequests > 0) AllRequests--; } } //======================================== Connect HTTP Request - private async Task ConnectHttpRequestAsync(Request req, TcpClient tcpClient) + private async void ConnectHttpRequestAsync(Request req, TcpClient client) { if (Cancel) return; RestResponse? resp = await proxyRequest(req); if (resp != null) { - NetworkStream ns = tcpClient.GetStream(); + NetworkStream ns = client.GetStream(); await sendRestResponse(resp, ns); await ns.FlushAsync(); ns.Close(); + + if (client != null) client.Dispose(); + if (AllRequests > 0) AllRequests--; } async Task proxyRequest(Request request) diff --git a/MsmhTools/MsmhTools/HTTPProxyServer/HTTPProxyServerProgram.cs b/MsmhTools/MsmhTools/HTTPProxyServer/HTTPProxyServerProgram.cs index b77bfd9..82f4173 100644 --- a/MsmhTools/MsmhTools/HTTPProxyServer/HTTPProxyServerProgram.cs +++ b/MsmhTools/MsmhTools/HTTPProxyServer/HTTPProxyServerProgram.cs @@ -362,8 +362,7 @@ bool split(string hostIP, out string destIP) // Add Support Comment // if (hostIP.StartsWith("//")) { - destIP = destHostname; - return false; + destIP = destHostname; return false; } else { @@ -375,21 +374,51 @@ bool split(string hostIP, out string destIP) host = host.Replace("www.", string.Empty); string ip = split[1].Trim(); - if (destHostnameNoWWW.Equals(host)) + if (!host.StartsWith("*.")) { - destIP = ip; - return true; + // No Wildcard + if (destHostnameNoWWW.Equals(host)) + { + destIP = ip; return true; + } + else + { + destIP = destHostname; return false; + } } else { - destIP = destHostname; - return false; + // Wildcard + string destMainHost = string.Empty; + string[] splitByDot = destHostnameNoWWW.Split('.'); + + if (splitByDot.Length >= 3) + { + host = host[2..]; + + for (int n = 1; n < splitByDot.Length; n++) + destMainHost += $"{splitByDot[n]}."; + if (destMainHost.EndsWith('.')) destMainHost = destMainHost[0..^1]; + + if (destMainHost.Equals(host)) + { + destIP = ip; + return true; + } + else + { + destIP = destHostname; return false; + } + } + else + { + destIP = destHostname; return false; + } } } else { - destIP = destHostname; - return false; + destIP = destHostname; return false; } } } diff --git a/MsmhTools/MsmhTools/HTTPProxyServer/Request.cs b/MsmhTools/MsmhTools/HTTPProxyServer/Request.cs index 0590b11..a6136fd 100644 --- a/MsmhTools/MsmhTools/HTTPProxyServer/Request.cs +++ b/MsmhTools/MsmhTools/HTTPProxyServer/Request.cs @@ -144,6 +144,11 @@ public class Request /// public HttpListenerContext? ListenerContext { get; set; } + /// + /// Close request if didn't receive data for n seconds. Default: 0 Sec (Disabled) + /// + public int TimeoutSec { get; set; } = 0; + private Uri? UriP { get; set; } private static readonly int _TimeoutDataReadMs = 2000; private static readonly int _DataReadSleepMs = 10; diff --git a/MsmhTools/MsmhTools/HTTPProxyServer/Tunnel.cs b/MsmhTools/MsmhTools/HTTPProxyServer/Tunnel.cs index 2131ba1..3b4c594 100644 --- a/MsmhTools/MsmhTools/HTTPProxyServer/Tunnel.cs +++ b/MsmhTools/MsmhTools/HTTPProxyServer/Tunnel.cs @@ -21,36 +21,6 @@ public class Tunnel : IDisposable public Request Request { get; set; } - /// - /// Source IP address. - /// - public string SourceIp { get; set; } - - /// - /// Source TCP port. - /// - public int SourcePort { get; set; } - - /// - /// Destination IP address. - /// - public string DestIp { get; set; } - - /// - /// Destination TCP port. - /// - public int DestPort { get; set; } - - /// - /// Destination hostname. - /// - public string DestHostname { get; set; } - - /// - /// Destination host port. - /// - public int DestHostPort { get; set; } - /// /// The TCP client instance for the requestor. /// @@ -72,6 +42,7 @@ public class Tunnel : IDisposable public Stream ServerStream { get; set; } private bool _Active = true; + private readonly Stopwatch KillOnTimeout = new(); public event EventHandler? OnErrorOccurred; public event EventHandler? OnDebugInfoReceived; @@ -97,12 +68,6 @@ public Tunnel( Request = request; TimestampUtc = DateTime.Now.ToUniversalTime(); - SourceIp = request.SourceIp; - SourcePort = request.SourcePort; - DestIp = request.DestIp; - DestPort = request.DestPort; - DestHostname = request.DestHostname; - DestHostPort = request.DestHostPort; ClientTcpClient = client ?? throw new ArgumentNullException(nameof(client)); ClientTcpClient.NoDelay = true; @@ -141,7 +106,7 @@ public override string ToString() /// String. public string Source() { - return SourceIp + ":" + SourcePort; + return Request.SourceIp + ":" + Request.SourcePort; } /// @@ -150,7 +115,7 @@ public string Source() /// String. public string Destination() { - return DestIp + ":" + DestPort + " [" + DestHostname + ":" + DestHostPort + "]"; + return Request.DestIp + ":" + Request.DestPort + " [" + Request.DestHostname + ":" + Request.DestHostPort + "]"; } /// @@ -170,7 +135,7 @@ public bool IsActive() if (ClientTcpClient.Client != null) { - TcpState clientState = GetTcpRemoteState(ClientTcpClient); + TcpState clientState = GetTcpRemoteState(ClientTcpClient); if (clientState == TcpState.Established || clientState == TcpState.Listen @@ -208,7 +173,17 @@ public bool IsActive() } } - _Active = _Active && clientActive && clientSocketActive && serverActive && serverSocketActive; + if (Request.TimeoutSec != 0 && + KillOnTimeout.ElapsedMilliseconds > TimeSpan.FromSeconds(Request.TimeoutSec).TotalMilliseconds) + { + string msg = $"Killed Request On Timeout({Request.TimeoutSec} Sec): {Request.DestHostname}:{Request.DestHostPort}"; + OnDebugInfoReceived?.Invoke(msg, EventArgs.Empty); + Debug.WriteLine(msg); + _Active = false; + KillOnTimeout.Stop(); + } + else + _Active = clientActive && clientSocketActive && serverActive && serverSocketActive; return _Active; } @@ -535,7 +510,7 @@ private void ServerReaderSync() _Active = false; } } - + private async void ClientReaderAsync() { await Task.Run(async () => @@ -553,15 +528,19 @@ await Task.Run(async () => if (data != null && data.Length > 0) { + if (!KillOnTimeout.IsRunning) KillOnTimeout.Start(); + KillOnTimeout.Restart(); + // Event msgEvent = $"ClientReaderAsync {Source()} to {Destination()} read {data.Length} bytes."; OnDebugInfoReceived?.Invoke(msgEvent, EventArgs.Empty); - ServerSend(data); - + if (ClientTcpClient.Connected) + ServerSend(data); + data = null; } - + if (!_Active) break; } } @@ -604,7 +583,8 @@ await Task.Run(async () => msgEvent = $"ServerReaderAsync {Destination()} to {Source()} read {data.Length} bytes."; OnDebugInfoReceived?.Invoke(msgEvent, EventArgs.Empty); - ClientSend(data); + if (ServerTcpClient.Connected) + ClientSend(data); data = null; } @@ -632,14 +612,17 @@ await Task.Run(async () => private void ClientSend(byte[] data) { + // We don't have TLS Handshake here if (ClientTcpClient.Client == null) return; - //Send(data, ClientTcpClient.Client); + if (!ClientTcpClient.Connected) return; ClientTcpClient.Client.Send(data); } private void ServerSend(byte[] data) { + // We do have TLS Handshake here if (ServerTcpClient.Client == null) return; + if (!ServerTcpClient.Connected) return; if (Request.ApplyDpiBypass) Send(data, ServerTcpClient.Client); else @@ -650,8 +633,8 @@ private void ServerSend(byte[] data) public void EnableDPIBypass(HTTPProxyServer.Program.DPIBypass dpiBypass) { ConstantDPIBypass = dpiBypass; - ConstantDPIBypass.DestHostname = DestHostname; - ConstantDPIBypass.DestPort = DestHostPort; + ConstantDPIBypass.DestHostname = Request.DestHostname; + ConstantDPIBypass.DestPort = Request.DestHostPort; } private void Send(byte[] data, Socket? socket) @@ -661,8 +644,8 @@ private void Send(byte[] data, Socket? socket) if (ConstantDPIBypass.DPIBypassMode == HTTPProxyServer.Program.DPIBypass.Mode.Disable) { HTTPProxyServer.Program.DPIBypass bp = HTTPProxyServer.StaticDPIBypassProgram; - bp.DestHostname = DestHostname; - bp.DestPort = DestHostPort; + bp.DestHostname = Request.DestHostname; + bp.DestPort = Request.DestHostPort; if (bp.DPIBypassMode == HTTPProxyServer.Program.DPIBypass.Mode.Program) { HTTPProxyServer.Program.DPIBypass.ProgramMode programMode = new(data, socket); diff --git a/MsmhTools/MsmhTools/Info.cs b/MsmhTools/MsmhTools/Info.cs index 2ea2dfe..eafee6e 100644 --- a/MsmhTools/MsmhTools/Info.cs +++ b/MsmhTools/MsmhTools/Info.cs @@ -2,6 +2,7 @@ using System.Reflection; using System.Runtime.InteropServices; using System.Diagnostics; +using System.Globalization; namespace MsmhTools { @@ -31,6 +32,31 @@ public static string GetAppGUID() return attribute.Value; } + public static string GetUniqueIdString(bool getEncodedId) + { + string idPrincipal = Environment.MachineName + Environment.UserName; + string idDateTime = DateTime.UtcNow.ToString("yyyyMMddHHmmssfffffff", CultureInfo.InvariantCulture); + string idInt1 = $"{Guid.NewGuid().GetHashCode()}"; + if (idInt1.StartsWith('-')) idInt1 = idInt1.Replace("-", string.Empty); + string idInt2 = $"{BitConverter.ToInt32(Guid.NewGuid().ToByteArray(), 0)}"; + if (idInt2.StartsWith('-')) idInt2 = idInt2.Replace("-", string.Empty); + string result = idPrincipal + idDateTime + idInt1 + idInt2; + return getEncodedId ? EncodingTool.GetSHA512(result).ToLower() : result; + } + + public static int GetUniqueIdInt() + { + try + { + return Guid.NewGuid().GetHashCode() + BitConverter.ToInt32(Guid.NewGuid().ToByteArray(), 0); + } + catch (Exception ex) + { + Debug.WriteLine("GetUniqueIdInt: " + ex.Message); + return Guid.NewGuid().GetHashCode(); + } + } + /// /// 1 if newVersion > oldVersion. ///
0 if newVersion = oldVersion.
diff --git a/MsmhTools/MsmhTools/Network.cs b/MsmhTools/MsmhTools/Network.cs index a3e02cc..a6a6a80 100644 --- a/MsmhTools/MsmhTools/Network.cs +++ b/MsmhTools/MsmhTools/Network.cs @@ -661,7 +661,7 @@ static bool attempt2(string? url = null, int timeoutMs = 5000) } catch(Exception ex) { - Debug.WriteLine(ex.Message); + Debug.WriteLine("IsInternetAlive: " + ex.Message); return false; } } diff --git a/MsmhTools/MsmhTools/SniModifire.cs b/MsmhTools/MsmhTools/SniModifire.cs new file mode 100644 index 0000000..bfb322a --- /dev/null +++ b/MsmhTools/MsmhTools/SniModifire.cs @@ -0,0 +1,453 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MsmhTools +{ + // https://tls13.xargs.org + public class SniModifire + { + // Needs Certificate + public class TlsExtensions + { + public byte[] Data { get; set; } = Array.Empty(); + public int StartIndex { get; set; } = -1; + public int Length { get; set; } = -1; + } + + public class SniExtension + { + public byte[] Data { get; set; } = Array.Empty(); + public int StartIndex { get; set; } = -1; + public int Length { get; set; } = -1; + } + + public class SNI + { + public string ServerName { get; set; } = string.Empty; + public byte[] Data { get; set; } = Array.Empty(); + public int StartIndex { get; set; } = -1; + public int Length { get; set; } = -1; + } + + public int Padding { get; set; } = 0; + public bool PutSniLast { get; set; } = false; + + public string ReasonPhrase { get; private set; } = string.Empty; + public bool HasTlsExtensions { get; private set; } = false; + public TlsExtensions AllExtensions { get; private set; } = new(); + public bool HasSniExtension { get; private set; } = false; + public List SniExtensionList { get; private set; } = new(); + public bool HasSni { get; private set; } = false; + public List SniList { get; private set; } = new(); + public byte[] ModifiedData { get; private set; } = Array.Empty(); + + private readonly byte[] Data = Array.Empty(); + private readonly int MaxDataLength = 65536; + private const int TLS_HEADER_LEN = 5; + private const int TLS_HANDSHAKE_CONTENT_TYPE = 0x16; + private const int TLS_HANDSHAKE_TYPE_CLIENT_HELLO = 0x01; + + public SniModifire(byte[] data) + { + Data = data; + + int maxPadding = MaxDataLength - data.Length - 4; + if (Padding > maxPadding) Padding = maxPadding; + + int pos = TLS_HEADER_LEN; + int dataLength = data.Length; + + if (dataLength < TLS_HEADER_LEN) + { + ReasonPhrase = "TCP payload is not large enough for a TLS header."; + return; + } + + // RECORD HEADER + if (data[0] == 1 & 0x80 == 1 && data[2] == 1) + { + ReasonPhrase = "Received SSL 2.0 Client Hello which can not support SNI."; + return; + } + else + { + if (data[0] != TLS_HANDSHAKE_CONTENT_TYPE) + { + ReasonPhrase = "Request did not begin with TLS handshake."; + return; + } + + int tls_version_major = data[1]; + int tls_version_minor = data[2]; + + if (tls_version_major < 3) + { + ReasonPhrase = $"Received SSL handshake cannot support SNI. Min TLS: {tls_version_minor} Max TLS: {tls_version_major}"; + return; + } + + // TLS Record Length (Length of handshake message) (2 bytes length) + int len = (data[3] << 8) + data[4]; + dataLength = Math.Min(dataLength, len + TLS_HEADER_LEN); + + // Check we received entire TLS record length + if (dataLength < len + TLS_HEADER_LEN) + { + ReasonPhrase = "Didn't receive entire TLS record length."; + return; + } + + // HANDSHAKE HEADER + if (pos + 1 > dataLength) + { + ReasonPhrase = "Handshake error."; + return; + } + + // data[5] == 0x01 + if (data[pos] != TLS_HANDSHAKE_TYPE_CLIENT_HELLO) + { + ReasonPhrase = "Not a client hello."; + return; + } + + //== Create Modified Data + int mPos = 0; + byte[] mData1 = new byte[pos - mPos]; + Buffer.BlockCopy(data, 0, mData1, 0, mData1.Length); + mPos += mData1.Length; + if (Padding > 0) + { + int padding = len + Padding + 4; + mData1[mData1.Length - 2] = (byte)(padding >> 8); + mData1[mData1.Length - 1] = (byte)padding; + + int len2 = (mData1[mData1.Length - 2] << 8) + mData1[mData1.Length - 1]; + Debug.WriteLine(len2); + } + ModifiedData = ModifiedData.Concat(mData1).ToArray(); + + // Skip Handshake Message Type + pos += 1; + + // Length of client hello data (3 bytes length) + len = (data[pos] << 16) + (data[pos + 1] << 8) + data[pos + 2]; + // Skip Length of client hello data + pos += 3; + + //== Create Modified Data + byte[] mData2 = new byte[pos - mPos]; + Buffer.BlockCopy(data, mPos, mData2, 0, mData2.Length); + mPos += mData2.Length; + if (Padding > 0) + { + int padding = len + Padding + 4; + mData2[mData2.Length - 3] = (byte)(padding >> 16); // (byte)(padding >> 16) + mData2[mData2.Length - 2] = (byte)(padding >> 8); + mData2[mData2.Length - 1] = (byte)padding; + + int len2 = (mData2[mData2.Length - 3] << 16) + (mData2[mData2.Length - 2] << 8) + mData2[mData2.Length - 1]; + Debug.WriteLine(len2); + } + ModifiedData = ModifiedData.Concat(mData2).ToArray(); + + // CLIENT VERSION (This field is no longer used for negotiation and is hardcoded to the 1.2 version) + pos += 2; + + // CLIENT RANDOM (32 bytes constant) + pos += 32; + + // SESSION ID + if (pos + 1 > dataLength) + { + ReasonPhrase = "Session ID error."; + return; + } + + // Session ID Length (1 byte length) + len = data[pos]; + pos += 1 + len; + + // CIPHER SUITES + if (pos + 2 > dataLength) + { + ReasonPhrase = "Cipher Suit error."; + return; + } + + // Cipher Suits Length (2 bytes length) + len = (data[pos] << 8) + data[pos + 1]; + pos += 2 + len; + + // COMPRESSION METHODS (TLS 1.3 no longer allows compression, so this field is always a single entry. + // 01 - 1 bytes of compression methods. 00 - assigned value for "null" compression.) + if (pos + 1 > dataLength) + { + ReasonPhrase = "Compression Method error."; + return; + } + + // Compression Methods Length (1 byte length) + len = data[pos]; + pos += 1 + len; + + if (pos == dataLength && tls_version_major == 3 && tls_version_minor == 0) + { + ReasonPhrase = "Received SSL 3.0 handshake without extensions."; + return; + } + + // EXTENSIONS + if (pos + 2 > dataLength) + { + ReasonPhrase = "Extensions error."; + return; + } + + // Extensions Length (2 bytes length) + len = (data[pos] << 8) + data[pos + 1]; + pos += 2; + + //== Create Modified Data + byte[] mData3 = new byte[pos - mPos]; + Buffer.BlockCopy(data, mPos, mData3, 0, mData3.Length); + mPos += mData3.Length; + if (Padding > 0) + { + int padding = len + Padding + 4; + mData3[mData3.Length - 2] = (byte)(padding >> 8); + mData3[mData3.Length - 1] = (byte)padding; + + int len2 = (mData3[mData3.Length - 2] << 8) + mData3[mData3.Length - 1]; + Debug.WriteLine(len2); + } + ModifiedData = ModifiedData.Concat(mData3).ToArray(); + + if (pos + len > dataLength) + { + ReasonPhrase = "Wrong Data."; + return; + } + + byte[] extensionsData = new byte[len]; + Buffer.BlockCopy(data, pos, extensionsData, 0, extensionsData.Length); + + ParseExtensions(extensionsData, pos); + } + } + + private void ParseExtensions(byte[] data, int pos0) + { + if (data.Length <= 0) return; + + HasTlsExtensions = true; + AllExtensions.Data = data; + AllExtensions.Length = data.Length; + AllExtensions.StartIndex = pos0; + + int pos = 0; + int len; + + // Put SNI Extension Last 1 + byte[] sniExtensionLast = Array.Empty(); + bool hasSniLast = false; + + // Parse each 4 bytes for the extension header (to avoid index out of range) + while (pos + 4 <= data.Length) + { + len = 2; // Add Extension Type + len += 2; // Add Extension Length (2 bytes length) + + // Add SNI Extension Data + len += (data[pos + 2] << 8) + data[pos + 3]; + + byte[] extData = new byte[len]; + Buffer.BlockCopy(data, pos, extData, 0, len); + + //if (data[pos] == 0x00 && data[pos + 1] == 0x15) // Extension: Padding + if (data[pos] == 0x00 && data[pos + 1] == 0x00) // Extension: SNI + { + ParseSniExtension(extData, pos0 + pos); + + hasSniLast = true; + sniExtensionLast = extData; + + if (!PutSniLast) + { + //== Create Modified Data + if (Padding > 0) + ModifiedData = ModifiedData.Concat(GetPadding()).ToArray(); // Add Padding before SNI extension + ModifiedData = ModifiedData.Concat(extData).ToArray(); // Add SNI Extension + } + } + else + { + //== Create Modified Data for other extensions + ModifiedData = ModifiedData.Concat(extData).ToArray(); + } + //else if (data[pos] == 0x00 && data[pos + 1] == 0x0b) // Extension: EC Point Formats + //else if (data[pos] == 0x00 && data[pos + 1] == 0x0a) // Extension: Supported Groups + //else if (data[pos] == 0x00 && data[pos + 1] == 0x23) // Extension: Session Ticket + //else if (data[pos] == 0x00 && data[pos + 1] == 0x16) // Extension: Encrypt-Then-MAC + //else if (data[pos] == 0x00 && data[pos + 1] == 0x17) // Extension: Extended Master Secret + //else if (data[pos] == 0x00 && data[pos + 1] == 0x0d) // Extension: Signature Algorithms + //else if (data[pos] == 0x00 && data[pos + 1] == 0x2b) // Extension: Supported Versions + //else if (data[pos] == 0x00 && data[pos + 1] == 0x2d) // Extension: PSK Key Exchange Modes + //else if (data[pos] == 0x00 && data[pos + 1] == 0x33) // Extension: Key Share + + // Advance to the next extension + pos += len; + } + + // Put SNI Extension Last 2 + if (PutSniLast && hasSniLast) + { + //== Create Modified Data + if (Padding > 0) + ModifiedData = ModifiedData.Concat(GetPadding()).ToArray(); // Add Padding before SNI extension + ModifiedData = ModifiedData.Concat(sniExtensionLast).ToArray(); // Add SNI Extension + } + + if (SniList.Any()) + { + HasSni = true; + ReasonPhrase = "Successfully read SNI."; + } + else + { + HasSni = false; + ReasonPhrase = "Wrong Data."; + SniList.Clear(); + } + } + + private void ParseSniExtension(byte[] data, int pos0) + { + // EXTENSION SERVER NAME + if (data.Length <= 0) return; + + // Google SNI Extension + //byte[] google = new byte[23]; + //google[0] = 0; + //google[1] = 0; + //google[2] = 0; + //google[3] = 19; + //google[4] = 0; + //google[5] = 17; + //google[6] = 0; + //google[7] = 0; + //google[8] = 14; + //byte[] googleSNI = Encoding.UTF8.GetBytes("www.google.com"); + //Buffer.BlockCopy(googleSNI, 0, google, 9, googleSNI.Length); + //data = google; + + HasSniExtension = true; + SniExtension sniExtension = new(); + sniExtension.Data = data; + sniExtension.Length = data.Length; + sniExtension.StartIndex = pos0; + SniExtensionList.Add(sniExtension); + + int pos = 0; + + // Check if it's a server name extension + if (data[pos] == 0x00 && data[pos + 1] == 0x00) + { + pos += 2; // skip server name list length (00 00) + int len; + + while (pos + 1 < data.Length) + { + // SNI Extension Data Length (2 bytes length) + len = (data[pos] << 8) + data[pos + 1]; + pos += 2; + + // First and Only List Entry Length (2 bytes length) + len = (data[pos] << 8) + data[pos + 1]; + pos += 2; // skip extension header + + // List Entry Type - 0x00 is DNS Hostname (1 byte) + if (data[pos] == 0x00) + { + pos += 1; // Skip List Entry Type + + // Hostname Length (2 bytes length) + len = (data[pos] << 8) + data[pos + 1]; + pos += 2; // Skip Hostname Length + + if (pos + len > data.Length) break; + + if (len > 0) + { + byte[] outData = new byte[len]; + Buffer.BlockCopy(data, pos, outData, 0, len); + + string serverName = Encoding.UTF8.GetString(outData); + Debug.WriteLine("----------Server Name: " + serverName + ", Length: " + len + ", Whole Data Length: " + Data.Length); + + SNI sni = new(); + sni.Data = outData; + sni.Length = len; + sni.ServerName = serverName; + sni.StartIndex = pos0 + pos; + + // Add SNI to List + SniList.Add(sni); + } + } + else + { + Debug.WriteLine("SniReader: Unknown server name extension name type."); + } + + pos += len; // Skip Hostname + } + } + + } + + // Padding is a TLS Extension (We add Padding before SNI extension) + private byte[] GetPadding() + { + int padding = Padding + 4; + + byte[] paddingData = new byte[padding]; + + // Padding Extension Type (2 bytes) + paddingData[0] = 0x00; + paddingData[1] = 0x15; + + // Padding Extension Data Length (2 bytes length) + paddingData[2] = (byte)(Padding >> 8); + paddingData[3] = (byte)Padding; + + // Add Padding Data which is bunch of zeros + for (int n = 4; n < padding; n++) + { + paddingData[n] = 0x00; + } + + return paddingData; + } + + private byte[] GetMinPadding() + { + byte[] paddingData = new byte[4]; + + // Padding Extension Type (2 bytes) + paddingData[0] = 0x00; + paddingData[1] = 0x15; + + // Padding Extension Data Length (2 bytes length) + paddingData[2] = 0x00; + paddingData[3] = 0x00; + + return paddingData; + } + + } +} diff --git a/MsmhTools/MsmhTools/SniReader.cs b/MsmhTools/MsmhTools/SniReader.cs index 7802ef9..decd2ee 100644 --- a/MsmhTools/MsmhTools/SniReader.cs +++ b/MsmhTools/MsmhTools/SniReader.cs @@ -7,7 +7,7 @@ namespace MsmhTools { - // https://github.com/dlundquist/sniproxy/blob/master/src/tls.c + // https://tls13.xargs.org public class SniReader { public class TlsExtensions @@ -33,19 +33,22 @@ public class SNI } public string ReasonPhrase { get; private set; } = string.Empty; - public bool HaveTlsExtensions { get; private set; } = false; + public bool HasTlsExtensions { get; private set; } = false; public TlsExtensions AllExtensions { get; private set; } = new(); - public bool HaveSniExtension { get; private set; } = false; + public bool HasSniExtension { get; private set; } = false; public List SniExtensionList { get; private set; } = new(); - public bool HaveSni { get; private set; } = false; + public bool HasSni { get; private set; } = false; public List SniList { get; private set; } = new(); + private readonly byte[] Data = Array.Empty(); private const int TLS_HEADER_LEN = 5; private const int TLS_HANDSHAKE_CONTENT_TYPE = 0x16; private const int TLS_HANDSHAKE_TYPE_CLIENT_HELLO = 0x01; public SniReader(byte[] data) { + Data = data; + int pos = TLS_HEADER_LEN; int dataLength = data.Length; @@ -55,6 +58,7 @@ public SniReader(byte[] data) return; } + // RECORD HEADER if (data[0] == 1 & 0x80 == 1 && data[2] == 1) { ReasonPhrase = "Received SSL 2.0 Client Hello which can not support SNI."; @@ -77,66 +81,76 @@ public SniReader(byte[] data) return; } - // TLS record length - int len = (data[3] << 8) + data[4] + TLS_HEADER_LEN; - dataLength = Math.Min(dataLength, len); + // TLS Record Length (Length of handshake message) (2 bytes length) + int len = (data[3] << 8) + data[4]; + dataLength = Math.Min(dataLength, len + TLS_HEADER_LEN); // Check we received entire TLS record length - if (dataLength < len) + if (dataLength < len + TLS_HEADER_LEN) { ReasonPhrase = "Didn't receive entire TLS record length."; return; } - // Handshake + // HANDSHAKE HEADER if (pos + 1 > dataLength) { ReasonPhrase = "Handshake error."; return; } + // data[5] == 0x01 if (data[pos] != TLS_HANDSHAKE_TYPE_CLIENT_HELLO) { ReasonPhrase = "Not a client hello."; return; } - /* Skip past fixed length records: - 1 Handshake Type - 3 Length - 2 Version (again) - 32 Random - to Session ID Length - */ - pos += 38; + // Skip Handshake Message Type + pos += 1; + + // Length of client hello data (3 bytes length) + len = (data[pos] << 16) + (data[pos + 1] << 8) + data[pos + 2]; + // Skip Length of client hello data + pos += 3; + + // CLIENT VERSION (This field is no longer used for negotiation and is hardcoded to the 1.2 version) + pos += 2; - // Session ID + // CLIENT RANDOM (32 bytes constant) + pos += 32; + + // SESSION ID if (pos + 1 > dataLength) { ReasonPhrase = "Session ID error."; return; } + // Session ID Length (1 byte length) len = data[pos]; pos += 1 + len; - // Cipher Suits + // CIPHER SUITES if (pos + 2 > dataLength) { ReasonPhrase = "Cipher Suit error."; return; } + // Cipher Suits Length (2 bytes length) len = (data[pos] << 8) + data[pos + 1]; pos += 2 + len; - // Compression Methods + // COMPRESSION METHODS (TLS 1.3 no longer allows compression, so this field is always a single entry. + // 01 - 1 bytes of compression methods. 00 - assigned value for "null" compression.) if (pos + 1 > dataLength) { ReasonPhrase = "Compression Method error."; return; } + // Compression Methods Length (1 byte length) len = data[pos]; pos += 1 + len; @@ -146,13 +160,14 @@ to Session ID Length return; } - // Extensions + // EXTENSIONS if (pos + 2 > dataLength) { ReasonPhrase = "Extensions error."; return; } + // Extensions Length (2 bytes length) len = (data[pos] << 8) + data[pos + 1]; pos += 2; @@ -162,48 +177,48 @@ to Session ID Length return; } - // Extensions Length - int extensionsLength = Convert.ToInt32(data[pos - 1]); - - byte[] newData = new byte[extensionsLength]; - //byte[] newData = new byte[dataLength - pos]; - Buffer.BlockCopy(data, pos, newData, 0, newData.Length); + byte[] extensionsData = new byte[len]; + Buffer.BlockCopy(data, pos, extensionsData, 0, extensionsData.Length); - ParseExtensions(newData, pos); + ParseExtensions(extensionsData, pos); } } private void ParseExtensions(byte[] data, int pos0) { if (data.Length <= 0) return; - //Debug.WriteLine(data.Length + " == " + dataLength); - HaveTlsExtensions = true; + HasTlsExtensions = true; AllExtensions.Data = data; AllExtensions.Length = data.Length; AllExtensions.StartIndex = pos0; int pos = 0; int len; - // Parse each 4 bytes for the extension header (to avoid index out of range) while (pos + 4 <= data.Length) { - // extension header - len = 4; - // Extension Length - header - len += (data[pos + 2] << 8) + data[pos + 3]; + len = 2; // Add Extension Type + len += 2; // Add Extension Length (2 bytes length) - //Debug.WriteLine($"{pos} L: {len} --- {dataLength}"); - - // Check if it's a server name extension - if (data[pos] == 0x00 && data[pos + 1] == 0x00) - { - byte[] extData = new byte[len]; - Buffer.BlockCopy(data, pos, extData, 0, extData.Length); + // Add SNI Extension Data + len += (data[pos + 2] << 8) + data[pos + 3]; - ParseServerNameExtension(extData, pos0 + pos); - } + byte[] extData = new byte[len]; + Buffer.BlockCopy(data, pos, extData, 0, len); + + //if (data[pos] == 0x00 && data[pos + 1] == 0x15) // Extension: Padding + if (data[pos] == 0x00 && data[pos + 1] == 0x00) // Extension: SNI + ParseSniExtension(extData, pos0 + pos); + //else if (data[pos] == 0x00 && data[pos + 1] == 0x0b) // Extension: EC Point Formats + //else if (data[pos] == 0x00 && data[pos + 1] == 0x0a) // Extension: Supported Groups + //else if (data[pos] == 0x00 && data[pos + 1] == 0x23) // Extension: Session Ticket + //else if (data[pos] == 0x00 && data[pos + 1] == 0x16) // Extension: Encrypt-Then-MAC + //else if (data[pos] == 0x00 && data[pos + 1] == 0x17) // Extension: Extended Master Secret + //else if (data[pos] == 0x00 && data[pos + 1] == 0x0d) // Extension: Signature Algorithms + //else if (data[pos] == 0x00 && data[pos + 1] == 0x2b) // Extension: Supported Versions + //else if (data[pos] == 0x00 && data[pos + 1] == 0x2d) // Extension: PSK Key Exchange Modes + //else if (data[pos] == 0x00 && data[pos + 1] == 0x33) // Extension: Key Share // Advance to the next extension pos += len; @@ -211,41 +226,23 @@ private void ParseExtensions(byte[] data, int pos0) if (SniList.Any()) { - HaveSni = true; + HasSni = true; ReasonPhrase = "Successfully read SNI."; } else { - HaveSni = false; + HasSni = false; ReasonPhrase = "Wrong Data."; SniList.Clear(); } } - private void ParseServerNameExtension(byte[] data, int pos0) + private void ParseSniExtension(byte[] data, int pos0) { + // EXTENSION SERVER NAME if (data.Length <= 0) return; - // Length of SNI Extension saved here. SNI Extension Length == SNI Length + 9 - //data[5] = 17; - - // Google SNI Extension - //byte[] google = new byte[23]; - //google[0] = 0; - //google[1] = 0; - //google[2] = 0; - //google[3] = 19; - //google[4] = 0; - //google[5] = 17; - //google[6] = 0; - //google[7] = 0; - //google[8] = 14; - //byte[] googleSNI = Encoding.UTF8.GetBytes("www.google.com"); - //Buffer.BlockCopy(googleSNI, 0, google, 9, googleSNI.Length); - - //data = google; - - HaveSniExtension = true; + HasSniExtension = true; SniExtension sniExtension = new(); sniExtension.Data = data; sniExtension.Length = data.Length; @@ -254,46 +251,60 @@ private void ParseServerNameExtension(byte[] data, int pos0) int pos = 0; - pos += 2; // skip server name list length - int len; - - while (pos + 3 < data.Length) + // Check if it's a server name extension + if (data[pos] == 0x00 && data[pos + 1] == 0x00) { - pos += 4; // skip extension header - len = (data[pos + 1] << 8) + data[pos + 2]; + pos += 2; // skip server name list length (00 00) + int len; - int newPos = pos + 3; + while (pos + 1 < data.Length) + { + // SNI Extension Data Length (2 bytes length) + len = (data[pos] << 8) + data[pos + 1]; + pos += 2; - if (newPos + len > data.Length) break; + // First and Only List Entry Length (2 bytes length) + len = (data[pos] << 8) + data[pos + 1]; + pos += 2; // skip extension header - if (data[pos] == 0x00) - { - int outDataLength = data.Length - newPos; - if (outDataLength > 0) + // List Entry Type - 0x00 is DNS Hostname (1 byte) + if (data[pos] == 0x00) { - byte[] outData = new byte[outDataLength]; - Buffer.BlockCopy(data, newPos, outData, 0, outDataLength); + pos += 1; // Skip List Entry Type + + // Hostname Length (2 bytes length) + len = (data[pos] << 8) + data[pos + 1]; + pos += 2; // Skip Hostname Length - string serverName = Encoding.UTF8.GetString(outData); - Debug.WriteLine("Server Name: " + serverName + " Length: " + outDataLength + " = " + (Convert.ToInt32(data[5]) - 3)); + if (pos + len > data.Length) break; - SNI sni = new(); - sni.Data = outData; - sni.Length = outDataLength; - sni.ServerName = serverName; - sni.StartIndex = pos0 + newPos; + if (len > 0) + { + byte[] outData = new byte[len]; + Buffer.BlockCopy(data, pos, outData, 0, len); - // Add SNI to List - SniList.Add(sni); + string serverName = Encoding.UTF8.GetString(outData); + //Debug.WriteLine("----------Server Name: " + serverName + ", Length: " + len + ", Whole Data Length: " + Data.Length); + + SNI sni = new(); + sni.Data = outData; + sni.Length = len; + sni.ServerName = serverName; + sni.StartIndex = pos0 + pos; + + // Add SNI to List + SniList.Add(sni); + } + } + else + { + Debug.WriteLine("SniReader: Unknown server name extension name type."); } - } - else - { - Debug.WriteLine("SniReader: Unknown server name extension name type."); - } - pos += 3 + len; + pos += len; // Skip Hostname + } } + } } diff --git a/SDCHttpProxy/Program.cs b/SDCHttpProxy/Program.cs index 69992f4..5474ea1 100644 --- a/SDCHttpProxy/Program.cs +++ b/SDCHttpProxy/Program.cs @@ -281,24 +281,26 @@ static void DpiBypassStaticProgram_OnChunkDetailsReceived(object? sender, EventA else if (input.ToLower().StartsWith("fakednsprogram")) { // fakednsprogram -disable/-text/-file -filePathOrText - string[] split = input.Split(" -", StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); - if (split.Length != 3) - { - WrongCommand(); - continue; - } - + string separator = " -"; + string[] split = input.Split(separator, StringSplitOptions.RemoveEmptyEntries); + HTTPProxyServer.Program.FakeDns.Mode mode = HTTPProxyServer.Program.FakeDns.Mode.Disable; if (split[1].ToLower().Equals("text")) mode = HTTPProxyServer.Program.FakeDns.Mode.Text; else if (split[1].ToLower().Equals("file")) mode = HTTPProxyServer.Program.FakeDns.Mode.File; else if (split[1].ToLower().Equals("disable")) mode = HTTPProxyServer.Program.FakeDns.Mode.Disable; - + string filePathOrText = split[2]; if (mode == HTTPProxyServer.Program.FakeDns.Mode.File) - filePathOrText = Path.GetFullPath(split[2]); + { + string filePath = string.Empty; + for (int n = 2; n < split.Length; n++) + filePath += $"{split[n]}{separator}"; + if (filePath.EndsWith(separator)) filePath = filePath[0..^2]; + filePathOrText = Path.GetFullPath(filePath); + } if (mode == HTTPProxyServer.Program.FakeDns.Mode.Text) filePathOrText = split[2].ToLower().Replace(@"\n", Environment.NewLine); - + FakeDnsProgram.Set(mode, filePathOrText); HTTPProxy.EnableFakeDNS(FakeDnsProgram); WriteToStdout($"Done (FakeDNSProgram). Mode: {mode}."); @@ -308,13 +310,9 @@ static void DpiBypassStaticProgram_OnChunkDetailsReceived(object? sender, EventA else if (input.ToLower().StartsWith("bwlistprogram")) { // bwlistprogram -disable/-blacklistfile/-blacklisttext/-whitelistfile/-whitelisttext -filePathOrText - string[] split = input.Split(" -", StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); - if (split.Length != 3) - { - WrongCommand(); - continue; - } - + string separator = " -"; + string[] split = input.Split(separator, StringSplitOptions.RemoveEmptyEntries); + HTTPProxyServer.Program.BlackWhiteList.Mode mode = HTTPProxyServer.Program.BlackWhiteList.Mode.Disable; if (split[1].ToLower().Equals("blacklistfile")) mode = HTTPProxyServer.Program.BlackWhiteList.Mode.BlackListFile; else if (split[1].ToLower().Equals("blacklisttext")) mode = HTTPProxyServer.Program.BlackWhiteList.Mode.BlackListText; @@ -324,7 +322,13 @@ static void DpiBypassStaticProgram_OnChunkDetailsReceived(object? sender, EventA string filePathOrText = split[2]; if (mode == HTTPProxyServer.Program.BlackWhiteList.Mode.BlackListFile || mode == HTTPProxyServer.Program.BlackWhiteList.Mode.WhiteListFile) - filePathOrText = Path.GetFullPath(split[2]); // Path + { + string filePath = string.Empty; + for (int n = 2; n < split.Length; n++) + filePath += $"{split[n]}{separator}"; + if (filePath.EndsWith(separator)) filePath = filePath[0..^2]; + filePathOrText = Path.GetFullPath(filePath); + } else if (mode == HTTPProxyServer.Program.BlackWhiteList.Mode.BlackListText || mode == HTTPProxyServer.Program.BlackWhiteList.Mode.WhiteListText) filePathOrText = split[2].ToLower().Replace(@"\n", Environment.NewLine); // Text @@ -337,13 +341,9 @@ static void DpiBypassStaticProgram_OnChunkDetailsReceived(object? sender, EventA else if (input.ToLower().StartsWith("dontbypassprogram")) { // dontbypassprogram -disable/-text/-file -filePathOrText - string[] split = input.Split(" -", StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); - if (split.Length != 3) - { - WrongCommand(); - continue; - } - + string separator = " -"; + string[] split = input.Split(separator, StringSplitOptions.RemoveEmptyEntries); + HTTPProxyServer.Program.DontBypass.Mode mode = HTTPProxyServer.Program.DontBypass.Mode.Disable; if (split[1].ToLower().Equals("file")) mode = HTTPProxyServer.Program.DontBypass.Mode.File; else if (split[1].ToLower().Equals("text")) mode = HTTPProxyServer.Program.DontBypass.Mode.Text; @@ -351,7 +351,13 @@ static void DpiBypassStaticProgram_OnChunkDetailsReceived(object? sender, EventA string filePathOrText = split[2]; if (mode == HTTPProxyServer.Program.DontBypass.Mode.File) - filePathOrText = Path.GetFullPath(split[2]); // Path + { + string filePath = string.Empty; + for (int n = 2; n < split.Length; n++) + filePath += $"{split[n]}{separator}"; + if (filePath.EndsWith(separator)) filePath = filePath[0..^2]; + filePathOrText = Path.GetFullPath(filePath); + } else if (mode == HTTPProxyServer.Program.DontBypass.Mode.Text) filePathOrText = split[2].ToLower().Replace(@"\n", Environment.NewLine); // Text @@ -400,6 +406,21 @@ static void DpiBypassStaticProgram_OnChunkDetailsReceived(object? sender, EventA WriteToStdout($"Done (KillOnCpuUsage). {percent}%."); } + else if (input.ToLower().StartsWith("requesttimeout")) + { + // requesttimeout -sec + string[] split = input.ToLower().Split(" -", StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); + if (split.Length != 2) + { + WrongCommand(); + continue; + } + + int reqTimeoutSec = int.Parse(split[1]); + HTTPProxy.RequestTimeoutSec = reqTimeoutSec; + WriteToStdout($"Done (RequestTimeout). {reqTimeoutSec} Second."); + } + // WriteRequestsToLog else if (input.ToLower().StartsWith("writerequests")) { @@ -547,6 +568,9 @@ static void Help() help += $"{NL}Kill On CPU Usage. Command:{NL}"; help += $"killoncpuusage -percent{NL}"; + + help += $"{NL}Kill Request On Timeout (Sec). Command:{NL}"; + help += $"requesttimeout -sec{NL}"; help += $"{NL}Write Requests to Stderr. Command:{NL}"; help += $"writerequests -true/-false{NL}"; diff --git a/SDCHttpProxy/Properties/PublishProfiles/FolderProfile.pubxml.user b/SDCHttpProxy/Properties/PublishProfiles/FolderProfile.pubxml.user index 6494ab4..0816a5b 100644 --- a/SDCHttpProxy/Properties/PublishProfiles/FolderProfile.pubxml.user +++ b/SDCHttpProxy/Properties/PublishProfiles/FolderProfile.pubxml.user @@ -4,6 +4,6 @@ https://go.microsoft.com/fwlink/?LinkID=208121. --> - True|2023-07-13T14:35:41.3620207Z;True|2023-07-13T16:18:32.1937413+04:30;True|2023-07-13T16:15:12.7912555+04:30;True|2023-07-11T17:49:58.5303478+04:30;True|2023-07-11T17:48:16.0501641+04:30;True|2023-07-11T17:47:14.5784060+04:30;True|2023-07-11T17:23:14.1610326+04:30;True|2023-07-11T17:21:51.0688737+04:30;True|2023-07-11T17:19:19.3562446+04:30;True|2023-07-11T17:17:55.0213267+04:30;True|2023-07-11T17:16:05.7691953+04:30;True|2023-07-11T17:15:34.1944427+04:30;True|2023-07-11T16:20:36.9637572+04:30;True|2023-07-11T16:03:30.2266056+04:30;True|2023-07-11T15:59:53.9669303+04:30;True|2023-07-11T15:05:37.6740597+04:30;True|2023-07-11T14:39:02.5575979+04:30;True|2023-07-11T14:17:00.1969231+04:30;True|2023-07-11T13:45:10.7941487+04:30;True|2023-07-11T13:26:25.8096070+04:30;True|2023-07-11T13:14:48.6462618+04:30;True|2023-07-10T21:58:25.3272593+04:30;True|2023-07-10T20:57:26.9398262+04:30;True|2023-07-10T20:39:25.5746205+04:30;True|2023-07-09T22:14:20.1499986+04:30;True|2023-07-09T18:44:22.6065214+04:30;True|2023-07-09T18:42:47.9763889+04:30;True|2023-07-09T18:41:31.4060259+04:30;True|2023-07-09T18:37:53.8576359+04:30;True|2023-07-09T18:30:27.4164715+04:30;True|2023-07-09T18:28:12.7848282+04:30;True|2023-07-09T18:25:50.0882590+04:30;True|2023-07-09T18:20:19.3634727+04:30;True|2023-07-09T02:08:03.5143153+04:30;True|2023-07-08T22:41:08.7729941+04:30;True|2023-07-08T22:04:49.1784496+04:30;True|2023-07-08T22:03:09.2139698+04:30;True|2023-07-08T21:57:51.3048041+04:30;True|2023-07-08T21:25:49.1817709+04:30;True|2023-07-08T21:17:42.7085928+04:30;True|2023-07-08T21:11:55.0121365+04:30;True|2023-07-08T21:03:28.9643080+04:30;True|2023-07-08T20:50:08.2679489+04:30;True|2023-07-08T16:55:15.7837590+04:30;True|2023-07-08T03:48:47.2353214+04:30; + True|2023-07-30T21:39:49.9080381Z;True|2023-07-31T02:01:31.1248838+04:30;True|2023-07-31T01:44:00.5511441+04:30;True|2023-07-31T01:41:04.6637633+04:30;True|2023-07-31T00:49:57.7502391+04:30;True|2023-07-31T00:44:34.7304772+04:30;True|2023-07-30T23:59:46.6393307+04:30;True|2023-07-30T22:04:59.3645658+04:30;True|2023-07-30T20:57:46.8758743+04:30;True|2023-07-30T20:56:49.5027055+04:30;True|2023-07-30T19:21:15.9998890+04:30;True|2023-07-30T19:20:00.3735047+04:30;True|2023-07-30T18:57:25.0349277+04:30;True|2023-07-30T18:17:12.2942792+04:30;True|2023-07-30T17:15:19.0671803+04:30;True|2023-07-29T19:57:54.1782503+04:30;True|2023-07-23T23:48:32.3356730+04:30;True|2023-07-23T20:36:23.7566513+04:30;True|2023-07-23T19:55:41.1033351+04:30;True|2023-07-23T19:38:23.9697864+04:30;True|2023-07-23T18:56:39.5629957+04:30;True|2023-07-13T19:05:41.3620207+04:30;True|2023-07-13T16:18:32.1937413+04:30;True|2023-07-13T16:15:12.7912555+04:30;True|2023-07-11T17:49:58.5303478+04:30;True|2023-07-11T17:48:16.0501641+04:30;True|2023-07-11T17:47:14.5784060+04:30;True|2023-07-11T17:23:14.1610326+04:30;True|2023-07-11T17:21:51.0688737+04:30;True|2023-07-11T17:19:19.3562446+04:30;True|2023-07-11T17:17:55.0213267+04:30;True|2023-07-11T17:16:05.7691953+04:30;True|2023-07-11T17:15:34.1944427+04:30;True|2023-07-11T16:20:36.9637572+04:30;True|2023-07-11T16:03:30.2266056+04:30;True|2023-07-11T15:59:53.9669303+04:30;True|2023-07-11T15:05:37.6740597+04:30;True|2023-07-11T14:39:02.5575979+04:30;True|2023-07-11T14:17:00.1969231+04:30;True|2023-07-11T13:45:10.7941487+04:30;True|2023-07-11T13:26:25.8096070+04:30;True|2023-07-11T13:14:48.6462618+04:30;True|2023-07-10T21:58:25.3272593+04:30;True|2023-07-10T20:57:26.9398262+04:30;True|2023-07-10T20:39:25.5746205+04:30;True|2023-07-09T22:14:20.1499986+04:30;True|2023-07-09T18:44:22.6065214+04:30;True|2023-07-09T18:42:47.9763889+04:30;True|2023-07-09T18:41:31.4060259+04:30;True|2023-07-09T18:37:53.8576359+04:30;True|2023-07-09T18:30:27.4164715+04:30;True|2023-07-09T18:28:12.7848282+04:30;True|2023-07-09T18:25:50.0882590+04:30;True|2023-07-09T18:20:19.3634727+04:30;True|2023-07-09T02:08:03.5143153+04:30;True|2023-07-08T22:41:08.7729941+04:30;True|2023-07-08T22:04:49.1784496+04:30;True|2023-07-08T22:03:09.2139698+04:30;True|2023-07-08T21:57:51.3048041+04:30;True|2023-07-08T21:25:49.1817709+04:30;True|2023-07-08T21:17:42.7085928+04:30;True|2023-07-08T21:11:55.0121365+04:30;True|2023-07-08T21:03:28.9643080+04:30;True|2023-07-08T20:50:08.2679489+04:30;True|2023-07-08T16:55:15.7837590+04:30;True|2023-07-08T03:48:47.2353214+04:30; \ No newline at end of file diff --git a/SDCHttpProxy/SDCHttpProxy.csproj b/SDCHttpProxy/SDCHttpProxy.csproj index c94ef91..2ad091d 100644 --- a/SDCHttpProxy/SDCHttpProxy.csproj +++ b/SDCHttpProxy/SDCHttpProxy.csproj @@ -7,7 +7,7 @@ true enable $(AssemblyName) - $(VersionPrefix)2.2.5 + $(VersionPrefix)2.3.0 MSasanMH SecureDNSClientMulti.ico diff --git a/SecureDNSClient/Forms/Certificate.cs b/SecureDNSClient/Forms/Certificate.cs new file mode 100644 index 0000000..5d3bd60 --- /dev/null +++ b/SecureDNSClient/Forms/Certificate.cs @@ -0,0 +1,81 @@ +using CustomControls; +using MsmhTools; +using System; +using System.Net; +using System.Security.Cryptography.X509Certificates; + +namespace SecureDNSClient +{ + public partial class FormMain + { + private void GenerateCertificate() + { + // Create certificate directory + FileDirectory.CreateEmptyDirectory(SecureDNS.CertificateDirPath); + string issuerSubjectName = SecureDNS.CertIssuerSubjectName; + string subjectName = SecureDNS.CertSubjectName; + + // Generate certificate + if (!File.Exists(SecureDNS.IssuerCertPath) || !File.Exists(SecureDNS.CertPath) || !File.Exists(SecureDNS.KeyPath)) + { + IPAddress? gateway = Network.GetDefaultGateway(); + if (gateway != null) + { + CertificateTool.GenerateCertificate(SecureDNS.CertificateDirPath, gateway, issuerSubjectName, subjectName); + CertificateTool.CreateP12(SecureDNS.IssuerCertPath, SecureDNS.IssuerKeyPath); + CertificateTool.CreateP12(SecureDNS.CertPath, SecureDNS.KeyPath); + } + } + + // Install certificate + if (File.Exists(SecureDNS.IssuerCertPath) && !CustomCheckBoxSettingDontAskCertificate.Checked) + { + bool certInstalled = CertificateTool.InstallCertificate(SecureDNS.IssuerCertPath, StoreName.Root, StoreLocation.CurrentUser); + if (!certInstalled) + { + string msg = "Local DoH Server doesn't work without certificate.\nYou can remove certificate anytime from Windows.\nTry again?"; + using (new CenterWinDialog(this)) + { + DialogResult dr = CustomMessageBox.Show(msg, "Certificate", MessageBoxButtons.YesNo, MessageBoxIcon.Information); + if (dr == DialogResult.Yes) + CertificateTool.InstallCertificate(SecureDNS.IssuerCertPath, StoreName.Root, StoreLocation.CurrentUser); + } + } + } + } + + private void UninstallCertificate() + { + string issuerSubjectName = SecureDNS.CertIssuerSubjectName.Replace("CN=", string.Empty); + bool isCertInstalled = CertificateTool.IsCertificateInstalled(issuerSubjectName, StoreName.Root, StoreLocation.CurrentUser); + if (isCertInstalled) + { + if (IsDoHConnected) + { + string msg = "Disconnect local DoH first."; + CustomMessageBox.Show(msg, "Certificate", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + // Uninstall Certs + CertificateTool.UninstallCertificate(issuerSubjectName, StoreName.Root, StoreLocation.CurrentUser); + + // Delete Cert Files + try + { + Directory.Delete(SecureDNS.CertificateDirPath, true); + } + catch (Exception) + { + // do nothing + } + } + else + { + string msg = "Certificate is already uninstalled."; + CustomMessageBox.Show(msg, "Certificate", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + + } +} diff --git a/SecureDNSClient/Forms/CheckServers.cs b/SecureDNSClient/Forms/CheckServers.cs index b9f5982..d0ad69a 100644 --- a/SecureDNSClient/Forms/CheckServers.cs +++ b/SecureDNSClient/Forms/CheckServers.cs @@ -5,7 +5,6 @@ using MsmhTools.DnsTool; using System.Diagnostics; using System.Reflection; -using System.Text; namespace SecureDNSClient { @@ -19,6 +18,9 @@ private async void StartCheck() if (!IsCheckingStarted) { // Start Checking + IsCheckingStarted = true; + IsCheckDone = false; + // Check Internet Connectivity if (!IsInternetAlive()) return; @@ -33,19 +35,20 @@ private async void StartCheck() try { - Task task = Task.Run(async () => - { - IsCheckingStarted = true; - IsCheckDone = false; - await CheckServers(); - }); + Task task = Task.Run(async () => await CheckServers()); await task.ContinueWith(_ => { // Save working servers to file - if (!CustomRadioButtonBuiltIn.Checked && WorkingDnsListToFile.Any()) + if (!CustomRadioButtonBuiltIn.Checked && WorkingDnsAndLatencyListToFile.Any()) { + // Sort By Latency + WorkingDnsAndLatencyListToFile = WorkingDnsAndLatencyListToFile.OrderBy(t => t.Item1).ToList(); + // Add Servers to WorkingDnsListToFile + WorkingDnsListToFile = WorkingDnsListToFile.Concat(WorkingDnsAndLatencyListToFile.Select(t => t.Item2).ToList()).ToList(); + // Remove Duplicates WorkingDnsListToFile = WorkingDnsListToFile.RemoveDuplicates(); + // Save to File WorkingDnsListToFile.SaveToFile(SecureDNS.WorkingServersPath); } @@ -75,6 +78,7 @@ await task.ContinueWith(_ => { // Stop Checking StopChecking = true; + this.InvokeIt(() => CustomProgressBarCheck.StopTimer = true); this.InvokeIt(() => CustomButtonCheck.Enabled = false); } } @@ -122,7 +126,7 @@ private async Task CheckServers() if (string.IsNullOrEmpty(blockedDomain)) return; // Warn users to deactivate DPI before checking servers - if (IsDPIActive) + if (IsGoodbyeDPIActive || (IsProxySet && IsProxyDPIActive)) { string msg = "It's better to not check servers while DPI Bypass is active.\nStart checking servers?"; var resume = CustomMessageBox.Show(msg, "DPI is active", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); @@ -176,6 +180,7 @@ private async Task CheckServers() // Clear working list to file on new check WorkingDnsListToFile.Clear(); + WorkingDnsAndLatencyListToFile.Clear(); string? fileContent = string.Empty; if (builtInMode) @@ -209,6 +214,9 @@ private async Task CheckServers() return; } + // init Check DNS + CheckDns checkDns = new(false, GetCPUPriority()); + // FlushDNS(); // Flush DNS makes first line always return failed // Clear temp working list on new check @@ -223,9 +231,9 @@ private async Task CheckServers() int numberOfCheckedServers = 0; // Dummy check to fix first run - SecureDNS.CheckDns(blockedDomainNoWww, dnsList[0], 100, GetCPUPriority()); - SecureDNS.CheckDns(blockedDomainNoWww, dnsList[0], 100, GetCPUPriority()); - SecureDNS.CheckDns(blockedDomainNoWww, dnsList[0], 100, GetCPUPriority()); + checkDns.CheckDNS(blockedDomainNoWww, dnsList[0], 100); + checkDns.CheckDNS(blockedDomainNoWww, dnsList[0], 100); + checkDns.CheckDNS(blockedDomainNoWww, dnsList[0], 100); if (insecure) checkSeries(); @@ -239,6 +247,8 @@ private async Task CheckServers() void checkSeries() { + this.InvokeIt(() => CustomProgressBarCheck.StopTimer = false); + this.InvokeIt(() => CustomProgressBarCheck.ChunksColor = Color.DodgerBlue); for (int n = 0; n < dnsCount; n++) { if (StopChecking) @@ -251,8 +261,9 @@ void checkSeries() // Percentage int persent = n * 100 / dnsCount; - string checkDetail = $"{n + 1} of {dnsCount} ({persent}%)"; - this.InvokeIt(() => CustomLabelCheckDetail.Text = checkDetail); + string checkDetail = $"{n + 1} of {dnsCount}"; + this.InvokeIt(() => CustomProgressBarCheck.CustomText = checkDetail); + this.InvokeIt(() => CustomProgressBarCheck.Value = persent); string dns = dnsList[n].Trim(); checkOne(dns, n + 1); @@ -260,8 +271,9 @@ void checkSeries() // Percentage (100%) if (n == dnsCount - 1) { - checkDetail = $"{n + 1} of {dnsCount} (100%)"; - this.InvokeIt(() => CustomLabelCheckDetail.Text = checkDetail); + checkDetail = $"{n + 1} of {dnsCount}"; + this.InvokeIt(() => CustomProgressBarCheck.CustomText = checkDetail); + this.InvokeIt(() => CustomProgressBarCheck.Value = 100); } } } @@ -274,6 +286,8 @@ await Task.Run(async () => var lists = dnsList.SplitToLists(splitSize); int count = 0; + this.InvokeIt(() => CustomProgressBarCheck.StopTimer = false); + this.InvokeIt(() => CustomProgressBarCheck.ChunksColor = Color.DodgerBlue); for (int n = 0; n < lists.Count; n++) { if (StopChecking) @@ -289,8 +303,9 @@ await Task.Run(async () => // Percentage int persent = n * 100 / lists.Count; count += list.Count; - string checkDetail = $"{count} of {dnsCount} ({persent}%)"; - this.InvokeIt(() => CustomLabelCheckDetail.Text = checkDetail); + string checkDetail = $"{count} of {dnsCount}"; + this.InvokeIt(() => CustomProgressBarCheck.CustomText = checkDetail); + this.InvokeIt(() => CustomProgressBarCheck.Value = persent); var parallelLoopResult = Parallel.For(0, list.Count, i => { @@ -311,8 +326,9 @@ await Task.Run(async () => // Percentage (100%) if (n == lists.Count - 1) { - checkDetail = $"{dnsCount} of {dnsCount} (100%)"; - this.InvokeIt(() => CustomLabelCheckDetail.Text = checkDetail); + checkDetail = $"{dnsCount} of {dnsCount}"; + this.InvokeIt(() => CustomProgressBarCheck.CustomText = checkDetail); + this.InvokeIt(() => CustomProgressBarCheck.Value = 100); } } }); @@ -332,16 +348,18 @@ void checkOne(string dns, int lineNumber) // Get DNS Details DnsReader dnsReader = new(dns, companyDataContent); - + // Get Unknown Companies (Debug Only) //if (dnsReader.CompanyName.ToLower().Contains("couldn't retrieve")) //{ // string p = @"C:\Users\msasa\OneDrive\Desktop\getInfo.txt"; // FileDirectory.CreateEmptyFile(p); - // string? serv = dnsReader.IP; - // if (string.IsNullOrEmpty(serv)) serv = dnsReader.Host; + // string serv = dnsReader.Host; + // if (string.IsNullOrEmpty(serv) && !string.IsNullOrEmpty(dnsReader.IP)) serv = dnsReader.IP; // FileDirectory.AppendTextLine(p, serv, new UTF8Encoding(false)); //} + //if (dnsReader.CompanyName.ToLower().Contains("china")) + // Debug.WriteLine("CHINA: " + dns); // Apply Protocol Selection bool matchRules = CheckDnsMatchRules(dnsReader); @@ -352,33 +370,57 @@ void checkOne(string dns, int lineNumber) this.InvokeIt(() =>timeoutSec = CustomNumericUpDownSettingCheckTimeout.Value); int timeoutMS = decimal.ToInt32(timeoutSec * 1000); - // Get Status and Latency - bool dnsOK = false; - int latency = -1; - // Is this being called by parallel? bool isParallel = lineNumber == -1; + if (checkDns.CheckForFilters) + { + // Generate Google Force Safe Search IPs + checkDns.GenerateGoogleSafeSearchIps(dns); + + // Generate Adult IPs + checkDns.GenerateAdultDomainIps(dns); + } + if (insecure) - latency = SecureDNS.CheckDns(true, blockedDomainNoWww, dns, timeoutMS, localPort, bootstrap, bootstrapPort, GetCPUPriority()); + checkDns.CheckDNS(true, blockedDomainNoWww, dns, timeoutMS, localPort, bootstrap, bootstrapPort); else { if (isParallel) - latency = SecureDNS.CheckDns(blockedDomainNoWww, dns, timeoutMS, GetCPUPriority()); + checkDns.CheckDNS(blockedDomainNoWww, dns, timeoutMS); else - latency = SecureDNS.CheckDns(false, blockedDomainNoWww, dns, timeoutMS, localPort, bootstrap, bootstrapPort, GetCPUPriority()); + checkDns.CheckDNS(false, blockedDomainNoWww, dns, timeoutMS, localPort, bootstrap, bootstrapPort); } - dnsOK = latency != -1; + // Get Status and Latency + bool dnsOK = checkDns.IsDnsOnline; + int latency = checkDns.DnsLatency; + if (checkDns.IsSafeSearch || checkDns.IsAdultFilter) + { + Debug.WriteLine("==== Debug ===="); + Debug.WriteLine(dns); + Debug.WriteLine("IsSafeSearch: " + checkDns.IsSafeSearch); + Debug.WriteLine("IsAdultFilter: " + checkDns.IsAdultFilter); + } + // Add working DNS to list if (dnsOK) { - WorkingDnsList.Add(new Tuple(latency, dns)); + if (!checkDns.CheckForFilters || + (checkDns.CheckForFilters && !checkDns.IsSafeSearch && !checkDns.IsAdultFilter)) + { + WorkingDnsList.Add(new Tuple(latency, dns)); - // Add working DNS to list to export - if (!builtInMode) - WorkingDnsListToFile.Add(dns); + // Add working DNS to list to export + if (!builtInMode) + WorkingDnsAndLatencyListToFile.Add(new Tuple(latency, dns)); + } + else + { + // Has Filter + return; + } } // Checked servers ++ diff --git a/SecureDNSClient/Forms/Connect.cs b/SecureDNSClient/Forms/Connect.cs index 0e6141c..a0ed400 100644 --- a/SecureDNSClient/Forms/Connect.cs +++ b/SecureDNSClient/Forms/Connect.cs @@ -1,12 +1,7 @@ using CustomControls; using MsmhTools; using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; using System.Net; -using System.Text; -using System.Threading.Tasks; namespace SecureDNSClient { @@ -30,6 +25,9 @@ private async void StartConnect() // Check Internet Connectivity if (!IsInternetAlive()) return; + // Create uid + SecureDNS.GenerateUid(this); + // Update NICs SecureDNS.UpdateNICs(CustomComboBoxNICs); @@ -161,6 +159,9 @@ private bool CheckBypassWorks(int timeoutMS, int attempts, int pid) string msg2 = "..."; this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msg1, Color.MediumSeaGreen)); + // New Check + CheckDns checkDns = new(false, GetCPUPriority()); + for (int n = 0; n < attempts; n++) { if (!IsConnected || IsDisconnecting) return false; @@ -170,10 +171,10 @@ private bool CheckBypassWorks(int timeoutMS, int attempts, int pid) this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msg2, Color.MediumSeaGreen)); // Delay - int latency = SecureDNS.CheckDns(blockedDomainNoWww, loopback, timeoutMS, GetCPUPriority()); - bool result = latency != -1; + checkDns.CheckDNS(blockedDomainNoWww, loopback, timeoutMS); + Task.Delay(500).Wait(); // Wait a moment - if (result) + if (checkDns.IsDnsOnline) { // Update bool IsConnected = true; @@ -186,7 +187,7 @@ private bool CheckBypassWorks(int timeoutMS, int attempts, int pid) string msgDelay1 = "Server delay: "; string msgDelay2 = $" ms.{NL}"; this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDelay1, Color.Orange)); - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(latency.ToString(), Color.DodgerBlue)); + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(checkDns.DnsLatency.ToString(), Color.DodgerBlue)); this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDelay2, Color.Orange)); return true; } @@ -206,7 +207,7 @@ private async Task Connect() string msgConnecting = "Connecting... Please wait..." + NL + NL; this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgConnecting, Color.MediumSeaGreen)); - // Check open ports + // Check Plain DNS port bool portDns = GetListeningPort(53, "You need to resolve the conflict.", Color.IndianRed); if (!portDns) { @@ -214,13 +215,17 @@ private async Task Connect() return; } - bool portDoH = GetListeningPort(GetDohPortSetting(), "You need to resolve the conflict.", Color.IndianRed); - if (!portDoH) + // Check DoH port if working mode is set to Plain DNS and DoH + if (CustomRadioButtonSettingWorkingModeDNSandDoH.Checked) { - IsConnecting = false; - return; + bool portDoH = GetListeningPort(GetDohPortSetting(), "You need to resolve the conflict.", Color.IndianRed); + if (!portDoH) + { + IsConnecting = false; + return; + } } - + // Flush DNS FlushDNS(false); @@ -246,7 +251,6 @@ private async Task Connect() break; await Task.Delay(100); } - return Task.CompletedTask; }); await wait1.WaitAsync(TimeSpan.FromSeconds(5)); @@ -259,7 +263,6 @@ private async Task Connect() break; await Task.Delay(100); } - return Task.CompletedTask; }); await wait2.WaitAsync(TimeSpan.FromSeconds(30)); @@ -309,7 +312,18 @@ private async Task Connect() { //=== Connect To Servers Using Proxy await ConnectToServersUsingProxy(); - await Task.Delay(1000); + + // Wait for DNSCrypt + Task wait1 = Task.Run(async () => + { + while (!ProcessManager.FindProcessByPID(PIDDNSCrypt)) + { + if (ProcessManager.FindProcessByPID(PIDDNSCrypt)) + break; + await Task.Delay(100); + } + }); + await wait1.WaitAsync(TimeSpan.FromSeconds(5)); if (ProcessManager.FindProcessByPID(PIDDNSCrypt)) { @@ -381,7 +395,7 @@ void connectMessage() if (ConnectedDohPort == 443) msgLocalDoH3 = $"https://{LocalIP}/dns-query"; else - msgLocalDoH3 = $"{NL}https://{LocalIP}:{ConnectedDohPort}/dns-query"; + msgLocalDoH3 = $"https://{LocalIP}:{ConnectedDohPort}/dns-query"; msgLocalDoH3 += NL; this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgLocalDoH3, Color.DodgerBlue)); } diff --git a/SecureDNSClient/Forms/ConnectToFakeProxy.cs b/SecureDNSClient/Forms/ConnectToFakeProxy.cs index e526cbc..72a7d86 100644 --- a/SecureDNSClient/Forms/ConnectToFakeProxy.cs +++ b/SecureDNSClient/Forms/ConnectToFakeProxy.cs @@ -1,11 +1,7 @@ using MsmhTools; using System; -using System.Collections.Generic; using System.Diagnostics; -using System.Linq; using System.Net; -using System.Text; -using System.Threading.Tasks; namespace SecureDNSClient { @@ -68,12 +64,13 @@ int getNextPort(int currentPort) if (string.IsNullOrEmpty(blockedDomain)) return false; // Set timeout (ms) - int timeoutMS = 5000; + int timeoutMS = 10000; // Check Fake Proxy DoH - int latency = SecureDNS.CheckDns(blockedDomainNoWww, dohUrl, timeoutMS, GetCPUPriority()); - bool isCfOpen = latency != -1; - if (isCfOpen) + CheckDns checkDns = new(false, GetCPUPriority()); + checkDns.CheckDNS(blockedDomainNoWww, dohUrl, timeoutMS / 2); + + if (checkDns.IsDnsOnline) { // Not blocked, connect normally return connectToFakeProxyDohNormally(); @@ -146,10 +143,10 @@ bool connectToFakeProxyDohNormally() // Set domain to check string domainToCheck = "google.com"; - // Delay - int latency = SecureDNS.CheckDns(domainToCheck, dohUrl, timeoutMS * 10, GetCPUPriority()); - bool result = latency != -1; - if (result) + // Check DNS + checkDns.CheckDNS(domainToCheck, dohUrl, timeoutMS * 10); + + if (checkDns.IsDnsOnline) { if (IsDisconnecting) return false; @@ -161,7 +158,7 @@ bool connectToFakeProxyDohNormally() string msgDelay1 = "Server delay: "; string msgDelay2 = $" ms.{NL}"; this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDelay1, Color.Orange)); - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(latency.ToString(), Color.DodgerBlue)); + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(checkDns.DnsLatency.ToString(), Color.DodgerBlue)); this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDelay2, Color.Orange)); return true; diff --git a/SecureDNSClient/Forms/ConnectToServersUsingProxy.cs b/SecureDNSClient/Forms/ConnectToServersUsingProxy.cs index b49c749..56c3c97 100644 --- a/SecureDNSClient/Forms/ConnectToServersUsingProxy.cs +++ b/SecureDNSClient/Forms/ConnectToServersUsingProxy.cs @@ -1,12 +1,8 @@ using MsmhTools; using MsmhTools.DnsTool; using System; -using System.Collections.Generic; using System.Diagnostics; -using System.Linq; using System.Net; -using System.Text; -using System.Threading.Tasks; namespace SecureDNSClient { @@ -92,7 +88,7 @@ void proxySchemeIncorrect() await dnsCryptConfig.WriteAsync(); // Args - string args = $"-config {SecureDNS.DNSCryptConfigPath}"; + string args = $"-config \"{SecureDNS.DNSCryptConfigPath}\""; if (IsDisconnecting) return; diff --git a/SecureDNSClient/Forms/ConnectToWorkingServers.cs b/SecureDNSClient/Forms/ConnectToWorkingServers.cs index e388f33..a2a8536 100644 --- a/SecureDNSClient/Forms/ConnectToWorkingServers.cs +++ b/SecureDNSClient/Forms/ConnectToWorkingServers.cs @@ -1,10 +1,6 @@ using MsmhTools; using System; -using System.Collections.Generic; using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace SecureDNSClient { diff --git a/SecureDNSClient/Forms/FormDnsLookup.Designer.cs b/SecureDNSClient/Forms/FormDnsLookup.Designer.cs index b7646dc..7fff969 100644 --- a/SecureDNSClient/Forms/FormDnsLookup.Designer.cs +++ b/SecureDNSClient/Forms/FormDnsLookup.Designer.cs @@ -50,6 +50,7 @@ private void InitializeComponent() this.CustomLabelEDNSOPT = new CustomControls.CustomLabel(); this.CustomTextBoxEDNSOPT = new CustomControls.CustomTextBox(); this.CustomButtonDefault = new CustomControls.CustomButton(); + this.CustomCheckBoxJSON = new CustomControls.CustomCheckBox(); this.SuspendLayout(); // // CustomRadioButtonSourceSDC @@ -451,6 +452,20 @@ private void InitializeComponent() this.CustomButtonDefault.UseVisualStyleBackColor = true; this.CustomButtonDefault.Click += new System.EventHandler(this.CustomButtonDefault_Click); // + // CustomCheckBoxJSON + // + this.CustomCheckBoxJSON.BackColor = System.Drawing.Color.DimGray; + this.CustomCheckBoxJSON.BorderColor = System.Drawing.Color.Blue; + this.CustomCheckBoxJSON.CheckColor = System.Drawing.Color.Blue; + this.CustomCheckBoxJSON.ForeColor = System.Drawing.Color.White; + this.CustomCheckBoxJSON.Location = new System.Drawing.Point(340, 100); + this.CustomCheckBoxJSON.Name = "CustomCheckBoxJSON"; + this.CustomCheckBoxJSON.SelectionColor = System.Drawing.Color.LightBlue; + this.CustomCheckBoxJSON.Size = new System.Drawing.Size(44, 17); + this.CustomCheckBoxJSON.TabIndex = 34; + this.CustomCheckBoxJSON.Text = "Json"; + this.CustomCheckBoxJSON.UseVisualStyleBackColor = false; + // // FormDnsLookup // this.AcceptButton = this.CustomButtonLookup; @@ -458,6 +473,7 @@ private void InitializeComponent() this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.Color.DimGray; this.ClientSize = new System.Drawing.Size(459, 461); + this.Controls.Add(this.CustomCheckBoxJSON); this.Controls.Add(this.CustomButtonDefault); this.Controls.Add(this.CustomTextBoxEDNSOPT); this.Controls.Add(this.CustomLabelEDNSOPT); @@ -516,5 +532,6 @@ private void InitializeComponent() private CustomControls.CustomLabel CustomLabelEDNSOPT; private CustomControls.CustomTextBox CustomTextBoxEDNSOPT; private CustomControls.CustomButton CustomButtonDefault; + private CustomControls.CustomCheckBox CustomCheckBoxJSON; } } \ No newline at end of file diff --git a/SecureDNSClient/Forms/FormDnsLookup.cs b/SecureDNSClient/Forms/FormDnsLookup.cs index 9f57875..686eb69 100644 --- a/SecureDNSClient/Forms/FormDnsLookup.cs +++ b/SecureDNSClient/Forms/FormDnsLookup.cs @@ -9,7 +9,7 @@ namespace SecureDNSClient public partial class FormDnsLookup : Form { // Settings XML path - private static readonly string SettingsXmlPath = Path.GetFullPath(SecureDNS.CurrentPath + "DnsLookupSettings.xml"); + private static readonly string SettingsXmlPath = SecureDNS.SettingsXmlDnsLookup; private readonly Settings AppSettings; private List ResultList = new(); private int PID = -1; @@ -134,6 +134,12 @@ private async void CustomButtonLookup_Click(object sender, EventArgs e) else process.StartInfo.EnvironmentVariables["VERBOSE"] = ""; + bool json = CustomCheckBoxJSON.Checked; + if (json) + process.StartInfo.EnvironmentVariables["JSON"] = "1"; + else + process.StartInfo.EnvironmentVariables["JSON"] = ""; + string rrtype = CustomTextBoxRRTYPE.Text.Trim(); if (string.IsNullOrWhiteSpace(rrtype)) rrtype = "A"; process.StartInfo.EnvironmentVariables["RRTYPE"] = rrtype; @@ -173,14 +179,15 @@ await Task.Run(() => result = stdout + Environment.NewLine + errout; string resultOut = string.Empty; - string remove1 = "dnslookup result "; + string remove1 = "dnslookup"; + string remove2 = "dnslookup result "; ResultList = result.SplitToLines(); for (int n = 0; n < ResultList.Count; n++) { - if (n == 0) continue; string line = ResultList[n]; + if (n == 0 && line.Contains(remove1)) continue; if (n == 1 && string.IsNullOrEmpty(line)) continue; - if (line.Contains(remove1)) line = line.Replace(remove1, string.Empty); + if (line.Contains(remove2)) line = line.Replace(remove2, string.Empty); resultOut += line + Environment.NewLine; } diff --git a/SecureDNSClient/Forms/FormIpScanner.cs b/SecureDNSClient/Forms/FormIpScanner.cs index 1604ec6..a353957 100644 --- a/SecureDNSClient/Forms/FormIpScanner.cs +++ b/SecureDNSClient/Forms/FormIpScanner.cs @@ -8,7 +8,7 @@ namespace SecureDNSClient public partial class FormIpScanner : Form { // Settings XML path - private static readonly string SettingsXmlPath = Path.GetFullPath(SecureDNS.CurrentPath + "IpScannerSettings.xml"); + private static readonly string SettingsXmlPath = SecureDNS.SettingsXmlIpScanner; private readonly Settings AppSettings; private readonly IpScanner Scanner = new(); diff --git a/SecureDNSClient/Forms/FormMain.Designer.cs b/SecureDNSClient/Forms/FormMain.Designer.cs index 3d66518..0805ef9 100644 --- a/SecureDNSClient/Forms/FormMain.Designer.cs +++ b/SecureDNSClient/Forms/FormMain.Designer.cs @@ -51,8 +51,10 @@ private void InitializeComponent() this.TabPageSecureDNS = new System.Windows.Forms.TabPage(); this.CustomTabControlSecureDNS = new CustomControls.CustomTabControl(); this.TabPageCheck = new System.Windows.Forms.TabPage(); + this.CustomProgressBarCheck = new CustomControls.CustomProgressBar(); + this.LinkLabelCheckUpdate = new System.Windows.Forms.LinkLabel(); + this.CustomButtonCheckUpdate = new CustomControls.CustomButton(); this.CustomCheckBoxCheckInParallel = new CustomControls.CustomCheckBox(); - this.CustomLabelCheckDetail = new CustomControls.CustomLabel(); this.CustomButtonConnectAll = new CustomControls.CustomButton(); this.TabPageConnect = new System.Windows.Forms.TabPage(); this.CustomButtonWriteSavedServersDelay = new CustomControls.CustomButton(); @@ -181,6 +183,8 @@ private void InitializeComponent() this.TabPageSettingsShare = new System.Windows.Forms.TabPage(); this.CustomTabControlSettingHttpProxy = new CustomControls.CustomTabControl(); this.TabPageSettingHttpProxyBasic = new System.Windows.Forms.TabPage(); + this.CustomNumericUpDownSettingHTTPProxyKillRequestTimeout = new CustomControls.CustomNumericUpDown(); + this.CustomLabelSettingHTTPProxyKillRequestTimeout = new CustomControls.CustomLabel(); this.CustomCheckBoxSettingHTTPProxyUpstreamOnlyBlockedIPs = new CustomControls.CustomCheckBox(); this.CustomNumericUpDownSettingHTTPProxyUpstreamPort = new CustomControls.CustomNumericUpDown(); this.CustomTextBoxSettingHTTPProxyUpstreamHost = new CustomControls.CustomTextBox(); @@ -239,6 +243,8 @@ private void InitializeComponent() this.CustomCheckBoxSettingDontAskCertificate = new CustomControls.CustomCheckBox(); this.CustomTextBoxSettingBootstrapDnsIP = new CustomControls.CustomTextBox(); this.TabPageAbout = new System.Windows.Forms.TabPage(); + this.CustomLabelAboutVersion = new CustomControls.CustomLabel(); + this.PictureBoxFarvahar = new System.Windows.Forms.PictureBox(); this.CustomLabelAboutCopyright = new CustomControls.CustomLabel(); this.LinkLabelStAlidxdydz = new System.Windows.Forms.LinkLabel(); this.CustomLabelAboutSpecialThanks = new CustomControls.CustomLabel(); @@ -247,7 +253,6 @@ private void InitializeComponent() this.LinkLabelDNSProxy = new System.Windows.Forms.LinkLabel(); this.LinkLabelDNSLookup = new System.Windows.Forms.LinkLabel(); this.CustomLabelAboutUsing = new CustomControls.CustomLabel(); - this.CustomLabelAboutVersion = new CustomControls.CustomLabel(); this.CustomLabelAboutThis2 = new CustomControls.CustomLabel(); this.CustomLabelAboutThis = new CustomControls.CustomLabel(); this.PictureBoxAbout = new System.Windows.Forms.PictureBox(); @@ -270,7 +275,6 @@ private void InitializeComponent() this.CustomRichTextBoxStatusWorkingServers = new CustomControls.CustomRichTextBox(); this.SplitContainerMain = new System.Windows.Forms.SplitContainer(); this.SplitContainerTop = new System.Windows.Forms.SplitContainer(); - this.CustomButtonCheckUpdate = new CustomControls.CustomButton(); this.CustomGroupBoxLog.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.CustomNumericUpDownSSLFragmentSize)).BeginInit(); this.CustomTabControlMain.SuspendLayout(); @@ -311,6 +315,7 @@ private void InitializeComponent() this.TabPageSettingsShare.SuspendLayout(); this.CustomTabControlSettingHttpProxy.SuspendLayout(); this.TabPageSettingHttpProxyBasic.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.CustomNumericUpDownSettingHTTPProxyKillRequestTimeout)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.CustomNumericUpDownSettingHTTPProxyUpstreamPort)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.CustomNumericUpDownSettingHTTPProxyPort)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.CustomNumericUpDownSettingHTTPProxyHandleRequests)).BeginInit(); @@ -323,6 +328,7 @@ private void InitializeComponent() ((System.ComponentModel.ISupportInitialize)(this.CustomNumericUpDownSettingFallbackDnsPort)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.CustomNumericUpDownSettingBootstrapDnsPort)).BeginInit(); this.TabPageAbout.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PictureBoxFarvahar)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.PictureBoxAbout)).BeginInit(); this.CustomGroupBoxStatus.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.SplitContainerMain)).BeginInit(); @@ -378,7 +384,7 @@ private void InitializeComponent() this.CustomButtonCheck.AutoSize = true; this.CustomButtonCheck.BorderColor = System.Drawing.Color.Blue; this.CustomButtonCheck.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.CustomButtonCheck.Location = new System.Drawing.Point(210, 303); + this.CustomButtonCheck.Location = new System.Drawing.Point(160, 303); this.CustomButtonCheck.Name = "CustomButtonCheck"; this.CustomButtonCheck.RoundedCorners = 5; this.CustomButtonCheck.SelectionColor = System.Drawing.Color.LightBlue; @@ -428,7 +434,7 @@ private void InitializeComponent() this.CustomLabelCustomServersInfo.Location = new System.Drawing.Point(41, 75); this.CustomLabelCustomServersInfo.Name = "CustomLabelCustomServersInfo"; this.CustomLabelCustomServersInfo.RoundedCorners = 0; - this.CustomLabelCustomServersInfo.Size = new System.Drawing.Size(218, 92); + this.CustomLabelCustomServersInfo.Size = new System.Drawing.Size(216, 90); this.CustomLabelCustomServersInfo.TabIndex = 6; this.CustomLabelCustomServersInfo.Text = "Supported: DoH, DoT, DoQ, DNSCrypt.\r\nEach line one server. e.g:\r\n https://cloudf" + "lare-dns.com/dns-query\r\n tls://dns.google\r\n quic://dns.adguard.com\r\n sdns://"; @@ -439,7 +445,7 @@ private void InitializeComponent() this.CustomButtonEditCustomServers.AutoSize = true; this.CustomButtonEditCustomServers.BorderColor = System.Drawing.Color.Blue; this.CustomButtonEditCustomServers.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.CustomButtonEditCustomServers.Location = new System.Drawing.Point(40, 303); + this.CustomButtonEditCustomServers.Location = new System.Drawing.Point(25, 303); this.CustomButtonEditCustomServers.Name = "CustomButtonEditCustomServers"; this.CustomButtonEditCustomServers.RoundedCorners = 5; this.CustomButtonEditCustomServers.SelectionColor = System.Drawing.Color.LightBlue; @@ -661,7 +667,7 @@ private void InitializeComponent() this.CustomTabControlMain.Size = new System.Drawing.Size(700, 400); this.CustomTabControlMain.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; this.CustomTabControlMain.TabIndex = 6; - this.CustomTabControlMain.Tag = 0; + this.CustomTabControlMain.Tag = 3; // // TabPageSecureDNS // @@ -696,9 +702,10 @@ private void InitializeComponent() // TabPageCheck // this.TabPageCheck.BackColor = System.Drawing.Color.Transparent; + this.TabPageCheck.Controls.Add(this.CustomProgressBarCheck); + this.TabPageCheck.Controls.Add(this.LinkLabelCheckUpdate); this.TabPageCheck.Controls.Add(this.CustomButtonCheckUpdate); this.TabPageCheck.Controls.Add(this.CustomCheckBoxCheckInParallel); - this.TabPageCheck.Controls.Add(this.CustomLabelCheckDetail); this.TabPageCheck.Controls.Add(this.CustomButtonConnectAll); this.TabPageCheck.Controls.Add(this.CustomButtonCheck); this.TabPageCheck.Controls.Add(this.CustomButtonEditCustomServers); @@ -714,6 +721,51 @@ private void InitializeComponent() this.TabPageCheck.Tag = 0; this.TabPageCheck.Text = "1. Check"; // + // CustomProgressBarCheck + // + this.CustomProgressBarCheck.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CustomProgressBarCheck.BackColor = System.Drawing.Color.DimGray; + this.CustomProgressBarCheck.BorderColor = System.Drawing.Color.Blue; + this.CustomProgressBarCheck.ChunksColor = System.Drawing.Color.LightBlue; + this.CustomProgressBarCheck.CustomText = ""; + this.CustomProgressBarCheck.ForeColor = System.Drawing.Color.White; + this.CustomProgressBarCheck.Location = new System.Drawing.Point(266, 303); + this.CustomProgressBarCheck.Name = "CustomProgressBarCheck"; + this.CustomProgressBarCheck.RoundedCorners = 5; + this.CustomProgressBarCheck.Size = new System.Drawing.Size(300, 27); + this.CustomProgressBarCheck.StopTimer = false; + this.CustomProgressBarCheck.TabIndex = 16; + // + // LinkLabelCheckUpdate + // + this.LinkLabelCheckUpdate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.LinkLabelCheckUpdate.AutoSize = true; + this.LinkLabelCheckUpdate.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline; + this.LinkLabelCheckUpdate.Location = new System.Drawing.Point(500, 280); + this.LinkLabelCheckUpdate.Name = "LinkLabelCheckUpdate"; + this.LinkLabelCheckUpdate.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.LinkLabelCheckUpdate.Size = new System.Drawing.Size(173, 15); + this.LinkLabelCheckUpdate.TabIndex = 15; + this.LinkLabelCheckUpdate.TabStop = true; + this.LinkLabelCheckUpdate.Text = "There is a new version v00.00.00"; + // + // CustomButtonCheckUpdate + // + this.CustomButtonCheckUpdate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CustomButtonCheckUpdate.AutoSize = true; + this.CustomButtonCheckUpdate.BorderColor = System.Drawing.Color.Blue; + this.CustomButtonCheckUpdate.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.CustomButtonCheckUpdate.Location = new System.Drawing.Point(579, 303); + this.CustomButtonCheckUpdate.Name = "CustomButtonCheckUpdate"; + this.CustomButtonCheckUpdate.RoundedCorners = 5; + this.CustomButtonCheckUpdate.SelectionColor = System.Drawing.Color.LightBlue; + this.CustomButtonCheckUpdate.Size = new System.Drawing.Size(93, 27); + this.CustomButtonCheckUpdate.TabIndex = 13; + this.CustomButtonCheckUpdate.Text = "Check Update"; + this.CustomButtonCheckUpdate.UseVisualStyleBackColor = true; + this.CustomButtonCheckUpdate.Click += new System.EventHandler(this.CustomButtonCheckUpdate_Click); + // // CustomCheckBoxCheckInParallel // this.CustomCheckBoxCheckInParallel.BackColor = System.Drawing.Color.DimGray; @@ -728,29 +780,13 @@ private void InitializeComponent() this.CustomCheckBoxCheckInParallel.Text = "Check in parallel"; this.CustomCheckBoxCheckInParallel.UseVisualStyleBackColor = false; // - // CustomLabelCheckDetail - // - this.CustomLabelCheckDetail.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.CustomLabelCheckDetail.AutoSize = true; - this.CustomLabelCheckDetail.BackColor = System.Drawing.Color.DimGray; - this.CustomLabelCheckDetail.Border = false; - this.CustomLabelCheckDetail.BorderColor = System.Drawing.Color.Blue; - this.CustomLabelCheckDetail.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.CustomLabelCheckDetail.ForeColor = System.Drawing.Color.White; - this.CustomLabelCheckDetail.Location = new System.Drawing.Point(323, 309); - this.CustomLabelCheckDetail.Name = "CustomLabelCheckDetail"; - this.CustomLabelCheckDetail.RoundedCorners = 0; - this.CustomLabelCheckDetail.Size = new System.Drawing.Size(25, 17); - this.CustomLabelCheckDetail.TabIndex = 11; - this.CustomLabelCheckDetail.Text = "0%"; - // // CustomButtonConnectAll // this.CustomButtonConnectAll.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.CustomButtonConnectAll.AutoSize = true; this.CustomButtonConnectAll.BorderColor = System.Drawing.Color.Blue; this.CustomButtonConnectAll.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.CustomButtonConnectAll.Location = new System.Drawing.Point(514, 255); + this.CustomButtonConnectAll.Location = new System.Drawing.Point(514, 212); this.CustomButtonConnectAll.Name = "CustomButtonConnectAll"; this.CustomButtonConnectAll.RoundedCorners = 5; this.CustomButtonConnectAll.SelectionColor = System.Drawing.Color.LightBlue; @@ -818,9 +854,9 @@ private void InitializeComponent() this.CustomRadioButtonConnectFakeProxyDohViaGoodbyeDPI.Location = new System.Drawing.Point(25, 125); this.CustomRadioButtonConnectFakeProxyDohViaGoodbyeDPI.Name = "CustomRadioButtonConnectFakeProxyDohViaGoodbyeDPI"; this.CustomRadioButtonConnectFakeProxyDohViaGoodbyeDPI.SelectionColor = System.Drawing.Color.LightBlue; - this.CustomRadioButtonConnectFakeProxyDohViaGoodbyeDPI.Size = new System.Drawing.Size(376, 17); + this.CustomRadioButtonConnectFakeProxyDohViaGoodbyeDPI.Size = new System.Drawing.Size(395, 17); this.CustomRadioButtonConnectFakeProxyDohViaGoodbyeDPI.TabIndex = 15; - this.CustomRadioButtonConnectFakeProxyDohViaGoodbyeDPI.Text = "Connect to Fake Proxy DoH using GoodbyeDPI (Light & Medium)"; + this.CustomRadioButtonConnectFakeProxyDohViaGoodbyeDPI.Text = "Connect to Fake Proxy DoH using GoodbyeDPI (Light & User Choice)"; this.CustomRadioButtonConnectFakeProxyDohViaGoodbyeDPI.UseVisualStyleBackColor = false; // // CustomRadioButtonConnectCheckedServers @@ -1002,6 +1038,11 @@ private void InitializeComponent() 0, 0, 0}); + this.CustomNumericUpDownPDpiBeforeSniChunks.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); this.CustomNumericUpDownPDpiBeforeSniChunks.Name = "CustomNumericUpDownPDpiBeforeSniChunks"; this.CustomNumericUpDownPDpiBeforeSniChunks.Size = new System.Drawing.Size(45, 23); this.CustomNumericUpDownPDpiBeforeSniChunks.TabIndex = 44; @@ -1182,6 +1223,11 @@ private void InitializeComponent() 0, 0, 0}); + this.CustomNumericUpDownPDpiSniChunks.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); this.CustomNumericUpDownPDpiSniChunks.Name = "CustomNumericUpDownPDpiSniChunks"; this.CustomNumericUpDownPDpiSniChunks.Size = new System.Drawing.Size(45, 23); this.CustomNumericUpDownPDpiSniChunks.TabIndex = 28; @@ -1278,9 +1324,9 @@ private void InitializeComponent() this.CustomLabelShareInfo.Location = new System.Drawing.Point(25, 10); this.CustomLabelShareInfo.Name = "CustomLabelShareInfo"; this.CustomLabelShareInfo.RoundedCorners = 0; - this.CustomLabelShareInfo.Size = new System.Drawing.Size(421, 21); + this.CustomLabelShareInfo.Size = new System.Drawing.Size(317, 21); this.CustomLabelShareInfo.TabIndex = 14; - this.CustomLabelShareInfo.Text = "Share to other devices on the same network. (Experimental)"; + this.CustomLabelShareInfo.Text = "Share to other devices on the same network."; // // TabPageGoodbyeDPI // @@ -1308,7 +1354,7 @@ private void InitializeComponent() this.CustomTabControlDPIBasicAdvanced.Size = new System.Drawing.Size(672, 330); this.CustomTabControlDPIBasicAdvanced.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; this.CustomTabControlDPIBasicAdvanced.TabIndex = 13; - this.CustomTabControlDPIBasicAdvanced.Tag = 0; + this.CustomTabControlDPIBasicAdvanced.Tag = 1; // // TabPageDPIBasic // @@ -2229,7 +2275,7 @@ private void InitializeComponent() this.CustomTabControlSettings.Size = new System.Drawing.Size(686, 365); this.CustomTabControlSettings.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; this.CustomTabControlSettings.TabIndex = 10; - this.CustomTabControlSettings.Tag = 7; + this.CustomTabControlSettings.Tag = 0; // // TabPageSettingsWorkingMode // @@ -2916,6 +2962,8 @@ private void InitializeComponent() // TabPageSettingHttpProxyBasic // this.TabPageSettingHttpProxyBasic.BackColor = System.Drawing.Color.Transparent; + this.TabPageSettingHttpProxyBasic.Controls.Add(this.CustomNumericUpDownSettingHTTPProxyKillRequestTimeout); + this.TabPageSettingHttpProxyBasic.Controls.Add(this.CustomLabelSettingHTTPProxyKillRequestTimeout); this.TabPageSettingHttpProxyBasic.Controls.Add(this.CustomCheckBoxSettingHTTPProxyUpstreamOnlyBlockedIPs); this.TabPageSettingHttpProxyBasic.Controls.Add(this.CustomNumericUpDownSettingHTTPProxyUpstreamPort); this.TabPageSettingHttpProxyBasic.Controls.Add(this.CustomTextBoxSettingHTTPProxyUpstreamHost); @@ -2936,6 +2984,46 @@ private void InitializeComponent() this.TabPageSettingHttpProxyBasic.Tag = 0; this.TabPageSettingHttpProxyBasic.Text = "Basic"; // + // CustomNumericUpDownSettingHTTPProxyKillRequestTimeout + // + this.CustomNumericUpDownSettingHTTPProxyKillRequestTimeout.BackColor = System.Drawing.Color.DimGray; + this.CustomNumericUpDownSettingHTTPProxyKillRequestTimeout.BorderColor = System.Drawing.Color.Blue; + this.CustomNumericUpDownSettingHTTPProxyKillRequestTimeout.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.CustomNumericUpDownSettingHTTPProxyKillRequestTimeout.Location = new System.Drawing.Point(172, 63); + this.CustomNumericUpDownSettingHTTPProxyKillRequestTimeout.Maximum = new decimal(new int[] { + 300, + 0, + 0, + 0}); + this.CustomNumericUpDownSettingHTTPProxyKillRequestTimeout.Minimum = new decimal(new int[] { + 5, + 0, + 0, + 0}); + this.CustomNumericUpDownSettingHTTPProxyKillRequestTimeout.Name = "CustomNumericUpDownSettingHTTPProxyKillRequestTimeout"; + this.CustomNumericUpDownSettingHTTPProxyKillRequestTimeout.Size = new System.Drawing.Size(55, 23); + this.CustomNumericUpDownSettingHTTPProxyKillRequestTimeout.TabIndex = 56; + this.CustomNumericUpDownSettingHTTPProxyKillRequestTimeout.Value = new decimal(new int[] { + 20, + 0, + 0, + 0}); + // + // CustomLabelSettingHTTPProxyKillRequestTimeout + // + this.CustomLabelSettingHTTPProxyKillRequestTimeout.AutoSize = true; + this.CustomLabelSettingHTTPProxyKillRequestTimeout.BackColor = System.Drawing.Color.DimGray; + this.CustomLabelSettingHTTPProxyKillRequestTimeout.Border = false; + this.CustomLabelSettingHTTPProxyKillRequestTimeout.BorderColor = System.Drawing.Color.Blue; + this.CustomLabelSettingHTTPProxyKillRequestTimeout.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.CustomLabelSettingHTTPProxyKillRequestTimeout.ForeColor = System.Drawing.Color.White; + this.CustomLabelSettingHTTPProxyKillRequestTimeout.Location = new System.Drawing.Point(6, 65); + this.CustomLabelSettingHTTPProxyKillRequestTimeout.Name = "CustomLabelSettingHTTPProxyKillRequestTimeout"; + this.CustomLabelSettingHTTPProxyKillRequestTimeout.RoundedCorners = 0; + this.CustomLabelSettingHTTPProxyKillRequestTimeout.Size = new System.Drawing.Size(158, 15); + this.CustomLabelSettingHTTPProxyKillRequestTimeout.TabIndex = 55; + this.CustomLabelSettingHTTPProxyKillRequestTimeout.Text = "Kill request on timeout (sec):"; + // // CustomCheckBoxSettingHTTPProxyUpstreamOnlyBlockedIPs // this.CustomCheckBoxSettingHTTPProxyUpstreamOnlyBlockedIPs.BackColor = System.Drawing.Color.DimGray; @@ -2944,7 +3032,7 @@ private void InitializeComponent() this.CustomCheckBoxSettingHTTPProxyUpstreamOnlyBlockedIPs.Checked = true; this.CustomCheckBoxSettingHTTPProxyUpstreamOnlyBlockedIPs.CheckState = System.Windows.Forms.CheckState.Checked; this.CustomCheckBoxSettingHTTPProxyUpstreamOnlyBlockedIPs.ForeColor = System.Drawing.Color.White; - this.CustomCheckBoxSettingHTTPProxyUpstreamOnlyBlockedIPs.Location = new System.Drawing.Point(25, 110); + this.CustomCheckBoxSettingHTTPProxyUpstreamOnlyBlockedIPs.Location = new System.Drawing.Point(25, 135); this.CustomCheckBoxSettingHTTPProxyUpstreamOnlyBlockedIPs.Name = "CustomCheckBoxSettingHTTPProxyUpstreamOnlyBlockedIPs"; this.CustomCheckBoxSettingHTTPProxyUpstreamOnlyBlockedIPs.SelectionColor = System.Drawing.Color.LightBlue; this.CustomCheckBoxSettingHTTPProxyUpstreamOnlyBlockedIPs.Size = new System.Drawing.Size(159, 17); @@ -2957,7 +3045,7 @@ private void InitializeComponent() this.CustomNumericUpDownSettingHTTPProxyUpstreamPort.BackColor = System.Drawing.Color.DimGray; this.CustomNumericUpDownSettingHTTPProxyUpstreamPort.BorderColor = System.Drawing.Color.Blue; this.CustomNumericUpDownSettingHTTPProxyUpstreamPort.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.CustomNumericUpDownSettingHTTPProxyUpstreamPort.Location = new System.Drawing.Point(370, 140); + this.CustomNumericUpDownSettingHTTPProxyUpstreamPort.Location = new System.Drawing.Point(370, 165); this.CustomNumericUpDownSettingHTTPProxyUpstreamPort.Maximum = new decimal(new int[] { 65535, 0, @@ -2989,7 +3077,7 @@ private void InitializeComponent() this.CustomTextBoxSettingHTTPProxyUpstreamHost.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); this.CustomTextBoxSettingHTTPProxyUpstreamHost.ForeColor = System.Drawing.Color.White; this.CustomTextBoxSettingHTTPProxyUpstreamHost.HideSelection = true; - this.CustomTextBoxSettingHTTPProxyUpstreamHost.Location = new System.Drawing.Point(156, 140); + this.CustomTextBoxSettingHTTPProxyUpstreamHost.Location = new System.Drawing.Point(156, 165); this.CustomTextBoxSettingHTTPProxyUpstreamHost.MaxLength = 32767; this.CustomTextBoxSettingHTTPProxyUpstreamHost.Multiline = false; this.CustomTextBoxSettingHTTPProxyUpstreamHost.Name = "CustomTextBoxSettingHTTPProxyUpstreamHost"; @@ -3012,7 +3100,7 @@ private void InitializeComponent() this.CustomLabelSettingHTTPProxyUpstreamPort.BorderColor = System.Drawing.Color.Blue; this.CustomLabelSettingHTTPProxyUpstreamPort.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.CustomLabelSettingHTTPProxyUpstreamPort.ForeColor = System.Drawing.Color.White; - this.CustomLabelSettingHTTPProxyUpstreamPort.Location = new System.Drawing.Point(330, 143); + this.CustomLabelSettingHTTPProxyUpstreamPort.Location = new System.Drawing.Point(330, 168); this.CustomLabelSettingHTTPProxyUpstreamPort.Name = "CustomLabelSettingHTTPProxyUpstreamPort"; this.CustomLabelSettingHTTPProxyUpstreamPort.RoundedCorners = 0; this.CustomLabelSettingHTTPProxyUpstreamPort.Size = new System.Drawing.Size(32, 15); @@ -3027,7 +3115,7 @@ private void InitializeComponent() this.CustomLabelSettingHTTPProxyUpstreamHost.BorderColor = System.Drawing.Color.Blue; this.CustomLabelSettingHTTPProxyUpstreamHost.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.CustomLabelSettingHTTPProxyUpstreamHost.ForeColor = System.Drawing.Color.White; - this.CustomLabelSettingHTTPProxyUpstreamHost.Location = new System.Drawing.Point(113, 143); + this.CustomLabelSettingHTTPProxyUpstreamHost.Location = new System.Drawing.Point(113, 168); this.CustomLabelSettingHTTPProxyUpstreamHost.Name = "CustomLabelSettingHTTPProxyUpstreamHost"; this.CustomLabelSettingHTTPProxyUpstreamHost.RoundedCorners = 0; this.CustomLabelSettingHTTPProxyUpstreamHost.Size = new System.Drawing.Size(35, 15); @@ -3045,7 +3133,7 @@ private void InitializeComponent() this.CustomComboBoxSettingHttpProxyUpstreamMode.Items.AddRange(new object[] { "HTTP", "SOCKS5"}); - this.CustomComboBoxSettingHttpProxyUpstreamMode.Location = new System.Drawing.Point(25, 140); + this.CustomComboBoxSettingHttpProxyUpstreamMode.Location = new System.Drawing.Point(25, 165); this.CustomComboBoxSettingHttpProxyUpstreamMode.Name = "CustomComboBoxSettingHttpProxyUpstreamMode"; this.CustomComboBoxSettingHttpProxyUpstreamMode.SelectionColor = System.Drawing.Color.DodgerBlue; this.CustomComboBoxSettingHttpProxyUpstreamMode.Size = new System.Drawing.Size(70, 23); @@ -3057,7 +3145,7 @@ private void InitializeComponent() this.CustomCheckBoxSettingHTTPProxyUpstream.BorderColor = System.Drawing.Color.Blue; this.CustomCheckBoxSettingHTTPProxyUpstream.CheckColor = System.Drawing.Color.Blue; this.CustomCheckBoxSettingHTTPProxyUpstream.ForeColor = System.Drawing.Color.White; - this.CustomCheckBoxSettingHTTPProxyUpstream.Location = new System.Drawing.Point(6, 80); + this.CustomCheckBoxSettingHTTPProxyUpstream.Location = new System.Drawing.Point(6, 105); this.CustomCheckBoxSettingHTTPProxyUpstream.Name = "CustomCheckBoxSettingHTTPProxyUpstream"; this.CustomCheckBoxSettingHTTPProxyUpstream.SelectionColor = System.Drawing.Color.LightBlue; this.CustomCheckBoxSettingHTTPProxyUpstream.Size = new System.Drawing.Size(129, 17); @@ -3073,7 +3161,7 @@ private void InitializeComponent() this.CustomLabelSettingHTTPProxyPort.BorderColor = System.Drawing.Color.Blue; this.CustomLabelSettingHTTPProxyPort.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.CustomLabelSettingHTTPProxyPort.ForeColor = System.Drawing.Color.White; - this.CustomLabelSettingHTTPProxyPort.Location = new System.Drawing.Point(6, 27); + this.CustomLabelSettingHTTPProxyPort.Location = new System.Drawing.Point(6, 25); this.CustomLabelSettingHTTPProxyPort.Name = "CustomLabelSettingHTTPProxyPort"; this.CustomLabelSettingHTTPProxyPort.RoundedCorners = 0; this.CustomLabelSettingHTTPProxyPort.Size = new System.Drawing.Size(99, 15); @@ -3088,7 +3176,7 @@ private void InitializeComponent() this.CustomCheckBoxSettingProxyBlockPort80.Checked = true; this.CustomCheckBoxSettingProxyBlockPort80.CheckState = System.Windows.Forms.CheckState.Checked; this.CustomCheckBoxSettingProxyBlockPort80.ForeColor = System.Drawing.Color.White; - this.CustomCheckBoxSettingProxyBlockPort80.Location = new System.Drawing.Point(390, 27); + this.CustomCheckBoxSettingProxyBlockPort80.Location = new System.Drawing.Point(390, 25); this.CustomCheckBoxSettingProxyBlockPort80.Name = "CustomCheckBoxSettingProxyBlockPort80"; this.CustomCheckBoxSettingProxyBlockPort80.SelectionColor = System.Drawing.Color.LightBlue; this.CustomCheckBoxSettingProxyBlockPort80.Size = new System.Drawing.Size(93, 17); @@ -3104,7 +3192,7 @@ private void InitializeComponent() this.CustomLabelSettingHTTPProxyHandleRequests.BorderColor = System.Drawing.Color.Blue; this.CustomLabelSettingHTTPProxyHandleRequests.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.CustomLabelSettingHTTPProxyHandleRequests.ForeColor = System.Drawing.Color.White; - this.CustomLabelSettingHTTPProxyHandleRequests.Location = new System.Drawing.Point(190, 27); + this.CustomLabelSettingHTTPProxyHandleRequests.Location = new System.Drawing.Point(190, 25); this.CustomLabelSettingHTTPProxyHandleRequests.Name = "CustomLabelSettingHTTPProxyHandleRequests"; this.CustomLabelSettingHTTPProxyHandleRequests.RoundedCorners = 0; this.CustomLabelSettingHTTPProxyHandleRequests.Size = new System.Drawing.Size(95, 15); @@ -3116,7 +3204,7 @@ private void InitializeComponent() this.CustomNumericUpDownSettingHTTPProxyPort.BackColor = System.Drawing.Color.DimGray; this.CustomNumericUpDownSettingHTTPProxyPort.BorderColor = System.Drawing.Color.Blue; this.CustomNumericUpDownSettingHTTPProxyPort.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.CustomNumericUpDownSettingHTTPProxyPort.Location = new System.Drawing.Point(113, 25); + this.CustomNumericUpDownSettingHTTPProxyPort.Location = new System.Drawing.Point(113, 23); this.CustomNumericUpDownSettingHTTPProxyPort.Maximum = new decimal(new int[] { 65535, 0, @@ -3141,7 +3229,7 @@ private void InitializeComponent() this.CustomNumericUpDownSettingHTTPProxyHandleRequests.BackColor = System.Drawing.Color.DimGray; this.CustomNumericUpDownSettingHTTPProxyHandleRequests.BorderColor = System.Drawing.Color.Blue; this.CustomNumericUpDownSettingHTTPProxyHandleRequests.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.CustomNumericUpDownSettingHTTPProxyHandleRequests.Location = new System.Drawing.Point(297, 25); + this.CustomNumericUpDownSettingHTTPProxyHandleRequests.Location = new System.Drawing.Point(297, 23); this.CustomNumericUpDownSettingHTTPProxyHandleRequests.Maximum = new decimal(new int[] { 50000, 0, @@ -3952,6 +4040,9 @@ private void InitializeComponent() // TabPageAbout // this.TabPageAbout.BackColor = System.Drawing.Color.Transparent; + this.TabPageAbout.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.TabPageAbout.Controls.Add(this.CustomLabelAboutVersion); + this.TabPageAbout.Controls.Add(this.PictureBoxFarvahar); this.TabPageAbout.Controls.Add(this.CustomLabelAboutCopyright); this.TabPageAbout.Controls.Add(this.LinkLabelStAlidxdydz); this.TabPageAbout.Controls.Add(this.CustomLabelAboutSpecialThanks); @@ -3960,7 +4051,6 @@ private void InitializeComponent() this.TabPageAbout.Controls.Add(this.LinkLabelDNSProxy); this.TabPageAbout.Controls.Add(this.LinkLabelDNSLookup); this.TabPageAbout.Controls.Add(this.CustomLabelAboutUsing); - this.TabPageAbout.Controls.Add(this.CustomLabelAboutVersion); this.TabPageAbout.Controls.Add(this.CustomLabelAboutThis2); this.TabPageAbout.Controls.Add(this.CustomLabelAboutThis); this.TabPageAbout.Controls.Add(this.PictureBoxAbout); @@ -3972,6 +4062,31 @@ private void InitializeComponent() this.TabPageAbout.Tag = 3; this.TabPageAbout.Text = "About"; // + // CustomLabelAboutVersion + // + this.CustomLabelAboutVersion.AutoSize = true; + this.CustomLabelAboutVersion.BackColor = System.Drawing.Color.DimGray; + this.CustomLabelAboutVersion.Border = false; + this.CustomLabelAboutVersion.BorderColor = System.Drawing.Color.Blue; + this.CustomLabelAboutVersion.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.CustomLabelAboutVersion.ForeColor = System.Drawing.Color.White; + this.CustomLabelAboutVersion.Location = new System.Drawing.Point(600, 51); + this.CustomLabelAboutVersion.Name = "CustomLabelAboutVersion"; + this.CustomLabelAboutVersion.RoundedCorners = 0; + this.CustomLabelAboutVersion.Size = new System.Drawing.Size(47, 17); + this.CustomLabelAboutVersion.TabIndex = 7; + this.CustomLabelAboutVersion.Text = "Version"; + // + // PictureBoxFarvahar + // + this.PictureBoxFarvahar.Image = global::SecureDNSClient.Properties.Resources.FarvaharBlueRed; + this.PictureBoxFarvahar.Location = new System.Drawing.Point(55, 230); + this.PictureBoxFarvahar.Name = "PictureBoxFarvahar"; + this.PictureBoxFarvahar.Size = new System.Drawing.Size(128, 60); + this.PictureBoxFarvahar.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.PictureBoxFarvahar.TabIndex = 12; + this.PictureBoxFarvahar.TabStop = false; + // // CustomLabelAboutCopyright // this.CustomLabelAboutCopyright.AutoSize = true; @@ -3983,7 +4098,7 @@ private void InitializeComponent() this.CustomLabelAboutCopyright.Location = new System.Drawing.Point(55, 185); this.CustomLabelAboutCopyright.Name = "CustomLabelAboutCopyright"; this.CustomLabelAboutCopyright.RoundedCorners = 0; - this.CustomLabelAboutCopyright.Size = new System.Drawing.Size(109, 30); + this.CustomLabelAboutCopyright.Size = new System.Drawing.Size(111, 32); this.CustomLabelAboutCopyright.TabIndex = 11; this.CustomLabelAboutCopyright.Text = "© 2023 MSasanMH\r\nLicense: GPLv3"; // @@ -4010,7 +4125,7 @@ private void InitializeComponent() this.CustomLabelAboutSpecialThanks.Location = new System.Drawing.Point(446, 135); this.CustomLabelAboutSpecialThanks.Name = "CustomLabelAboutSpecialThanks"; this.CustomLabelAboutSpecialThanks.RoundedCorners = 0; - this.CustomLabelAboutSpecialThanks.Size = new System.Drawing.Size(81, 75); + this.CustomLabelAboutSpecialThanks.Size = new System.Drawing.Size(83, 77); this.CustomLabelAboutSpecialThanks.TabIndex = 9; this.CustomLabelAboutSpecialThanks.Text = "special thanks\r\n{\r\n\r\n\r\n}"; // @@ -4073,25 +4188,10 @@ private void InitializeComponent() this.CustomLabelAboutUsing.Location = new System.Drawing.Point(270, 135); this.CustomLabelAboutUsing.Name = "CustomLabelAboutUsing"; this.CustomLabelAboutUsing.RoundedCorners = 0; - this.CustomLabelAboutUsing.Size = new System.Drawing.Size(36, 120); + this.CustomLabelAboutUsing.Size = new System.Drawing.Size(38, 122); this.CustomLabelAboutUsing.TabIndex = 8; this.CustomLabelAboutUsing.Text = "using\r\n{\r\n\r\n\r\n\r\n\r\n\r\n}"; // - // CustomLabelAboutVersion - // - this.CustomLabelAboutVersion.AutoSize = true; - this.CustomLabelAboutVersion.BackColor = System.Drawing.Color.DimGray; - this.CustomLabelAboutVersion.Border = false; - this.CustomLabelAboutVersion.BorderColor = System.Drawing.Color.Blue; - this.CustomLabelAboutVersion.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.CustomLabelAboutVersion.ForeColor = System.Drawing.Color.White; - this.CustomLabelAboutVersion.Location = new System.Drawing.Point(600, 51); - this.CustomLabelAboutVersion.Name = "CustomLabelAboutVersion"; - this.CustomLabelAboutVersion.RoundedCorners = 0; - this.CustomLabelAboutVersion.Size = new System.Drawing.Size(45, 15); - this.CustomLabelAboutVersion.TabIndex = 7; - this.CustomLabelAboutVersion.Text = "Version"; - // // CustomLabelAboutThis2 // this.CustomLabelAboutThis2.AutoSize = true; @@ -4103,14 +4203,14 @@ private void InitializeComponent() this.CustomLabelAboutThis2.Location = new System.Drawing.Point(267, 75); this.CustomLabelAboutThis2.Name = "CustomLabelAboutThis2"; this.CustomLabelAboutThis2.RoundedCorners = 0; - this.CustomLabelAboutThis2.Size = new System.Drawing.Size(333, 15); + this.CustomLabelAboutThis2.Size = new System.Drawing.Size(335, 17); this.CustomLabelAboutThis2.TabIndex = 2; this.CustomLabelAboutThis2.Text = "A GUI for DNSLookup, DNSProxy, DNSCrypt and GoodbyeDPI."; // // CustomLabelAboutThis // this.CustomLabelAboutThis.AutoSize = true; - this.CustomLabelAboutThis.BackColor = System.Drawing.Color.DimGray; + this.CustomLabelAboutThis.BackColor = System.Drawing.Color.Transparent; this.CustomLabelAboutThis.Border = false; this.CustomLabelAboutThis.BorderColor = System.Drawing.Color.Blue; this.CustomLabelAboutThis.Cursor = System.Windows.Forms.Cursors.Hand; @@ -4120,7 +4220,7 @@ private void InitializeComponent() this.CustomLabelAboutThis.Location = new System.Drawing.Point(235, 33); this.CustomLabelAboutThis.Name = "CustomLabelAboutThis"; this.CustomLabelAboutThis.RoundedCorners = 0; - this.CustomLabelAboutThis.Size = new System.Drawing.Size(367, 32); + this.CustomLabelAboutThis.Size = new System.Drawing.Size(369, 34); this.CustomLabelAboutThis.TabIndex = 1; this.CustomLabelAboutThis.Text = "SDC - Secure DNS Client"; this.CustomLabelAboutThis.Click += new System.EventHandler(this.CustomLabelAboutThis_Click); @@ -4690,22 +4790,6 @@ private void InitializeComponent() this.SplitContainerTop.SplitterDistance = 700; this.SplitContainerTop.TabIndex = 0; // - // CustomButtonCheckUpdate - // - this.CustomButtonCheckUpdate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.CustomButtonCheckUpdate.AutoSize = true; - this.CustomButtonCheckUpdate.BorderColor = System.Drawing.Color.Blue; - this.CustomButtonCheckUpdate.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.CustomButtonCheckUpdate.Location = new System.Drawing.Point(579, 303); - this.CustomButtonCheckUpdate.Name = "CustomButtonCheckUpdate"; - this.CustomButtonCheckUpdate.RoundedCorners = 5; - this.CustomButtonCheckUpdate.SelectionColor = System.Drawing.Color.LightBlue; - this.CustomButtonCheckUpdate.Size = new System.Drawing.Size(93, 27); - this.CustomButtonCheckUpdate.TabIndex = 13; - this.CustomButtonCheckUpdate.Text = "Check Update"; - this.CustomButtonCheckUpdate.UseVisualStyleBackColor = true; - this.CustomButtonCheckUpdate.Click += new System.EventHandler(this.CustomButtonCheckUpdate_Click); - // // FormMain // this.AcceptButton = this.CustomButtonCheck; @@ -4775,6 +4859,7 @@ private void InitializeComponent() this.CustomTabControlSettingHttpProxy.ResumeLayout(false); this.TabPageSettingHttpProxyBasic.ResumeLayout(false); this.TabPageSettingHttpProxyBasic.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.CustomNumericUpDownSettingHTTPProxyKillRequestTimeout)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.CustomNumericUpDownSettingHTTPProxyUpstreamPort)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.CustomNumericUpDownSettingHTTPProxyPort)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.CustomNumericUpDownSettingHTTPProxyHandleRequests)).EndInit(); @@ -4792,6 +4877,7 @@ private void InitializeComponent() ((System.ComponentModel.ISupportInitialize)(this.CustomNumericUpDownSettingBootstrapDnsPort)).EndInit(); this.TabPageAbout.ResumeLayout(false); this.TabPageAbout.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PictureBoxFarvahar)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.PictureBoxAbout)).EndInit(); this.CustomGroupBoxStatus.ResumeLayout(false); this.CustomGroupBoxStatus.PerformLayout(); @@ -4974,7 +5060,6 @@ private void InitializeComponent() private CustomControls.CustomRichTextBox CustomRichTextBoxStatusLocalDoH; private CustomControls.CustomRichTextBox CustomRichTextBoxStatusLocalDnsLatency; private CustomControls.CustomRichTextBox CustomRichTextBoxStatusLocalDNS; - private CustomControls.CustomLabel CustomLabelCheckDetail; private CustomControls.CustomRichTextBox CustomRichTextBoxStatusProxyRequests; private SplitContainer SplitContainerMain; private SplitContainer SplitContainerTop; @@ -5049,5 +5134,10 @@ private void InitializeComponent() private CustomControls.CustomLabel CustomLabelPDpiPresets; private CustomControls.CustomButton CustomButtonPDpiPresetDefault; private CustomControls.CustomButton CustomButtonCheckUpdate; + private LinkLabel LinkLabelCheckUpdate; + private CustomControls.CustomNumericUpDown CustomNumericUpDownSettingHTTPProxyKillRequestTimeout; + private CustomControls.CustomLabel CustomLabelSettingHTTPProxyKillRequestTimeout; + private CustomControls.CustomProgressBar CustomProgressBarCheck; + private PictureBox PictureBoxFarvahar; } } \ No newline at end of file diff --git a/SecureDNSClient/Forms/FormMain.cs b/SecureDNSClient/Forms/FormMain.cs index 673fd51..1a49b25 100644 --- a/SecureDNSClient/Forms/FormMain.cs +++ b/SecureDNSClient/Forms/FormMain.cs @@ -1,14 +1,10 @@ using System.Net; using System.Diagnostics; -using System.Security.Cryptography.X509Certificates; using MsmhTools; using MsmhTools.HTTPProxyServer; using MsmhTools.Themes; using CustomControls; -using System.Net.NetworkInformation; using System.Text; -using System.Media; -using MsmhTools.DnsTool; using System.Reflection; // https://github.com/msasanmh/SecureDNSClient @@ -21,6 +17,7 @@ public partial class FormMain : Form public List SavedDnsList = new(); public List SavedEncodedDnsList = new(); private List WorkingDnsListToFile = new(); + private List> WorkingDnsAndLatencyListToFile = new(); private bool Once = true; private bool IsCheckingForUpdate = false; private bool IsCheckingStarted = false; @@ -29,7 +26,7 @@ public partial class FormMain : Form private bool IsConnecting = false; private bool IsDisconnecting = false; private bool IsConnected = false; - public static bool IsDNSConnected = false; + public static bool IsDNSConnected { get; set; } = false; public bool IsDoHConnected = false; private int ConnectedDohPort = 443; private bool IsDPIActive = false; @@ -43,7 +40,7 @@ public partial class FormMain : Form private bool ConnectAllClicked = false; private IPAddress? LocalIP = IPAddress.Loopback; // as default public Settings AppSettings; - private ToolStripMenuItem ToolStripMenuItemIcon = new(); + private readonly ToolStripMenuItem ToolStripMenuItemIcon = new(); private bool AudioAlertOnline = true; private bool AudioAlertOffline = false; private bool AudioAlertRequestsExceeded = false; @@ -68,10 +65,6 @@ public partial class FormMain : Form private int PIDDNSProxyBypass = -1; private int PIDGoodbyeDPIBypass = -1; - // Fake Proxy - private HTTPProxyServer FakeProxy = new(); - public static HTTPProxyServer.Program.DPIBypass StaticDPIBypassProgram { get; private set; } = new(); - // HTTP Proxy private int PIDHttpProxy { get; set; } = -1; private Process? ProxyProcess; @@ -93,6 +86,10 @@ public partial class FormMain : Form private bool IsProxySet = false; private static bool UpdateProxyBools = true; + // Fake Proxy + private int PIDFakeProxy { get; set; } = -1; + private Process? FakeProxyProcess; + public FormMain() { InitializeComponent(); @@ -111,6 +108,9 @@ public FormMain() ToolStripMenuItemIcon.Click += ToolStripMenuItemIcon_Click; CustomContextMenuStripIcon.Items.Add(ToolStripMenuItemIcon); + // Update NICs + SecureDNS.UpdateNICs(CustomComboBoxNICs); + // Startup Defaults string productName = Info.GetAppInfo(Assembly.GetExecutingAssembly()).ProductName ?? "SDC - Secure DNS Client"; string productVersion = Info.GetAppInfo(Assembly.GetExecutingAssembly()).ProductVersion ?? "0.0.0"; @@ -123,6 +123,12 @@ public FormMain() // Set NotifyIcon Text NotifyIconMain.Text = Text; + // Create User Dir if not Exist + FileDirectory.CreateEmptyDirectory(SecureDNS.UserDataDirPath); + + // Move User Data to the new location + MoveToNewLocation(); + // Add Tooltips string msgCheckInParallel = "a) Don't use parallel on slow network."; msgCheckInParallel += $"{NL}b) Parallel doesn't support bootstrap."; @@ -191,9 +197,7 @@ public FormMain() else AppSettings = new(this); - // Update NICs - SecureDNS.UpdateNICs(CustomComboBoxNICs); - + CheckUpdateAuto(); LogClearAuto(); UpdateBoolsAuto(); UpdateBoolDnsDohAuto(); @@ -243,1859 +247,164 @@ private void FormMain_Move(object? sender, EventArgs e) LabelMoving.BringToFront(); } - private void FormMain_ResizeEnd(object? sender, EventArgs e) - { - SplitContainerMain.Visible = true; - LabelMoving.Visible = false; - LabelMoving.SendToBack(); - } - - private void FormMain_Resize(object? sender, EventArgs e) - { - if (WindowState != FormWindowState.Minimized) - { - SplitContainerMain.Visible = true; - LabelMoving.Visible = false; - LabelMoving.SendToBack(); - } - } - - //============================== Constant - - private void DefaultSettings() - { - // Check - CustomRadioButtonBuiltIn.Checked = true; - CustomRadioButtonCustom.Checked = false; - CustomCheckBoxCheckInParallel.Checked = false; - CustomCheckBoxInsecure.Checked = false; - - // Connect - CustomRadioButtonConnectCheckedServers.Checked = true; - CustomRadioButtonConnectFakeProxyDohViaProxyDPI.Checked = false; - CustomRadioButtonConnectFakeProxyDohViaGoodbyeDPI.Checked = false; - CustomRadioButtonConnectDNSCrypt.Checked = false; - CustomTextBoxHTTPProxy.Text = string.Empty; - - // Share - CustomCheckBoxHTTPProxyEventShowRequest.Checked = false; - CustomCheckBoxHTTPProxyEventShowChunkDetails.Checked = false; - CustomCheckBoxPDpiEnableDpiBypass.Checked = true; - CustomNumericUpDownPDpiBeforeSniChunks.Value = (decimal)50; - CustomComboBoxPDpiSniChunkMode.SelectedIndex = 0; - CustomNumericUpDownPDpiSniChunks.Value = (decimal)5; - CustomNumericUpDownPDpiAntiPatternOffset.Value = (decimal)2; - CustomNumericUpDownPDpiFragDelay.Value = (decimal)1; - - // DPI Basic - CustomRadioButtonDPIMode1.Checked = false; - CustomRadioButtonDPIMode2.Checked = false; - CustomRadioButtonDPIMode3.Checked = false; - CustomRadioButtonDPIMode4.Checked = false; - CustomRadioButtonDPIMode5.Checked = false; - CustomRadioButtonDPIMode6.Checked = false; - CustomRadioButtonDPIModeLight.Checked = true; - CustomRadioButtonDPIModeMedium.Checked = false; - CustomRadioButtonDPIModeHigh.Checked = false; - CustomRadioButtonDPIModeExtreme.Checked = false; - CustomNumericUpDownSSLFragmentSize.Value = (decimal)40; - - // DPI Advanced - CustomCheckBoxDPIAdvP.Checked = true; - CustomCheckBoxDPIAdvR.Checked = true; - CustomCheckBoxDPIAdvS.Checked = true; - CustomCheckBoxDPIAdvM.Checked = true; - CustomCheckBoxDPIAdvF.Checked = false; - CustomNumericUpDownDPIAdvF.Value = (decimal)2; - CustomCheckBoxDPIAdvK.Checked = false; - CustomNumericUpDownDPIAdvK.Value = (decimal)2; - CustomCheckBoxDPIAdvN.Checked = false; - CustomCheckBoxDPIAdvE.Checked = true; - CustomNumericUpDownDPIAdvE.Value = (decimal)40; - CustomCheckBoxDPIAdvA.Checked = false; - CustomCheckBoxDPIAdvW.Checked = true; - CustomCheckBoxDPIAdvPort.Checked = false; - CustomNumericUpDownDPIAdvPort.Value = (decimal)80; - CustomCheckBoxDPIAdvIpId.Checked = false; - CustomTextBoxDPIAdvIpId.Text = string.Empty; - CustomCheckBoxDPIAdvAllowNoSNI.Checked = false; - CustomCheckBoxDPIAdvSetTTL.Checked = false; - CustomNumericUpDownDPIAdvSetTTL.Value = (decimal)1; - CustomCheckBoxDPIAdvAutoTTL.Checked = false; - CustomTextBoxDPIAdvAutoTTL.Text = "1-4-10"; - CustomCheckBoxDPIAdvMinTTL.Checked = false; - CustomNumericUpDownDPIAdvMinTTL.Value = (decimal)3; - CustomCheckBoxDPIAdvWrongChksum.Checked = false; - CustomCheckBoxDPIAdvWrongSeq.Checked = false; - CustomCheckBoxDPIAdvNativeFrag.Checked = true; - CustomCheckBoxDPIAdvReverseFrag.Checked = false; - CustomCheckBoxDPIAdvMaxPayload.Checked = true; - CustomNumericUpDownDPIAdvMaxPayload.Value = (decimal)1200; - - // Settings Working Mode - CustomRadioButtonSettingWorkingModeDNS.Checked = true; - CustomRadioButtonSettingWorkingModeDNSandDoH.Checked = false; - CustomNumericUpDownSettingWorkingModeSetDohPort.Value = (decimal)443; - - // Settings Check - CustomNumericUpDownSettingCheckTimeout.Value = (decimal)5; - CustomTextBoxSettingCheckDPIHost.Text = "www.youtube.com"; - CustomCheckBoxSettingProtocolDoH.Checked = true; - CustomCheckBoxSettingProtocolTLS.Checked = true; - CustomCheckBoxSettingProtocolDNSCrypt.Checked = true; - CustomCheckBoxSettingProtocolDNSCryptRelay.Checked = true; - CustomCheckBoxSettingProtocolDoQ.Checked = true; - CustomCheckBoxSettingProtocolPlainDNS.Checked = false; - CustomCheckBoxSettingSdnsDNSSec.Checked = false; - CustomCheckBoxSettingSdnsNoLog.Checked = false; - CustomCheckBoxSettingSdnsNoFilter.Checked = true; - - // Settings Connect - CustomCheckBoxSettingEnableCache.Checked = true; - CustomNumericUpDownSettingMaxServers.Value = (decimal)5; - CustomNumericUpDownSettingCamouflageDnsPort.Value = (decimal)5380; - - // Settings Set/Unset DNS - CustomRadioButtonSettingUnsetDnsToDhcp.Checked = false; - CustomRadioButtonSettingUnsetDnsToStatic.Checked = true; - CustomTextBoxSettingUnsetDns1.Text = "8.8.8.8"; - CustomTextBoxSettingUnsetDns2.Text = "8.8.4.4"; - - // Settings Share Basic - CustomNumericUpDownSettingHTTPProxyPort.Value = (decimal)8080; - CustomNumericUpDownSettingHTTPProxyHandleRequests.Value = (decimal)2000; - CustomCheckBoxSettingProxyBlockPort80.Checked = true; - CustomCheckBoxSettingHTTPProxyUpstream.Checked = false; - CustomCheckBoxSettingHTTPProxyUpstreamOnlyBlockedIPs.Checked = true; - CustomComboBoxSettingHttpProxyUpstreamMode.SelectedIndex = 1; - CustomTextBoxSettingHTTPProxyUpstreamHost.Text = IPAddress.Loopback.ToString(); - CustomNumericUpDownSettingHTTPProxyUpstreamPort.Value = (decimal)1090; - - // Settings Share Advanced - CustomCheckBoxSettingHTTPProxyEnableFakeProxy.Checked = false; - CustomCheckBoxSettingHTTPProxyCfCleanIP.Checked = false; - CustomTextBoxSettingHTTPProxyCfCleanIP.Text = string.Empty; - CustomCheckBoxSettingHTTPProxyEnableFakeDNS.Checked = false; - CustomCheckBoxSettingHTTPProxyEnableBlackWhiteList.Checked = false; - CustomCheckBoxSettingHTTPProxyEnableDontBypass.Checked = false; - - // Settings Fake Proxy - CustomNumericUpDownSettingFakeProxyPort.Value = (decimal)8070; - CustomTextBoxSettingFakeProxyDohAddress.Text = "https://dns.cloudflare.com/dns-query"; - CustomTextBoxSettingFakeProxyDohCleanIP.Text = "104.16.132.229"; - - // Settings CPU - CustomRadioButtonSettingCPUHigh.Checked = false; - CustomRadioButtonSettingCPUAboveNormal.Checked = false; - CustomRadioButtonSettingCPUNormal.Checked = true; - CustomRadioButtonSettingCPUBelowNormal.Checked = false; - CustomRadioButtonSettingCPULow.Checked = false; - CustomNumericUpDownSettingCpuKillProxyRequests.Value = (decimal)40; - - // Settings Others - CustomTextBoxSettingBootstrapDnsIP.Text = "8.8.8.8"; - CustomNumericUpDownSettingBootstrapDnsPort.Value = (decimal)53; - CustomTextBoxSettingFallbackDnsIP.Text = "8.8.8.8"; - CustomNumericUpDownSettingFallbackDnsPort.Value = (decimal)53; - CustomCheckBoxSettingDontAskCertificate.Checked = false; - CustomCheckBoxSettingDisableAudioAlert.Checked = false; - } - - //============================== Methods - - public enum ConnectMode - { - ConnectToWorkingServers, - ConnectToFakeProxyDohViaProxyDPI, - ConnectToFakeProxyDohViaGoodbyeDPI, - ConnectToPopularServersWithProxy - } - - public ConnectMode GetConnectMode() - { - // Get Connect modes - bool a = CustomRadioButtonConnectCheckedServers.Checked; - bool b = CustomRadioButtonConnectFakeProxyDohViaProxyDPI.Checked; - bool c = CustomRadioButtonConnectFakeProxyDohViaGoodbyeDPI.Checked; - bool d = CustomRadioButtonConnectDNSCrypt.Checked; - - ConnectMode connectMode = ConnectMode.ConnectToWorkingServers; - if (a) connectMode = ConnectMode.ConnectToWorkingServers; - else if (b) connectMode = ConnectMode.ConnectToFakeProxyDohViaProxyDPI; - else if (c) connectMode = ConnectMode.ConnectToFakeProxyDohViaGoodbyeDPI; - else if (d) connectMode = ConnectMode.ConnectToPopularServersWithProxy; - return connectMode; - } - - private async void CheckUpdate(bool showUptodateMsg = false) - { - if (IsCheckingForUpdate) return; - IsCheckingForUpdate = true; - - string updateUrl = "https://github.com/msasanmh/SecureDNSClient/raw/main/update"; - string update = string.Empty; - - if (showUptodateMsg) - { - string checking = $"Checking update...{NL}"; - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(checking, Color.LightGray)); - } - - try - { - using HttpClient httpClient = new(); - httpClient.Timeout = TimeSpan.FromSeconds(20); - update = await httpClient.GetStringAsync(new Uri(updateUrl)); - } - catch (Exception) - { - update = string.Empty; - IsCheckingForUpdate = false; - } - - if (IsCheckingStarted) - { - IsCheckingForUpdate = false; - return; - } - update = update.Trim(); - if (!string.IsNullOrEmpty(update) && update.Contains('|')) - { - string[] split = update.Split('|'); - if (split.Length != 2) - { - IsCheckingForUpdate = false; - return; - } - string newVersion = split[0].Trim(); - string currentVersion = Info.GetAppInfo(Assembly.GetExecutingAssembly()).ProductVersion ?? "9.9.9"; - string downloadUrl = split[1].Trim(); - - int versionResult = Info.VersionCompare(newVersion, currentVersion); - if (versionResult == 1) - { - string productName = Info.GetAppInfo(Assembly.GetExecutingAssembly()).ProductName ?? "Secure DNS Client"; - string msg1 = $"{NL}There is a new version of {productName}{NL}"; - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msg1, Color.MediumSeaGreen)); - this.InvokeIt(() => CustomRichTextBoxLog.AppendText("New version: ", Color.LightGray)); - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(newVersion , Color.DodgerBlue)); - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(", Current version: ", Color.LightGray)); - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(currentVersion + NL, Color.DodgerBlue)); - this.InvokeIt(() => CustomRichTextBoxLog.AppendText("Download: ", Color.LightGray)); - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(downloadUrl + NL + NL, Color.MediumSeaGreen)); - IsCheckingForUpdate = false; - } - else - { - if (!showUptodateMsg) - { - IsCheckingForUpdate = false; - return; - } - string uptodate = $"{NL}You are using the latest version.{NL}{NL}"; - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(uptodate, Color.MediumSeaGreen)); - } - } - else - { - if (!showUptodateMsg) - { - IsCheckingForUpdate = false; - return; - } - string err = $"{NL}Error connecting to update server.{NL}{NL}"; - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(err, Color.IndianRed)); - } - - IsCheckingForUpdate = false; - } - - private void AutoSaveSettings() - { - // Using System.Timers.Timer needs Invoke. - System.Windows.Forms.Timer autoSaveTimer = new(); - autoSaveTimer.Interval = int.Parse(TimeSpan.FromMinutes(1).TotalMilliseconds.ToString()); - autoSaveTimer.Tick += async (s, e) => - { - // Select Control type and properties to save - AppSettings.AddSelectedControlAndProperty(typeof(CustomCheckBox), "Checked"); - AppSettings.AddSelectedControlAndProperty(typeof(CustomNumericUpDown), "Value"); - AppSettings.AddSelectedControlAndProperty(typeof(CustomRadioButton), "Checked"); - AppSettings.AddSelectedControlAndProperty(typeof(CustomTextBox), "Text"); - AppSettings.AddSelectedControlAndProperty(typeof(CustomTextBox), "Texts"); - AppSettings.AddSelectedControlAndProperty(typeof(CustomComboBox), "SelectedIndex"); - - // Add Settings to save - AppSettings.AddSelectedSettings(this); - - // Save Application Settings - await AppSettings.SaveAsync(SecureDNS.SettingsXmlPath); - }; - autoSaveTimer.Start(); - } - - private void FixScreenDPI(Form form) - { - using Graphics g = form.CreateGraphics(); - - int x1 = 120; int y1 = 21; - int splitMainD = SplitContainerMain.SplitterDistance; - int splitTopD = SplitContainerTop.SplitterDistance; - - if (form.AutoScaleDimensions == form.CurrentAutoScaleDimensions) - { - // 96 = 100% - // 120 = 125% - // 144 = 150% - if (g.DpiX == 120) // 125% - { - setSize(x1 + 35, y1 + 10, splitMainD, splitTopD + 100); - } - else if (g.DpiX == 144) // 150% - { - setSize(x1 + 80, y1 + 20, splitMainD, splitTopD + 450); - } - - void setSize(int x1, int y1, int splitMainD, int splitTopD) - { - CustomTabControlMain.SizeMode = TabSizeMode.Fixed; - CustomTabControlMain.ItemSize = new Size(x1, y1); - CustomTabControlSecureDNS.SizeMode = TabSizeMode.Fixed; - CustomTabControlSecureDNS.ItemSize = new Size(x1, y1); - CustomTabControlDPIBasicAdvanced.SizeMode = TabSizeMode.Fixed; - CustomTabControlDPIBasicAdvanced.ItemSize = new Size(x1, y1); - CustomTabControlSettings.SizeMode = TabSizeMode.Fixed; - CustomTabControlSettings.ItemSize = new Size(y1 + 9, x1); - - SplitContainerMain.SplitterDistance = splitMainD; - SplitContainerTop.SplitterDistance = splitTopD; - } - } - } - - private bool IsInternetAlive() - { - if (!Network.IsInternetAlive()) - { - string msgNet = "There is no Internet connectivity." + NL; - CustomRichTextBoxLog.AppendText(msgNet, Color.IndianRed); - return false; - } - else - return true; - } - - private void LogClearAuto() - { - System.Timers.Timer logAutoClearTimer = new(); - logAutoClearTimer.Interval = 5000; - logAutoClearTimer.Elapsed += (s, e) => - { - int length = 0; - this.InvokeIt(() => length = CustomRichTextBoxLog.Text.Length); - if (length > 90000) - { - this.InvokeIt(() => CustomRichTextBoxLog.ResetText()); - this.InvokeIt(() => CustomRichTextBoxLog.AppendText($"Log Auto Clear.{NL}", Color.MediumSeaGreen)); - } - }; - logAutoClearTimer.Start(); - } - - private void UpdateBoolsAuto() - { - System.Timers.Timer updateBoolsTimer = new(); - updateBoolsTimer.Interval = 4000; - updateBoolsTimer.Elapsed += (s, e) => - { - UpdateBools(); - }; - updateBoolsTimer.Start(); - } - - private async void UpdateBools() - { - // Update bool IsConnected - IsConnected = ProcessManager.FindProcessByPID(PIDDNSProxy) || - ProcessManager.FindProcessByPID(PIDDNSProxyBypass) || - ProcessManager.FindProcessByPID(PIDDNSCrypt) || - ProcessManager.FindProcessByPID(PIDDNSCryptBypass); - - // In case dnsproxy or dnscrypt processes terminated - if (!IsConnected) - { - IsDNSConnected = IsDoHConnected = IsConnected; - LocalDnsLatency = LocalDohLatency = -1; - if (CamouflageDNSServer != null && CamouflageDNSServer.IsRunning) - CamouflageDNSServer.Stop(); - if (IsDNSSet) await UnsetSavedDNS(); - } - - // In case SDCHttpProxy terminated - if (!IsProxyActivated && !IsSharing && IsProxySet) - { - Network.UnsetProxy(false, false); - } - - // Update bool IsDnsSet - //IsDNSSet = UpdateBoolIsDnsSet(out bool _); // I need to test this on Win7 myself! - - // Update bool IsProxySet - IsProxySet = UpdateBoolIsProxySet(); - - // Update bool IsGoodbyeDPIActive - IsGoodbyeDPIActive = ProcessManager.FindProcessByPID(PIDGoodbyeDPI); - - // Update bool IsDPIActive - IsDPIActive = (IsProxyDPIActive || IsGoodbyeDPIActive); - } - - private void UpdateBoolDnsDohAuto() - { - Task.Run(() => - { - while (true) - { - int timeout = 10000; - Task.Delay(timeout + 500).Wait(); - Parallel.Invoke( - () => UpdateBoolDnsOnce(timeout), - () => UpdateBoolDohOnce(timeout) - ); - } - }); - } - - private void UpdateBoolDnsOnce(int timeout) - { - if (IsConnected) - { - // DNS - LocalDnsLatency = SecureDNS.CheckDns("google.com", IPAddress.Loopback.ToString(), timeout, GetCPUPriority()); - IsDNSConnected = LocalDnsLatency != -1; - - try - { - if (!string.IsNullOrEmpty(TheDll)) - if (File.Exists(TheDll) && IsDNSConnected) File.Delete(TheDll); - } - catch (Exception ex) - { - Debug.WriteLine(ex.Message); - } - } - else - { - LocalDnsLatency = -1; - IsDNSConnected = LocalDnsLatency != -1; - } - } - - private void UpdateBoolDohOnce(int timeout) - { - if (IsConnected && CustomRadioButtonSettingWorkingModeDNSandDoH.Checked) - { - // DoH - string dohServer; - if (ConnectedDohPort == 443) - dohServer = $"https://{IPAddress.Loopback}/dns-query"; - else - dohServer = $"https://{IPAddress.Loopback}:{ConnectedDohPort}/dns-query"; - LocalDohLatency = SecureDNS.CheckDns("google.com", dohServer, timeout, GetCPUPriority()); - IsDoHConnected = LocalDohLatency != -1; - - try - { - if (!string.IsNullOrEmpty(TheDll)) - if (File.Exists(TheDll) && IsDoHConnected) File.Delete(TheDll); - } - catch (Exception ex) - { - Debug.WriteLine(ex.Message); - } - } - else - { - LocalDohLatency = -1; - IsDoHConnected = LocalDohLatency != -1; - } - } - - private bool UpdateBoolIsDnsSet(out bool isAnotherDnsSet) - { - isAnotherDnsSet = false; - if (File.Exists(SecureDNS.NicNamePath)) - { - string nicName = File.ReadAllText(SecureDNS.NicNamePath).Replace(NL, string.Empty); - if (nicName.Length > 0) - { - NetworkInterface? nic = Network.GetNICByName(nicName); - if (nic != null) - { - bool isDnsSet = Network.IsDnsSet(nic, out string dnsServer1, out string _); - if (!isDnsSet) return false; // DNS is set to DHCP - else - { - if (dnsServer1 == IPAddress.Loopback.ToString()) - return true; - else - { - isAnotherDnsSet = true; - return false; - } - } - } - } - } - return false; - } - - private void UpdateBoolHttpProxyAuto() - { - Task task = Task.Run(() => - { - while (true) - { - Task.Delay(2000).Wait(); - if (!UpdateProxyBools) continue; - - IsProxyActivated = ProcessManager.FindProcessByPID(PIDHttpProxy); - - string line = string.Empty; - if (ProxyProcess != null) - { - if (!UpdateProxyBools) continue; - - try - { - ProxyProcess.StandardOutput.DiscardBufferedData(); - ProxyProcess.StandardInput.WriteLine("out"); - } - catch (Exception) - { - // do nothing - } - - while (ProcessManager.FindProcessByPID(PIDHttpProxy)) - { - try - { - string l = ProxyProcess.StandardOutput.ReadLine() ?? string.Empty; - Task.Delay(200).Wait(); - if (l.StartsWith("details")) line = l; - } - catch (Exception ex) - { - Debug.WriteLine(ex.Message); - } - - if (line.StartsWith("details")) - { - //Debug.WriteLine("Done"); - break; - } - } - } - - //Debug.WriteLine("Line: " + line); - - if (string.IsNullOrEmpty(line) || string.IsNullOrWhiteSpace(line)) - { - IsSharing = false; ProxyRequests = 0; ProxyMaxRequests = 250; IsProxyDPIActive = false; - } - else if (line.StartsWith("details")) - { - string[] split = line.Split('|'); - if (bool.TryParse(split[1].ToLower(), out bool sharing)) IsSharing = sharing; - if (int.TryParse(split[2].ToLower(), out int port)) ProxyPort = port; - if (int.TryParse(split[3].ToLower(), out int requests)) ProxyRequests = requests; - if (int.TryParse(split[4].ToLower(), out int maxRequests)) ProxyMaxRequests = maxRequests; - if (bool.TryParse(split[5].ToLower(), out bool dpiActive)) IsProxyDPIActive = dpiActive; - - if (split[6].ToLower().Equals("disable")) ProxyStaticDPIBypassMode = HTTPProxyServer.Program.DPIBypass.Mode.Disable; - else if (split[6].ToLower().Equals("program")) ProxyStaticDPIBypassMode = HTTPProxyServer.Program.DPIBypass.Mode.Program; - - if (split[7].ToLower().Equals("disable")) ProxyDPIBypassMode = HTTPProxyServer.Program.DPIBypass.Mode.Disable; - else if (split[7].ToLower().Equals("program")) ProxyDPIBypassMode = HTTPProxyServer.Program.DPIBypass.Mode.Program; - - if (split[8].ToLower().Equals("disable")) ProxyUpStreamMode = HTTPProxyServer.Program.UpStreamProxy.Mode.Disable; - else if (split[8].ToLower().Equals("http")) ProxyUpStreamMode = HTTPProxyServer.Program.UpStreamProxy.Mode.HTTP; - else if (split[8].ToLower().Equals("socks5")) ProxyUpStreamMode = HTTPProxyServer.Program.UpStreamProxy.Mode.SOCKS5; - - if (split[9].ToLower().Equals("disable")) ProxyDNSMode = HTTPProxyServer.Program.Dns.Mode.Disable; - else if (split[9].ToLower().Equals("system")) ProxyDNSMode = HTTPProxyServer.Program.Dns.Mode.System; - else if (split[9].ToLower().Equals("doh")) ProxyDNSMode = HTTPProxyServer.Program.Dns.Mode.DoH; - else if (split[9].ToLower().Equals("plaindns")) ProxyDNSMode = HTTPProxyServer.Program.Dns.Mode.PlainDNS; - - if (split[10].ToLower().Equals("disable")) ProxyFakeDnsMode = HTTPProxyServer.Program.FakeDns.Mode.Disable; - else if (split[10].ToLower().Equals("file")) ProxyFakeDnsMode = HTTPProxyServer.Program.FakeDns.Mode.File; - else if (split[10].ToLower().Equals("text")) ProxyFakeDnsMode = HTTPProxyServer.Program.FakeDns.Mode.Text; - - if (split[11].ToLower().Equals("disable")) ProxyBWListMode = HTTPProxyServer.Program.BlackWhiteList.Mode.Disable; - else if (split[11].ToLower().Equals("blacklistfile")) ProxyBWListMode = HTTPProxyServer.Program.BlackWhiteList.Mode.BlackListFile; - else if (split[11].ToLower().Equals("blacklisttext")) ProxyBWListMode = HTTPProxyServer.Program.BlackWhiteList.Mode.BlackListText; - else if (split[11].ToLower().Equals("whitelistfile")) ProxyBWListMode = HTTPProxyServer.Program.BlackWhiteList.Mode.WhiteListFile; - else if (split[11].ToLower().Equals("whitelisttext")) ProxyBWListMode = HTTPProxyServer.Program.BlackWhiteList.Mode.WhiteListText; - - if (split[12].ToLower().Equals("disable")) DontBypassMode = HTTPProxyServer.Program.DontBypass.Mode.Disable; - else if (split[12].ToLower().Equals("file")) DontBypassMode = HTTPProxyServer.Program.DontBypass.Mode.File; - else if (split[12].ToLower().Equals("text")) DontBypassMode = HTTPProxyServer.Program.DontBypass.Mode.Text; - - } - } - }); - } - - private bool UpdateBoolIsProxySet() - { - if (IsSharing) - { - bool isAnyProxySet = Network.IsProxySet(out string httpProxy, out string _, out string _, out string _); - if (isAnyProxySet) - if (!string.IsNullOrEmpty(httpProxy)) - if (httpProxy.Contains(':')) - { - string[] split = httpProxy.Split(':'); - string ip = split[0]; - string portS = split[1]; - bool isPortInt = int.TryParse(portS, out int port); - if (isPortInt) - if (ip == IPAddress.Loopback.ToString() && port == ProxyPort) - return true; - } - } - return false; - } - - private void UpdateStatusShortAuto() - { - Task.Run(() => - { - while (true) - { - Task.Delay(300).Wait(); - this.InvokeIt(() => UpdateStatusShort()); - } - }); - } - - private void UpdateStatusShort() - { - // Update Status Working Servers - NumberOfWorkingServers = WorkingDnsList.Count; - CustomRichTextBoxStatusWorkingServers.ResetText(); - CustomRichTextBoxStatusWorkingServers.AppendText("Working Servers: ", ForeColor); - CustomRichTextBoxStatusWorkingServers.AppendText(NumberOfWorkingServers.ToString(), Color.DodgerBlue); - - // Check Button - CustomButtonCheck.Enabled = !IsConnecting; - - // Insecure and parallel - if (CustomCheckBoxInsecure.Checked) - CustomCheckBoxCheckInParallel.Checked = false; - - // Connect Button - if (!CustomRadioButtonConnectCheckedServers.Checked) - { - CustomButtonConnect.Enabled = true; - } - else - { - if (WorkingDnsList.Any() && !IsCheckingStarted && !IsConnecting) - CustomButtonConnect.Enabled = true; - else - CustomButtonConnect.Enabled = IsConnected; - } - - // Connect to popular servers using proxy Textbox - CustomTextBoxHTTPProxy.Enabled = CustomRadioButtonConnectDNSCrypt.Checked; - - // SetDNS Button - if (IsConnected && (IsDNSConnected || IsDoHConnected)) - CustomButtonSetDNS.Enabled = true; - - // SetProxy Button - if (IsSharing) - CustomButtonSetProxy.Enabled = true; - - // Settings -> Share -> Advanced - CustomTextBoxSettingHTTPProxyCfCleanIP.Enabled = CustomCheckBoxSettingHTTPProxyCfCleanIP.Checked; - - } - - private void UpdateStatusLongAuto() - { - Task.Run(() => - { - while (true) - { - Task.Delay(2000).Wait(); - UpdateStatusLong(); - } - }); - } - - private void UpdateStatusLong() - { - // Update Status IsConnected - string textConnect = IsConnected ? "Yes" : "No"; - Color colorConnect = IsConnected ? Color.MediumSeaGreen : Color.IndianRed; - this.InvokeIt(() => CustomRichTextBoxStatusIsConnected.ResetText()); - this.InvokeIt(() => CustomRichTextBoxStatusIsConnected.AppendText("Is Connected: ", ForeColor)); - this.InvokeIt(() => CustomRichTextBoxStatusIsConnected.AppendText(textConnect, colorConnect)); - - // Update Status IsDNSConnected - string statusLocalDNS = IsDNSConnected ? "Online" : "Offline"; - Color colorStatusLocalDNS = IsDNSConnected ? Color.MediumSeaGreen : Color.IndianRed; - this.InvokeIt(() => CustomRichTextBoxStatusLocalDNS.ResetText()); - this.InvokeIt(() => CustomRichTextBoxStatusLocalDNS.AppendText("Local DNS: ", ForeColor)); - this.InvokeIt(() => CustomRichTextBoxStatusLocalDNS.AppendText(statusLocalDNS, colorStatusLocalDNS)); - - // Update Status LocalDnsLatency - string statusLocalDnsLatency = LocalDnsLatency != -1 ? $"{LocalDnsLatency}" : "-1"; - Color colorStatusLocalDnsLatency = LocalDnsLatency != -1 ? Color.MediumSeaGreen : Color.IndianRed; - this.InvokeIt(() => CustomRichTextBoxStatusLocalDnsLatency.ResetText()); - this.InvokeIt(() => CustomRichTextBoxStatusLocalDnsLatency.AppendText("Local DNS Latency: ", ForeColor)); - this.InvokeIt(() => CustomRichTextBoxStatusLocalDnsLatency.AppendText(statusLocalDnsLatency, colorStatusLocalDnsLatency)); - - // Update Status IsDoHConnected - string statusLocalDoH = IsDoHConnected ? "Online" : "Offline"; - Color colorStatusLocalDoH = IsDoHConnected ? Color.MediumSeaGreen : Color.IndianRed; - this.InvokeIt(() => CustomRichTextBoxStatusLocalDoH.ResetText()); - this.InvokeIt(() => CustomRichTextBoxStatusLocalDoH.AppendText("Local DoH: ", ForeColor)); - this.InvokeIt(() => CustomRichTextBoxStatusLocalDoH.AppendText(statusLocalDoH, colorStatusLocalDoH)); - - // Update Status LocalDohLatency - string statusLocalDoHLatency = LocalDohLatency != -1 ? $"{LocalDohLatency}" : "-1"; - Color colorStatusLocalDoHLatency = LocalDohLatency != -1 ? Color.MediumSeaGreen : Color.IndianRed; - this.InvokeIt(() => CustomRichTextBoxStatusLocalDoHLatency.ResetText()); - this.InvokeIt(() => CustomRichTextBoxStatusLocalDoHLatency.AppendText("Local DoH Latency: ", ForeColor)); - this.InvokeIt(() => CustomRichTextBoxStatusLocalDoHLatency.AppendText(statusLocalDoHLatency, colorStatusLocalDoHLatency)); - - // Update Status IsDnsSet - string textDNS = IsDNSSet ? "Yes" : "No"; - Color colorDNS = IsDNSSet ? Color.MediumSeaGreen : Color.IndianRed; - this.InvokeIt(() => CustomRichTextBoxStatusIsDNSSet.ResetText()); - this.InvokeIt(() => CustomRichTextBoxStatusIsDNSSet.AppendText("Is DNS Set: ", ForeColor)); - this.InvokeIt(() => CustomRichTextBoxStatusIsDNSSet.AppendText(textDNS, colorDNS)); - - // Update Status IsSharing - string textSharing = IsSharing ? "Yes" : "No"; - Color colorSharing = IsSharing ? Color.MediumSeaGreen : Color.IndianRed; - this.InvokeIt(() => CustomRichTextBoxStatusIsSharing.ResetText()); - this.InvokeIt(() => CustomRichTextBoxStatusIsSharing.AppendText("Is Sharing: ", ForeColor)); - this.InvokeIt(() => CustomRichTextBoxStatusIsSharing.AppendText(textSharing, colorSharing)); - - // Update Status ProxyRequests - string textProxyRequests = "0 of 0"; - Color colorProxyRequests = Color.MediumSeaGreen; - textProxyRequests = $"{ProxyRequests} of {ProxyMaxRequests}"; - colorProxyRequests = ProxyRequests < ProxyMaxRequests ? Color.MediumSeaGreen : Color.IndianRed; - this.InvokeIt(() => CustomRichTextBoxStatusProxyRequests.ResetText()); - this.InvokeIt(() => CustomRichTextBoxStatusProxyRequests.AppendText("Proxy Requests ", ForeColor)); - this.InvokeIt(() => CustomRichTextBoxStatusProxyRequests.AppendText(textProxyRequests, colorProxyRequests)); - - // Update Status IsProxySet - string textProxySet = IsProxySet ? "Yes" : "No"; - Color colorProxySet = IsProxySet ? Color.MediumSeaGreen : Color.IndianRed; - this.InvokeIt(() => CustomRichTextBoxStatusIsProxySet.ResetText()); - this.InvokeIt(() => CustomRichTextBoxStatusIsProxySet.AppendText("Is Proxy Set: ", ForeColor)); - this.InvokeIt(() => CustomRichTextBoxStatusIsProxySet.AppendText(textProxySet, colorProxySet)); - - // Update Status IsProxyDPIActive - string textProxyDPI = IsProxyDPIActive ? "Active" : "Inactive"; - Color colorProxyDPI = IsProxyDPIActive ? Color.MediumSeaGreen : Color.IndianRed; - this.InvokeIt(() => CustomRichTextBoxStatusProxyDpiBypass.ResetText()); - this.InvokeIt(() => CustomRichTextBoxStatusProxyDpiBypass.AppendText("Proxy DPI Bypass: ", ForeColor)); - this.InvokeIt(() => CustomRichTextBoxStatusProxyDpiBypass.AppendText(textProxyDPI, colorProxyDPI)); - - // Update Status IsGoodbyeDPIActive - string textGoodbyeDPI = IsGoodbyeDPIActive ? "Active" : "Inactive"; - Color colorGoodbyeDPI = IsGoodbyeDPIActive ? Color.MediumSeaGreen : Color.IndianRed; - this.InvokeIt(() => CustomRichTextBoxStatusGoodbyeDPI.ResetText()); - this.InvokeIt(() => CustomRichTextBoxStatusGoodbyeDPI.AppendText("GoodbyeDPI: ", ForeColor)); - this.InvokeIt(() => CustomRichTextBoxStatusGoodbyeDPI.AppendText(textGoodbyeDPI, colorGoodbyeDPI)); - - // Play Audio Alert - if (!CustomCheckBoxSettingDisableAudioAlert.Checked && !IsCheckingStarted) - { - if (!StopWatchAudioAlertDelay.IsRunning) StopWatchAudioAlertDelay.Start(); - if (StopWatchAudioAlertDelay.ElapsedMilliseconds > 5000) - PlayAudioAlert(); - } - } - - private void UpdateStatusCpuUsageAuto() - { - Task.Run(async () => - { - while (true) - { - int delay = 1500; - double cpu = await GetCpuUsage(delay); - await Task.Delay(3000); - // Update Status CPU Usage - Color colorCPU = cpu <= 35 ? Color.MediumSeaGreen : Color.IndianRed; - this.InvokeIt(() => CustomRichTextBoxStatusCpuUsage.ResetText()); - this.InvokeIt(() => CustomRichTextBoxStatusCpuUsage.AppendText("CPU: ", ForeColor)); - this.InvokeIt(() => CustomRichTextBoxStatusCpuUsage.AppendText($"{cpu}%", colorCPU)); - } - }); - } - - private async Task GetCpuUsage(int delay) - { - float sdc = -1, sdcHttpProxy = -1; - float dnsproxy1 = -1, dnscrypt1 = -1, goodbyedpi1 = -1; - float dnsproxy2 = -1, dnscrypt2 = -1, goodbyedpi2 = -1; - - Task a = Task.Run(async () => sdc = await ProcessManager.GetCpuUsage(Process.GetCurrentProcess(), delay)); - Task b = Task.Run(async () => sdcHttpProxy = await ProcessManager.GetCpuUsage(PIDHttpProxy, delay)); - Task c = Task.Run(async () => dnsproxy1 = await ProcessManager.GetCpuUsage(PIDDNSProxy, delay)); - Task d = Task.Run(async () => dnsproxy2 = await ProcessManager.GetCpuUsage(PIDDNSProxyBypass, delay)); - Task e = Task.Run(async () => dnscrypt1 = await ProcessManager.GetCpuUsage(PIDDNSCrypt, delay)); - Task f = Task.Run(async () => dnscrypt2 = await ProcessManager.GetCpuUsage(PIDDNSCryptBypass, delay)); - Task g = Task.Run(async () => goodbyedpi1 = await ProcessManager.GetCpuUsage(PIDGoodbyeDPI, delay)); - Task h = Task.Run(async () => goodbyedpi2 = await ProcessManager.GetCpuUsage(PIDGoodbyeDPIBypass, delay)); - - await Task.WhenAll(a, b, c, d, e, f, g, h); - - float sum = 0; - List list = new(); - if (sdc != -1) list.Add(sdc); - if (sdcHttpProxy != -1) list.Add(sdcHttpProxy); - if (dnsproxy1 != -1) list.Add(dnsproxy1); - if (dnsproxy2 != -1) list.Add(dnsproxy2); - if (dnscrypt1 != -1) list.Add(dnscrypt1); - if (dnscrypt2 != -1) list.Add(dnscrypt2); - if (goodbyedpi1 != -1) list.Add(goodbyedpi1); - if (goodbyedpi2 != -1) list.Add(goodbyedpi2); - - for (int n = 0; n < list.Count; n++) sum += list[n]; - return Math.Round(Convert.ToDouble(sum), 2); - } - - private void WriteProxyRequestsAndChunkDetailsToLogAuto() - { - // Another way of reading Error output (I'm using Event instead) - System.Timers.Timer timer = new(); - timer.Interval = 50; - timer.Elapsed += Timer_Elapsed; - - void Timer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e) - { - if (!IsCheckingStarted && !IsConnecting && IsProxyActivated && IsSharing) - { - if (ProxyProcess != null) - { - string? msg = ProxyProcess.StandardError.ReadLine(); - if (!string.IsNullOrEmpty(msg)) - { - // Write to log - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msg + NL, Color.Gray)); - } - ProxyProcess.StandardError.DiscardBufferedData(); - } - } - } - - timer.Start(); - } - - private void PlayAudioAlert() - { - if ((IsDNSConnected || IsDoHConnected) && AudioAlertOnline) - { - AudioAlertOnline = false; - AudioAlertOffline = true; - - Task.Run(() => - { - SoundPlayer soundPlayer = new(Audio.Resource1.DNS_Online); - soundPlayer.PlaySync(); - soundPlayer.Stop(); - soundPlayer.Dispose(); - }); - } - - if (!IsDNSConnected && !IsDoHConnected && AudioAlertOffline) - { - AudioAlertOffline = false; - AudioAlertOnline = true; - - int softEtherPID = -1; - if (ProcessManager.FindProcessByName("vpnclient_x64")) - softEtherPID = ProcessManager.GetFirstPidByName("vpnclient_x64"); - - if (softEtherPID != -1) - ProcessManager.SuspendProcess(softEtherPID); // On net disconnect SoftEther cause noise to audio. - - Task.Run(() => - { - Task.Delay(1000).Wait(); - SoundPlayer soundPlayer = new(Audio.Resource1.DNS_Offline); - soundPlayer.PlaySync(); - soundPlayer.Stop(); - soundPlayer.Dispose(); - Task.Delay(5000).Wait(); - }); - - if (softEtherPID != -1) - ProcessManager.ResumeProcess(softEtherPID); - } - - if (IsSharing && (ProxyRequests >= ProxyMaxRequests) && !AudioAlertRequestsExceeded) - { - AudioAlertRequestsExceeded = true; - Task.Run(() => - { - SoundPlayer soundPlayer = new(Audio.Resource1.Warning_Handle_Requests_Exceeded); - soundPlayer.PlaySync(); - soundPlayer.Stop(); - soundPlayer.Dispose(); - }); - } - - if (ProxyRequests < ProxyMaxRequests - 5) - AudioAlertRequestsExceeded = false; - - StopWatchAudioAlertDelay.Stop(); - StopWatchAudioAlertDelay.Reset(); - } - - private void FlushDNS(bool writeToLog = true) - { - string? flushDNS = ProcessManager.Execute(out Process _, "ipconfig", "/flushdns"); - if (!string.IsNullOrWhiteSpace(flushDNS) && writeToLog) - { - // Write flush DNS message to log - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(flushDNS + NL, Color.LightGray)); - } - } - - private static void FlushDnsOnExit() - { - ProcessManager.Execute(out Process _, "ipconfig", "/flushdns", true, true); - ProcessManager.Execute(out Process _, "ipconfig", "/registerdns", true, true); - ProcessManager.Execute(out Process _, "ipconfig", "/release", true, true); - ProcessManager.ExecuteOnly(out Process _, "ipconfig", "/renew", true, true); - //ProcessManager.Execute("netsh", "winsock reset"); // Needs PC Restart - } - - private void KillAll(bool killByName = false) - { - if (killByName) - { - ProcessManager.KillProcessByName("SDCHttpProxy"); - ProcessManager.KillProcessByName("dnslookup"); - ProcessManager.KillProcessByName("dnsproxy"); - ProcessManager.KillProcessByName("dnscrypt-proxy"); - ProcessManager.KillProcessByName("goodbyedpi"); - } - else - { - ProcessManager.KillProcessByPID(PIDHttpProxy); - ProcessManager.KillProcessByName("dnslookup"); - ProcessManager.KillProcessByPID(PIDDNSProxy); - ProcessManager.KillProcessByPID(PIDDNSProxyBypass); - ProcessManager.KillProcessByPID(PIDDNSCrypt); - ProcessManager.KillProcessByPID(PIDDNSCryptBypass); - ProcessManager.KillProcessByPID(PIDGoodbyeDPI); - ProcessManager.KillProcessByPID(PIDGoodbyeDPIBypass); - } - } - - private async Task UnsetSavedDNS() - { - bool unsetToDHCP = CustomRadioButtonSettingUnsetDnsToDhcp.Checked; - if (unsetToDHCP) - { - // Unset to DHCP - await UnsetSavedDnsDHCP(); - } - else - { - // Unset to Static - string dns1 = CustomTextBoxSettingUnsetDns1.Text; - string dns2 = CustomTextBoxSettingUnsetDns2.Text; - await UnsetSavedDnsStatic(dns1, dns2); - } - } - - // Unset to DHCP - private async Task UnsetSavedDnsDHCP() - { - if (File.Exists(SecureDNS.NicNamePath)) - { - string nicName = File.ReadAllText(SecureDNS.NicNamePath).Replace(NL, string.Empty); - if (nicName.Length > 0) - { - NetworkInterface? nic = Network.GetNICByName(nicName); - if (nic != null) - { - await Task.Run(() => Network.UnsetDNS(nic)); - IsDNSSet = false; - } - } - } - } - - // Unset to Static - private async Task UnsetSavedDnsStatic(string dns1, string dns2) - { - if (File.Exists(SecureDNS.NicNamePath)) - { - string nicName = File.ReadAllText(SecureDNS.NicNamePath).Replace(NL, string.Empty); - if (nicName.Length > 0) - { - NetworkInterface? nic = Network.GetNICByName(nicName); - if (nic != null) - { - dns1 = dns1.Trim(); - dns2 = dns2.Trim(); - if (Network.IsIPv4Valid(dns1, out IPAddress _) && Network.IsIPv4Valid(dns2, out IPAddress _)) - { - await Task.Run(() => Network.UnsetDNS(nic, dns1, dns2)); - IsDNSSet = false; - } - } - } - } - } - - public ProcessPriorityClass GetCPUPriority() - { - if (CustomRadioButtonSettingCPUHigh.Checked) - return ProcessPriorityClass.High; - else if (CustomRadioButtonSettingCPUAboveNormal.Checked) - return ProcessPriorityClass.AboveNormal; - else if (CustomRadioButtonSettingCPUNormal.Checked) - return ProcessPriorityClass.Normal; - else if (CustomRadioButtonSettingCPUBelowNormal.Checked) - return ProcessPriorityClass.BelowNormal; - else if (CustomRadioButtonSettingCPULow.Checked) - return ProcessPriorityClass.Idle; - else - return ProcessPriorityClass.Normal; - } - - public bool CheckNecessaryFiles(bool showMessage = true) - { - if (!File.Exists(SecureDNS.DnsLookup) || !File.Exists(SecureDNS.DnsProxy) || !File.Exists(SecureDNS.DNSCrypt) || - !File.Exists(SecureDNS.DNSCryptConfigPath) || !File.Exists(SecureDNS.DNSCryptConfigCloudflarePath) || - !File.Exists(SecureDNS.GoodbyeDpi) || !File.Exists(SecureDNS.WinDivert) || - !File.Exists(SecureDNS.WinDivert32) || !File.Exists(SecureDNS.WinDivert64)) - { - if (showMessage) - { - string msg = "ERROR: Some of binary files are missing!" + NL; - CustomRichTextBoxLog.AppendText(msg, Color.IndianRed); - } - return false; - } - else - return true; - } - - private async Task WriteNecessaryFilesToDisk() - { - // Get New Versions - string dnslookupNewVer = SecureDNS.GetBinariesVersionFromResource("dnslookup"); - string dnsproxyNewVer = SecureDNS.GetBinariesVersionFromResource("dnsproxy"); - string dnscryptNewVer = SecureDNS.GetBinariesVersionFromResource("dnscrypt-proxy"); - string sdchttpproxyNewVer = SecureDNS.GetBinariesVersionFromResource("sdchttpproxy"); - string goodbyedpiNewVer = SecureDNS.GetBinariesVersionFromResource("goodbyedpi"); - - // Get Old Versions - string dnslookupOldVer = SecureDNS.GetBinariesVersion("dnslookup"); - string dnsproxyOldVer = SecureDNS.GetBinariesVersion("dnsproxy"); - string dnscryptOldVer = SecureDNS.GetBinariesVersion("dnscrypt-proxy"); - string sdchttpproxyOldVer = SecureDNS.GetBinariesVersion("sdchttpproxy"); - string goodbyedpiOldVer = SecureDNS.GetBinariesVersion("goodbyedpi"); - - // Get Version Result - int dnslookupResult = Info.VersionCompare(dnslookupNewVer, dnslookupOldVer); - int dnsproxyResult = Info.VersionCompare(dnsproxyNewVer, dnsproxyOldVer); - int dnscryptResult = Info.VersionCompare(dnscryptNewVer, dnscryptOldVer); - int sdchttpproxyResult = Info.VersionCompare(sdchttpproxyNewVer, sdchttpproxyOldVer); - int goodbyedpiResult = Info.VersionCompare(goodbyedpiNewVer, goodbyedpiOldVer); - - // Check Missing/Update Binaries - if (!CheckNecessaryFiles(false) || dnslookupResult == 1 || dnsproxyResult == 1 || dnscryptResult == 1 || goodbyedpiResult == 1) - { - string msg1 = "Creating/Updating binaries. Please Wait..." + NL; - CustomRichTextBoxLog.AppendText(msg1, Color.LightGray); - - await writeBinariesAsync(); - } - - async Task writeBinariesAsync() - { - if (!Directory.Exists(SecureDNS.BinaryDirPath)) - Directory.CreateDirectory(SecureDNS.BinaryDirPath); - - if (!File.Exists(SecureDNS.DnsLookup) || dnslookupResult == 1) - await Resource.WriteResourceToFileAsync(NecessaryFiles.Resource1.dnslookup, SecureDNS.DnsLookup); - - if (!File.Exists(SecureDNS.DnsProxy) || dnsproxyResult == 1) - await Resource.WriteResourceToFileAsync(NecessaryFiles.Resource1.dnsproxy, SecureDNS.DnsProxy); - - if (!File.Exists(SecureDNS.DNSCrypt) || dnscryptResult == 1) - await Resource.WriteResourceToFileAsync(NecessaryFiles.Resource1.dnscrypt_proxyEXE, SecureDNS.DNSCrypt); - - if (!File.Exists(SecureDNS.DNSCryptConfigPath)) - await Resource.WriteResourceToFileAsync(NecessaryFiles.Resource1.dnscrypt_proxyTOML, SecureDNS.DNSCryptConfigPath); - - if (!File.Exists(SecureDNS.DNSCryptConfigCloudflarePath)) - await Resource.WriteResourceToFileAsync(NecessaryFiles.Resource1.dnscrypt_proxy_fakeproxyTOML, SecureDNS.DNSCryptConfigCloudflarePath); - - if (!File.Exists(SecureDNS.HttpProxyPath) || sdchttpproxyResult == 1) - await Resource.WriteResourceToFileAsync(NecessaryFiles.Resource1.SDCHttpProxy, SecureDNS.HttpProxyPath); - - if (!File.Exists(SecureDNS.GoodbyeDpi) || goodbyedpiResult == 1) - await Resource.WriteResourceToFileAsync(NecessaryFiles.Resource1.goodbyedpi, SecureDNS.GoodbyeDpi); - - if (!File.Exists(SecureDNS.WinDivert)) - await Resource.WriteResourceToFileAsync(NecessaryFiles.Resource1.WinDivert, SecureDNS.WinDivert); - - if (!File.Exists(SecureDNS.WinDivert32)) - await Resource.WriteResourceToFileAsync(NecessaryFiles.Resource1.WinDivert32, SecureDNS.WinDivert32); - - if (!File.Exists(SecureDNS.WinDivert64)) - await Resource.WriteResourceToFileAsync(NecessaryFiles.Resource1.WinDivert64, SecureDNS.WinDivert64); - - // Update old version numbers - await File.WriteAllTextAsync(SecureDNS.BinariesVersionPath, NecessaryFiles.Resource1.versions); - - string msg2 = $"{Info.GetAppInfo(Assembly.GetExecutingAssembly()).ProductName} is ready.{NL}"; - CustomRichTextBoxLog.AppendText(msg2, Color.LightGray); - } - } - - private void GenerateCertificate() - { - // Create certificate directory - FileDirectory.CreateEmptyDirectory(SecureDNS.CertificateDirPath); - string issuerSubjectName = SecureDNS.CertIssuerSubjectName; - string subjectName = SecureDNS.CertSubjectName; - - // Generate certificate - if (!File.Exists(SecureDNS.IssuerCertPath) || !File.Exists(SecureDNS.CertPath) || !File.Exists(SecureDNS.KeyPath)) - { - IPAddress? gateway = Network.GetDefaultGateway(); - if (gateway != null) - { - CertificateTool.GenerateCertificate(SecureDNS.CertificateDirPath, gateway, issuerSubjectName, subjectName); - CertificateTool.CreateP12(SecureDNS.IssuerCertPath, SecureDNS.IssuerKeyPath); - CertificateTool.CreateP12(SecureDNS.CertPath, SecureDNS.KeyPath); - } - } - - // Install certificate - if (File.Exists(SecureDNS.IssuerCertPath) && !CustomCheckBoxSettingDontAskCertificate.Checked) - { - bool certInstalled = CertificateTool.InstallCertificate(SecureDNS.IssuerCertPath, StoreName.Root, StoreLocation.CurrentUser); - if (!certInstalled) - { - string msg = "Local DoH Server doesn't work without certificate.\nYou can remove certificate anytime from Windows.\nTry again?"; - using (new CenterWinDialog(this)) - { - DialogResult dr = CustomMessageBox.Show(msg, "Certificate", MessageBoxButtons.YesNo, MessageBoxIcon.Information); - if (dr == DialogResult.Yes) - CertificateTool.InstallCertificate(SecureDNS.IssuerCertPath, StoreName.Root, StoreLocation.CurrentUser); - } - } - } - } - - private void UninstallCertificate() - { - string issuerSubjectName = SecureDNS.CertIssuerSubjectName.Replace("CN=", string.Empty); - bool isCertInstalled = CertificateTool.IsCertificateInstalled(issuerSubjectName, StoreName.Root, StoreLocation.CurrentUser); - if (isCertInstalled) - { - if (IsDoHConnected) - { - string msg = "Disconnect local DoH first."; - CustomMessageBox.Show(msg, "Certificate", MessageBoxButtons.OK, MessageBoxIcon.Information); - return; - } - - // Uninstall Certs - CertificateTool.UninstallCertificate(issuerSubjectName, StoreName.Root, StoreLocation.CurrentUser); - - // Delete Cert Files - try - { - Directory.Delete(SecureDNS.CertificateDirPath, true); - } - catch (Exception) - { - // do nothing - } - } - else - { - string msg = "Certificate is already uninstalled."; - CustomMessageBox.Show(msg, "Certificate", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - } - - public static bool IsDnsProtocolSupported(string dns) - { - dns = dns.Trim(); - StringComparison sc = StringComparison.OrdinalIgnoreCase; - if (dns.StartsWith("tcp://", sc) || dns.StartsWith("udp://", sc) || dns.StartsWith("http://", sc) || dns.StartsWith("https://", sc) || - dns.StartsWith("tls://", sc) || dns.StartsWith("quic://", sc) || dns.StartsWith("h3://", sc) || dns.StartsWith("sdns://", sc)) - return true; - else - return isPlainDnsWithUnusualPort(dns); - - static bool isPlainDnsWithUnusualPort(string dns) // Support for plain DNS with unusual port - { - if (dns.Contains(':')) - { - string[] split = dns.Split(':'); - string ip = split[0]; - string port = split[1]; - if (Network.IsIPv4Valid(ip, out IPAddress _)) - { - bool isPortValid = int.TryParse(port, out int outPort); - if (isPortValid && outPort >= 1 && outPort <= 65535) - return true; - } - } - return false; - } - } - - //============================== Saved Servers - - private async Task WriteSavedServersDelayToLog() - { - List savedDnsList = SavedDnsList.ToList(); - if (savedDnsList.Any() && !IsCheckingStarted && !IsConnecting && !IsDisconnecting) - { - if (savedDnsList.Count > 1) - { - // Get blocked domain - string blockedDomain = GetBlockedDomainSetting(out string blockedDomainNoWww); - if (string.IsNullOrEmpty(blockedDomain)) return; - - // Get Check timeout value - decimal timeoutSec = 1; - this.InvokeIt(() => timeoutSec = CustomNumericUpDownSettingCheckTimeout.Value); - int timeoutMS = decimal.ToInt32(timeoutSec * 1000); - - // Get Bootstrap IP and Port - string bootstrap = GetBootstrapSetting(out int bootstrapPort).ToString(); - - // Add start msg - string msgStart = $"{NL}Contains {savedDnsList.Count} servers:{NL}"; - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgStart, Color.LightGray)); - - // Get insecure state - bool insecure = CustomCheckBoxInsecure.Checked; - int localPortInsecure = 5390; - if (insecure) - { - // Check open ports - bool isPortOk = GetListeningPort(localPortInsecure, "You need to resolve the conflict.", Color.IndianRed); - if (!isPortOk) return; - - int nt = 1; - - for (int n = 0; n < savedDnsList.Count; n++) - { - if (IsCheckingStarted || IsConnecting || IsDisconnecting) break; - await getDelay(n, nt++); - } - } - else - { - await Task.Run(async () => - { - var lists = savedDnsList.SplitToLists(3); - int nt = 1; - - for (int n = 0; n < lists.Count; n++) - { - if (IsCheckingStarted || IsConnecting || IsDisconnecting) break; - - List list = lists[n]; - var parallelLoopResult = Parallel.For(0, list.Count, async i => - { - await getDelay(i, nt++); - }); - - await Task.Run(async () => - { - while (!parallelLoopResult.IsCompleted) - { - if (parallelLoopResult.IsCompleted) - return Task.CompletedTask; - await Task.Delay(500); - } - return Task.CompletedTask; - }); - } - }); - } - - async Task getDelay(int n, int nt) - { - string dns = savedDnsList[n]; - - // Get Status and Latency - int latency = -1; - if (insecure) - latency = SecureDNS.CheckDns(true, blockedDomainNoWww, dns, timeoutMS, localPortInsecure, bootstrap, bootstrapPort, GetCPUPriority()); - else - latency = SecureDNS.CheckDns(blockedDomainNoWww, dns, timeoutMS, GetCPUPriority()); - - string msg = $"DNS {nt}: {latency} ms.{NL}"; - Color color = (latency == -1) ? Color.IndianRed : Color.MediumSeaGreen; - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msg, color)); - await Task.Delay(10); - } - } - else - { - string msg = $"There is only one saved server.{NL}"; - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msg, Color.MediumSeaGreen)); - } - } - else - { - string msg = $"There is no saved server.{NL}"; - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msg, Color.MediumSeaGreen)); - } - } - - private async void SavedDnsLoad() - { - await Task.Run(async () => - { - FileDirectory.CreateEmptyFile(SecureDNS.SavedEncodedDnsPath); - - List savedEncodedDnsList = new(); - savedEncodedDnsList.LoadFromFile(SecureDNS.SavedEncodedDnsPath, true, true); - savedEncodedDnsList.RemoveDuplicates(); - - if (savedEncodedDnsList.Any()) - { - // Built-in or Custom - bool builtInMode = CustomRadioButtonBuiltIn.Checked; - - string? fileContent = string.Empty; - if (builtInMode) - fileContent = await Resource.GetResourceTextFileAsync("SecureDNSClient.DNS-Servers.txt", Assembly.GetExecutingAssembly()); - else - { - FileDirectory.CreateEmptyFile(SecureDNS.CustomServersPath); - fileContent = await File.ReadAllTextAsync(SecureDNS.CustomServersPath); - } - - if (!string.IsNullOrEmpty(fileContent) && !string.IsNullOrWhiteSpace(fileContent)) - { - List dnsList = fileContent.SplitToLines(); - - for (int n = 0; n < savedEncodedDnsList.Count; n++) - { - string encodedDns = savedEncodedDnsList[n]; - for (int i = 0; i < dnsList.Count; i++) - { - string dns = dnsList[i]; - if (EncodingTool.GetSHA512(dns).Equals(encodedDns)) - { - SavedDnsList.Add(dns); - WorkingDnsList.Add(new Tuple(100, dns)); - break; - } - } - } - - WorkingDnsList.RemoveDuplicates(); // not important - SavedDnsList.RemoveDuplicates(); - } - } - - SavedDnsUpdateAuto(); - }); - } - - private async void SavedDnsUpdateAuto() - { - await Task.Delay(2000); - await SavedDnsUpdate(); - System.Timers.Timer savedDnsUpdateTimer = new(); - savedDnsUpdateTimer.Interval = TimeSpan.FromMinutes(60).TotalMilliseconds; - savedDnsUpdateTimer.Elapsed += async (s, e) => - { - await SavedDnsUpdate(); - }; - savedDnsUpdateTimer.Start(); - } - - private async Task SavedDnsUpdate() - { - // Update Working Servers? - bool updateWorkingServers = true; - - // Get blocked domain - string blockedDomain = GetBlockedDomainSetting(out string blockedDomainNoWww); - if (string.IsNullOrEmpty(blockedDomain)) return; - - // Get Check timeout value - decimal timeoutSec = 1; - this.InvokeIt(() => timeoutSec = CustomNumericUpDownSettingCheckTimeout.Value); - int timeoutMS = decimal.ToInt32(timeoutSec * 1000); - - // Get Bootstrap IP and Port - string bootstrap = GetBootstrapSetting(out int bootstrapPort).ToString(); - - // Get insecure state - bool insecure = CustomCheckBoxInsecure.Checked; - int localPortInsecure = 5390; - - // Get number of max servers - int maxServers = decimal.ToInt32(CustomNumericUpDownSettingMaxServers.Value); - - List newSavedDnsList = new(); - List newSavedEncodedDnsList = new(); - List> newWorkingDnsList = new(); - - // Check saved dns servers can work - if (SavedDnsList.Any()) - { - List savedDnsList = SavedDnsList.ToList(); - - int latency = -1; - - if (insecure) - { - int origPort = localPortInsecure; - bool isPortOpen1 = Network.IsPortOpen(IPAddress.Loopback.ToString(), localPortInsecure, 3); - if (isPortOpen1) - { - localPortInsecure = Network.GetNextPort(localPortInsecure); - bool isPortOpen2 = Network.IsPortOpen(IPAddress.Loopback.ToString(), localPortInsecure, 3); - if (isPortOpen2) - { - localPortInsecure = Network.GetNextPort(localPortInsecure); - bool isPortOpen3 = Network.IsPortOpen(IPAddress.Loopback.ToString(), localPortInsecure, 3); - if (isPortOpen3) - { - localPortInsecure = Network.GetNextPort(localPortInsecure); - bool isPortOpen4 = Network.IsPortOpen(IPAddress.Loopback.ToString(), localPortInsecure, 3); - if (isPortOpen4) - { - string existingProcessName = ProcessManager.GetProcessNameByListeningPort(origPort); - existingProcessName = existingProcessName == string.Empty ? "Unknown" : existingProcessName; - string msg = $"Cannot auto update Saved DNS List, port {origPort} is occupied by \"{existingProcessName}\".{NL}"; - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msg, Color.IndianRed)); - return; - } - } - } - } - - for (int n = 0; n < savedDnsList.Count; n++) - { - if (IsCheckingStarted) break; - - string dns = savedDnsList[n]; - latency = SecureDNS.CheckDns(true, blockedDomainNoWww, dns, timeoutMS, localPortInsecure, bootstrap, bootstrapPort, GetCPUPriority()); - if (latency != -1) - { - newSavedDnsList.Add(dns); - newSavedEncodedDnsList.Add(EncodingTool.GetSHA512(dns)); - - if (updateWorkingServers) - newWorkingDnsList.Add(new Tuple(latency, dns)); - } - } - } - else - { - // If Secure - await Task.Run(async () => - { - var lists = savedDnsList.SplitToLists(3); - - for (int n = 0; n < lists.Count; n++) - { - if (IsCheckingStarted) break; - - List list = lists[n]; - var parallelLoopResult = Parallel.For(0, list.Count, i => - { - string dns = list[i]; - latency = SecureDNS.CheckDns(blockedDomainNoWww, dns, timeoutMS, GetCPUPriority()); - if (latency != -1) - { - newSavedDnsList.Add(dns); - newSavedEncodedDnsList.Add(EncodingTool.GetSHA512(dns)); - if (updateWorkingServers) - newWorkingDnsList.Add(new Tuple(latency, dns)); - } - }); - - await Task.Run(async () => - { - while (true) - { - await Task.Delay(500); - if (parallelLoopResult.IsCompleted) - break; - } - }); - } - }); - } - } - - if (newSavedDnsList.Any()) - { - SavedDnsList.Clear(); - SavedDnsList = new(newSavedDnsList); - - SavedEncodedDnsList.Clear(); - SavedEncodedDnsList = new(newSavedEncodedDnsList); - SavedEncodedDnsList.SaveToFile(SecureDNS.SavedEncodedDnsPath); - - if (updateWorkingServers && !IsCheckingStarted) - { - // Add - WorkingDnsList = new(WorkingDnsList.Concat(newWorkingDnsList)); - - // Remove Duplicates - WorkingDnsList = new(WorkingDnsList.DistinctBy(x => x.Item2)); - } - } - - if (newSavedDnsList.Count >= maxServers) - return; - - // There is not enough working server lets find some - // Built-in or Custom - bool builtInMode = CustomRadioButtonBuiltIn.Checked; - - string? fileContent = string.Empty; - if (builtInMode) - fileContent = await Resource.GetResourceTextFileAsync("SecureDNSClient.DNS-Servers.txt", Assembly.GetExecutingAssembly()); - else - { - FileDirectory.CreateEmptyFile(SecureDNS.CustomServersPath); - fileContent = await File.ReadAllTextAsync(SecureDNS.CustomServersPath); - } - - if (string.IsNullOrEmpty(fileContent) || string.IsNullOrWhiteSpace(fileContent)) return; - - List dnsList = fileContent.SplitToLines(); - - int currentServers = newSavedDnsList.Count; - for (int n = 0; n < dnsList.Count; n++) - { - if (IsCheckingStarted) break; - - string dns = dnsList[n].Trim(); - if (!string.IsNullOrEmpty(dns) && !string.IsNullOrWhiteSpace(dns)) - { - if (IsDnsProtocolSupported(dns)) - { - // Get DNS Details - DnsReader dnsReader = new(dns, null); - - // Apply Protocol Selection - bool matchRules = CheckDnsMatchRules(dnsReader); - if (!matchRules) continue; - - // Get Status and Latency - bool dnsOK = false; - int latency = -1; - - if (insecure) - latency = SecureDNS.CheckDns(true, blockedDomainNoWww, dns, timeoutMS, localPortInsecure, bootstrap, bootstrapPort, GetCPUPriority()); - else - latency = SecureDNS.CheckDns(blockedDomainNoWww, dns, timeoutMS, GetCPUPriority()); - - dnsOK = latency != -1; - - if (dnsOK) - { - if (!newSavedDnsList.Contains(dns)) - { - newSavedDnsList.Add(dns); - newSavedEncodedDnsList.Add(EncodingTool.GetSHA512(dns)); - - if (updateWorkingServers) - newWorkingDnsList.Add(new Tuple(latency, dns)); - - currentServers++; - if (currentServers >= maxServers) break; - } - } - } - } - } - - if (newSavedDnsList.Any()) - { - SavedDnsList.Clear(); - SavedDnsList = newSavedDnsList.ToList(); - - SavedEncodedDnsList.Clear(); - SavedEncodedDnsList = newSavedEncodedDnsList.ToList(); - SavedEncodedDnsList.SaveToFile(SecureDNS.SavedEncodedDnsPath); - - if (updateWorkingServers && !IsCheckingStarted) - { - // Add - WorkingDnsList = WorkingDnsList.Concat(newWorkingDnsList).ToList(); - - // Remove Duplicates - WorkingDnsList = WorkingDnsList.DistinctBy(x => x.Item2).ToList(); - } - - return; - } - } - - //============================== DPI - - private void ApplyPDpiChanges(Process process) - { - // If DNS is Setting or Unsetting Return - if (IsDNSSetting || IsDNSUnsetting) return; - - ApplyPDpiChanges(out HTTPProxyServer.Program.DPIBypass.Mode bypassMode, out int beforSniChunks, out HTTPProxyServer.Program.DPIBypass.ChunkMode chunkMode, out int sniChunks, out int antiPatternOffset, out int fragmentDelay); - - UpdateProxyBools = false; - string command = $"staticdpibypassprogram -{bypassMode} -{beforSniChunks} -{chunkMode} -{sniChunks} -{antiPatternOffset} -{fragmentDelay}"; - Debug.WriteLine(command); - ProcessManager.SendCommand(process, command); - UpdateProxyBools = true; - - // Check DPI Works - if (CustomCheckBoxPDpiEnableDpiBypass.Checked && IsProxyActivated) - { - if (bypassMode != HTTPProxyServer.Program.DPIBypass.Mode.Disable) - { - IsProxyDPIActive = true; - IsDPIActive = true; - } - - // Get blocked domain - string blockedDomain = GetBlockedDomainSetting(out string _); - if (!string.IsNullOrEmpty(blockedDomain)) - Task.Run(() => CheckDPIWorks(blockedDomain)); - } - } - - private void ApplyPDpiChanges(HTTPProxyServer httpProxy) - { - if (httpProxy != null) - { - ApplyPDpiChanges(out HTTPProxyServer.Program.DPIBypass.Mode bypassMode, out int beforSniChunks, out HTTPProxyServer.Program.DPIBypass.ChunkMode chunkMode, out int sniChunks, out int antiPatternOffset, out int fragmentDelay); - - StaticDPIBypassProgram.Set(bypassMode, beforSniChunks, chunkMode, sniChunks, antiPatternOffset, fragmentDelay); - httpProxy.EnableStaticDPIBypass(StaticDPIBypassProgram); - } - } - - private void ApplyPDpiChanges(out HTTPProxyServer.Program.DPIBypass.Mode bypassMode, out int beforSniChunks, out HTTPProxyServer.Program.DPIBypass.ChunkMode chunkMode, out int sniChunks, out int antiPatternOffset, out int fragmentDelay) - { - // Get fragment settings - bool enableDpiBypass = CustomCheckBoxPDpiEnableDpiBypass.Checked; - beforSniChunks = Convert.ToInt32(CustomNumericUpDownPDpiBeforeSniChunks.Value); - int chunkModeInt = CustomComboBoxPDpiSniChunkMode.SelectedIndex; - chunkMode = chunkModeInt switch - { - 0 => HTTPProxyServer.Program.DPIBypass.ChunkMode.SNI, - 1 => HTTPProxyServer.Program.DPIBypass.ChunkMode.SniExtension, - 2 => HTTPProxyServer.Program.DPIBypass.ChunkMode.AllExtensions, - _ => HTTPProxyServer.Program.DPIBypass.ChunkMode.AllExtensions, - }; - sniChunks = Convert.ToInt32(CustomNumericUpDownPDpiSniChunks.Value); - antiPatternOffset = Convert.ToInt32(CustomNumericUpDownPDpiAntiPatternOffset.Value); - fragmentDelay = Convert.ToInt32(CustomNumericUpDownPDpiFragDelay.Value); - - bypassMode = enableDpiBypass ? HTTPProxyServer.Program.DPIBypass.Mode.Program : HTTPProxyServer.Program.DPIBypass.Mode.Disable; - } - - private async void CheckDPIWorks(string host, int timeoutSec = 30) //Default timeout: 100 sec - { - if (string.IsNullOrWhiteSpace(host)) return; - - // If DNS is Setting or Unsetting Return - if (IsDNSSetting || IsDNSUnsetting) return; - - // If user changing DPI mode fast, return. - if (StopWatchCheckDPIWorks.IsRunning) - return; - - // Start StopWatch - StopWatchCheckDPIWorks.Start(); - - // Write start DPI checking to log - string msgDPI = $"Checking DPI Bypass ({host})...{NL}"; - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI, Color.LightGray)); - - // Update Bools - //UpdateBools(); - //await UpdateBoolHttpProxy(); - - try - { - if (!IsDPIActive) - { - // Write activate DPI first to log - string msgDPI1 = $"DPI Check: "; - string msgDPI2 = $"Activate DPI Bypass to check.{NL}"; - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI1, Color.LightGray)); - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI2, Color.IndianRed)); - StopWatchCheckDPIWorks.Stop(); - StopWatchCheckDPIWorks.Reset(); - - return; - } - - // Is HTTP Proxy Direct DNS Set?! - bool isProxyDnsSet = false; - if (FakeProxy.IsRunning && - IsSharing && - ProxyDNSMode != HTTPProxyServer.Program.Dns.Mode.Disable && - ProxyStaticDPIBypassMode != HTTPProxyServer.Program.DPIBypass.Mode.Disable) - isProxyDnsSet = true; - - if (!IsDNSSet && !isProxyDnsSet) - { - // Write set DNS first to log - string msgDPI1 = $"DPI Check: "; - string msgDPI2 = $"Set DNS to check.{NL}"; - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI1, Color.LightGray)); - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI2, Color.IndianRed)); - StopWatchCheckDPIWorks.Stop(); - StopWatchCheckDPIWorks.Reset(); - - return; - } - - string url = $"https://{host}/"; - Uri uri = new(url, UriKind.Absolute); - - bool isProxyPortOpen = Network.IsPortOpen(IPAddress.Loopback.ToString(), ProxyPort, 5); - Debug.WriteLine($"Is Proxy Port Open: {isProxyPortOpen}, Port: {ProxyPort}"); - - if (IsProxyDPIActive && isProxyPortOpen && ProxyProcess != null) - { - Debug.WriteLine("Proxy"); + private void FormMain_ResizeEnd(object? sender, EventArgs e) + { + SplitContainerMain.Visible = true; + LabelMoving.Visible = false; + LabelMoving.SendToBack(); + } - UpdateProxyBools = false; - // Kill all requests before check - ProcessManager.SendCommand(ProxyProcess, "killall"); + private void FormMain_Resize(object? sender, EventArgs e) + { + if (WindowState != FormWindowState.Minimized) + { + SplitContainerMain.Visible = true; + LabelMoving.Visible = false; + LabelMoving.SendToBack(); + } + } - string proxyScheme = $"http://{IPAddress.Loopback}:{ProxyPort}"; + //============================== Constant - using SocketsHttpHandler socketsHttpHandler = new(); - socketsHttpHandler.Proxy = new WebProxy(proxyScheme, true); + private void DefaultSettings() + { + // Check + CustomRadioButtonBuiltIn.Checked = true; + CustomRadioButtonCustom.Checked = false; + CustomCheckBoxCheckInParallel.Checked = false; + CustomCheckBoxInsecure.Checked = false; + LinkLabelCheckUpdate.Text = string.Empty; - using HttpClient httpClientWithProxy = new(socketsHttpHandler); - httpClientWithProxy.Timeout = TimeSpan.FromSeconds(timeoutSec); + // Connect + CustomRadioButtonConnectCheckedServers.Checked = true; + CustomRadioButtonConnectFakeProxyDohViaProxyDPI.Checked = false; + CustomRadioButtonConnectFakeProxyDohViaGoodbyeDPI.Checked = false; + CustomRadioButtonConnectDNSCrypt.Checked = false; + CustomTextBoxHTTPProxy.Text = string.Empty; - StopWatchCheckDPIWorks.Restart(); + // Share + CustomCheckBoxHTTPProxyEventShowRequest.Checked = false; + CustomCheckBoxHTTPProxyEventShowChunkDetails.Checked = false; + CustomCheckBoxPDpiEnableDpiBypass.Checked = true; + CustomNumericUpDownPDpiBeforeSniChunks.Value = (decimal)50; + CustomComboBoxPDpiSniChunkMode.SelectedIndex = 0; + CustomNumericUpDownPDpiSniChunks.Value = (decimal)5; + CustomNumericUpDownPDpiAntiPatternOffset.Value = (decimal)2; + CustomNumericUpDownPDpiFragDelay.Value = (decimal)1; - HttpResponseMessage r = await httpClientWithProxy.GetAsync(uri); + // DPI Basic + CustomRadioButtonDPIMode1.Checked = false; + CustomRadioButtonDPIMode2.Checked = false; + CustomRadioButtonDPIMode3.Checked = false; + CustomRadioButtonDPIMode4.Checked = false; + CustomRadioButtonDPIMode5.Checked = false; + CustomRadioButtonDPIMode6.Checked = false; + CustomRadioButtonDPIModeLight.Checked = true; + CustomRadioButtonDPIModeMedium.Checked = false; + CustomRadioButtonDPIModeHigh.Checked = false; + CustomRadioButtonDPIModeExtreme.Checked = false; + CustomNumericUpDownSSLFragmentSize.Value = (decimal)40; - if (r.IsSuccessStatusCode || r.StatusCode.ToString() == "NotFound") - { - msgSuccess(); - r.Dispose(); - } - else - msgFailed(r); - } - else - { - Debug.WriteLine("No Proxy"); - using HttpClient httpClient = new(); - httpClient.Timeout = TimeSpan.FromSeconds(timeoutSec); + // DPI Advanced + CustomCheckBoxDPIAdvP.Checked = true; + CustomCheckBoxDPIAdvR.Checked = true; + CustomCheckBoxDPIAdvS.Checked = true; + CustomCheckBoxDPIAdvM.Checked = true; + CustomCheckBoxDPIAdvF.Checked = false; + CustomNumericUpDownDPIAdvF.Value = (decimal)2; + CustomCheckBoxDPIAdvK.Checked = false; + CustomNumericUpDownDPIAdvK.Value = (decimal)2; + CustomCheckBoxDPIAdvN.Checked = false; + CustomCheckBoxDPIAdvE.Checked = true; + CustomNumericUpDownDPIAdvE.Value = (decimal)40; + CustomCheckBoxDPIAdvA.Checked = false; + CustomCheckBoxDPIAdvW.Checked = true; + CustomCheckBoxDPIAdvPort.Checked = false; + CustomNumericUpDownDPIAdvPort.Value = (decimal)80; + CustomCheckBoxDPIAdvIpId.Checked = false; + CustomTextBoxDPIAdvIpId.Text = string.Empty; + CustomCheckBoxDPIAdvAllowNoSNI.Checked = false; + CustomCheckBoxDPIAdvSetTTL.Checked = false; + CustomNumericUpDownDPIAdvSetTTL.Value = (decimal)1; + CustomCheckBoxDPIAdvAutoTTL.Checked = false; + CustomTextBoxDPIAdvAutoTTL.Text = "1-4-10"; + CustomCheckBoxDPIAdvMinTTL.Checked = false; + CustomNumericUpDownDPIAdvMinTTL.Value = (decimal)3; + CustomCheckBoxDPIAdvWrongChksum.Checked = false; + CustomCheckBoxDPIAdvWrongSeq.Checked = false; + CustomCheckBoxDPIAdvNativeFrag.Checked = true; + CustomCheckBoxDPIAdvReverseFrag.Checked = false; + CustomCheckBoxDPIAdvMaxPayload.Checked = true; + CustomNumericUpDownDPIAdvMaxPayload.Value = (decimal)1200; - StopWatchCheckDPIWorks.Restart(); + // Settings Working Mode + CustomRadioButtonSettingWorkingModeDNS.Checked = true; + CustomRadioButtonSettingWorkingModeDNSandDoH.Checked = false; + CustomNumericUpDownSettingWorkingModeSetDohPort.Value = (decimal)443; - HttpResponseMessage r = await httpClient.GetAsync(uri); + // Settings Check + CustomNumericUpDownSettingCheckTimeout.Value = (decimal)5; + CustomTextBoxSettingCheckDPIHost.Text = "www.youtube.com"; + CustomCheckBoxSettingProtocolDoH.Checked = true; + CustomCheckBoxSettingProtocolTLS.Checked = true; + CustomCheckBoxSettingProtocolDNSCrypt.Checked = true; + CustomCheckBoxSettingProtocolDNSCryptRelay.Checked = true; + CustomCheckBoxSettingProtocolDoQ.Checked = true; + CustomCheckBoxSettingProtocolPlainDNS.Checked = false; + CustomCheckBoxSettingSdnsDNSSec.Checked = false; + CustomCheckBoxSettingSdnsNoLog.Checked = false; + CustomCheckBoxSettingSdnsNoFilter.Checked = true; - if (r.IsSuccessStatusCode || r.StatusCode.ToString() == "NotFound") - { - msgSuccess(); - r.Dispose(); - } - else - msgFailed(r); - } + // Settings Connect + CustomCheckBoxSettingEnableCache.Checked = true; + CustomNumericUpDownSettingMaxServers.Value = (decimal)5; + CustomNumericUpDownSettingCamouflageDnsPort.Value = (decimal)5380; - void msgSuccess() - { - // Write Success to log - if (IsDPIActive) - { - var elapsedTime = Math.Round((double)StopWatchCheckDPIWorks.ElapsedMilliseconds / 1000); - string msgDPI1 = $"DPI Check: "; - string msgDPI2 = $"Successfully opened {host} in {elapsedTime} seconds.{NL}"; - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI1, Color.LightGray)); - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI2, Color.MediumSeaGreen)); - } - else - { - string msgCancel = $"DPI Check: Canceled.{NL}"; - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgCancel, Color.LightGray)); - } - } + // Settings Set/Unset DNS + CustomRadioButtonSettingUnsetDnsToDhcp.Checked = false; + CustomRadioButtonSettingUnsetDnsToStatic.Checked = true; + CustomTextBoxSettingUnsetDns1.Text = "8.8.8.8"; + CustomTextBoxSettingUnsetDns2.Text = "8.8.4.4"; - void msgFailed(HttpResponseMessage r) - { - // Write Status to log - if (IsDPIActive) - { - string msgDPI1 = $"DPI Check: "; - string msgDPI2 = $"Status {r.StatusCode}: {r.ReasonPhrase}.{NL}"; - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI1, Color.LightGray)); - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI2, Color.DodgerBlue)); - } - else - { - string msgCancel = $"DPI Check: Canceled.{NL}"; - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgCancel, Color.LightGray)); - } + // Settings Share Basic + CustomNumericUpDownSettingHTTPProxyPort.Value = (decimal)8080; + CustomNumericUpDownSettingHTTPProxyHandleRequests.Value = (decimal)2000; + CustomCheckBoxSettingProxyBlockPort80.Checked = true; + CustomNumericUpDownSettingHTTPProxyKillRequestTimeout.Value = (decimal)20; + CustomCheckBoxSettingHTTPProxyUpstream.Checked = false; + CustomCheckBoxSettingHTTPProxyUpstreamOnlyBlockedIPs.Checked = true; + CustomComboBoxSettingHttpProxyUpstreamMode.SelectedIndex = 1; + CustomTextBoxSettingHTTPProxyUpstreamHost.Text = IPAddress.Loopback.ToString(); + CustomNumericUpDownSettingHTTPProxyUpstreamPort.Value = (decimal)1090; - r.Dispose(); - } + // Settings Share Advanced + CustomCheckBoxSettingHTTPProxyEnableFakeProxy.Checked = false; + CustomCheckBoxSettingHTTPProxyCfCleanIP.Checked = false; + CustomTextBoxSettingHTTPProxyCfCleanIP.Text = string.Empty; + CustomCheckBoxSettingHTTPProxyEnableFakeDNS.Checked = false; + CustomCheckBoxSettingHTTPProxyEnableBlackWhiteList.Checked = false; + CustomCheckBoxSettingHTTPProxyEnableDontBypass.Checked = false; - StopWatchCheckDPIWorks.Stop(); - StopWatchCheckDPIWorks.Reset(); - } - catch (Exception ex) - { - // Write Failed to log - if (IsDPIActive) - { - string msgDPI1 = $"DPI Check: "; - string msgDPI2 = $"{ex.Message}{NL}"; - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI1, Color.LightGray)); - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI2, Color.IndianRed)); - } - else - { - string msgCancel = $"DPI Check: Canceled.{NL}"; - this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgCancel, Color.LightGray)); - } + // Settings Fake Proxy + CustomNumericUpDownSettingFakeProxyPort.Value = (decimal)8070; + CustomTextBoxSettingFakeProxyDohAddress.Text = "https://dns.cloudflare.com/dns-query"; + CustomTextBoxSettingFakeProxyDohCleanIP.Text = "104.16.132.229"; - StopWatchCheckDPIWorks.Stop(); - StopWatchCheckDPIWorks.Reset(); - } + // Settings CPU + CustomRadioButtonSettingCPUHigh.Checked = false; + CustomRadioButtonSettingCPUAboveNormal.Checked = false; + CustomRadioButtonSettingCPUNormal.Checked = true; + CustomRadioButtonSettingCPUBelowNormal.Checked = false; + CustomRadioButtonSettingCPULow.Checked = false; + CustomNumericUpDownSettingCpuKillProxyRequests.Value = (decimal)40; - UpdateProxyBools = true; + // Settings Others + CustomTextBoxSettingBootstrapDnsIP.Text = "8.8.8.8"; + CustomNumericUpDownSettingBootstrapDnsPort.Value = (decimal)53; + CustomTextBoxSettingFallbackDnsIP.Text = "8.8.8.8"; + CustomNumericUpDownSettingFallbackDnsPort.Value = (decimal)53; + CustomCheckBoxSettingDontAskCertificate.Checked = false; + CustomCheckBoxSettingDisableAudioAlert.Checked = false; } //============================== Buttons @@ -2248,87 +557,14 @@ private void CustomButtonCheck_Click(object? sender, EventArgs? e) StartCheck(); } - private void CustomButtonCheckUpdate_Click(object sender, EventArgs e) + private async void CustomButtonCheckUpdate_Click(object sender, EventArgs e) { - CheckUpdate(true); + await CheckUpdate(true); } - private async void CustomButtonConnectAll_Click(object sender, EventArgs e) + private void CustomButtonConnectAll_Click(object sender, EventArgs e) { - if (!IsCheckingStarted && !IsConnected && !ProcessManager.FindProcessByName("goodbyedpi") && !IsDNSSet) - { - if (!IsSharing) - await connectAll(); - else - disconnectAll(); - } - else - disconnectAll(); - - async Task connectAll() - { - ConnectAllClicked = true; - CustomButtonCheck_Click(null, null); - Task taskWait1 = await Task.Run(async () => - { - while (IsCheckingStarted) - { - if (!IsCheckingStarted) - return Task.CompletedTask; - await Task.Delay(1000); - } - return Task.CompletedTask; - }); - await Task.Delay(1000); - if (!IsCheckingStarted) - { - CustomButtonConnect_Click(null, null); - Task taskWait2 = await Task.Run(async () => - { - while (!IsDNSConnected && !IsDoHConnected) - { - if (NumberOfWorkingServers < 1) - return Task.CompletedTask; - await Task.Delay(1000); - } - return Task.CompletedTask; - }); - await Task.Delay(1000); - if (IsDNSConnected || IsDoHConnected) - { - UpdateStatusLong(); - if (!ProcessManager.FindProcessByPID(PIDGoodbyeDPI)) - DPIBasic(); - UpdateStatusLong(); - await Task.Delay(1000); - if (!IsDNSSet) - SetDNS(); - UpdateStatusLong(); - } - ConnectAllClicked = false; - } - } - - void disconnectAll() - { - if (IsConnected) - { - CustomButtonConnect_Click(null, null); - UpdateStatusLong(); - } - if (ProcessManager.FindProcessByName("goodbyedpi")) - { - DPIBasic(); - UpdateStatusLong(); - } - if (IsDNSSet) - { - SetDNS(); - UpdateStatusLong(); - } - if (IsCheckingStarted) - CustomButtonCheck_Click(null, null); - } + } private async void CustomButtonWriteSavedServersDelay_Click(object sender, EventArgs e) @@ -2388,8 +624,8 @@ private void CustomButtonSetProxy_Click(object sender, EventArgs e) } private void CustomButtonPDpiApplyChanges_Click(object sender, EventArgs e) { - if (CustomCheckBoxSettingHTTPProxyEnableFakeProxy.Checked) - ApplyPDpiChanges(FakeProxy); + if (CustomCheckBoxSettingHTTPProxyEnableFakeProxy.Checked && FakeProxyProcess != null) + ApplyPDpiChangesFakeProxy(FakeProxyProcess); if (ProxyProcess != null) ApplyPDpiChanges(ProxyProcess); } @@ -2608,6 +844,44 @@ private async void ToolStripMenuItemIcon_Click(object? sender, EventArgs e) NotifyIconMain.BalloonTipText = msg; NotifyIconMain.ShowBalloonTip(500); + // Deactivate GoodbyeDPI + if (IsGoodbyeDPIActive) + { + this.InvokeIt(() => CustomRichTextBoxLog.AppendText($"Deactivating GoodbyeDPI...{NL}", Color.LightGray)); + ProcessManager.KillProcessByPID(PIDGoodbyeDPI); + + // Wait + Task wait1 = Task.Run(async () => + { + while (ProcessManager.FindProcessByPID(PIDGoodbyeDPI)) + { + if (!ProcessManager.FindProcessByPID(PIDGoodbyeDPI)) + break; + await Task.Delay(50); + } + }); + await wait1.WaitAsync(TimeSpan.FromSeconds(5)); + } + + // Deactivate GoodbyeDPIBypass (Connect Method 3) + if (ProcessManager.FindProcessByPID(PIDGoodbyeDPIBypass)) + { + this.InvokeIt(() => CustomRichTextBoxLog.AppendText($"Deactivating GoodbyeDPI Bypass...{NL}", Color.LightGray)); + ProcessManager.KillProcessByPID(PIDGoodbyeDPIBypass); + + // Wait + Task wait1 = Task.Run(async () => + { + while (ProcessManager.FindProcessByPID(PIDGoodbyeDPIBypass)) + { + if (!ProcessManager.FindProcessByPID(PIDGoodbyeDPIBypass)) + break; + await Task.Delay(50); + } + }); + await wait1.WaitAsync(TimeSpan.FromSeconds(5)); + } + // Unset Proxy if (IsProxySet) { @@ -2623,7 +897,6 @@ private async void ToolStripMenuItemIcon_Click(object? sender, EventArgs e) break; await Task.Delay(50); } - return Task.CompletedTask; }); await wait1.WaitAsync(TimeSpan.FromSeconds(5)); } @@ -2643,40 +916,38 @@ private async void ToolStripMenuItemIcon_Click(object? sender, EventArgs e) break; await Task.Delay(50); } - return Task.CompletedTask; }); await wait1.WaitAsync(TimeSpan.FromSeconds(5)); } - // Unset DNS - if (IsDNSSet || IsDNSSetting) - { - this.InvokeIt(() => CustomRichTextBoxLog.AppendText($"Unsetting DNS...{NL}", Color.LightGray)); - await Task.Run(() => UnsetSavedDNS()); - IsDNSSet = false; - } - - // Deactivate GoodbyeDPI - if (IsGoodbyeDPIActive) + // Deactivate Fake Proxy + if (ProcessManager.FindProcessByPID(PIDFakeProxy)) { - this.InvokeIt(() => CustomRichTextBoxLog.AppendText($"Deactivating GoodbyeDPI...{NL}", Color.LightGray)); - ProcessManager.KillProcessByPID(PIDGoodbyeDPI); + this.InvokeIt(() => CustomRichTextBoxLog.AppendText($"Deactivating Fake Proxy...{NL}", Color.LightGray)); + ProcessManager.KillProcessByPID(PIDFakeProxy); // Wait Task wait1 = Task.Run(async () => { - while (ProcessManager.FindProcessByPID(PIDGoodbyeDPI)) + while (ProcessManager.FindProcessByPID(PIDFakeProxy)) { - if (!ProcessManager.FindProcessByPID(PIDGoodbyeDPI)) + if (!ProcessManager.FindProcessByPID(PIDFakeProxy)) break; await Task.Delay(50); } - return Task.CompletedTask; }); await wait1.WaitAsync(TimeSpan.FromSeconds(5)); } - - // Kill all processes + + // Unset DNS + if (IsDNSSet || IsDNSSetting) + { + this.InvokeIt(() => CustomRichTextBoxLog.AppendText($"Unsetting DNS...{NL}", Color.LightGray)); + await Task.Run(() => UnsetSavedDNS()); + IsDNSSet = false; + } + + // Disconnect - Kill all processes if (IsConnected || IsConnecting) { this.InvokeIt(() => CustomRichTextBoxLog.AppendText($"Disconnecting...{NL}", Color.LightGray)); @@ -2691,7 +962,6 @@ private async void ToolStripMenuItemIcon_Click(object? sender, EventArgs e) break; await Task.Delay(50); } - return Task.CompletedTask; }); await wait1.WaitAsync(TimeSpan.FromSeconds(5)); } diff --git a/SecureDNSClient/Forms/FormMain.resx b/SecureDNSClient/Forms/FormMain.resx index 1fc9d68..661e379 100644 --- a/SecureDNSClient/Forms/FormMain.resx +++ b/SecureDNSClient/Forms/FormMain.resx @@ -3210,6 +3210,9 @@ ////////4AAAAB////////// + + 47 + AAABAAkAEBAAAAEAIABoBAAAlgAAABgYAAABACAAiAkAAP4EAAAgIAAAAQAgAKgQAACGDgAAMDAAAAEA diff --git a/SecureDNSClient/Forms/GoodbyeDPI.cs b/SecureDNSClient/Forms/GoodbyeDPI.cs index ec09c98..4b972ad 100644 --- a/SecureDNSClient/Forms/GoodbyeDPI.cs +++ b/SecureDNSClient/Forms/GoodbyeDPI.cs @@ -8,6 +8,21 @@ namespace SecureDNSClient { public partial class FormMain { + public DPIBasicBypassMode GetGoodbyeDpiModeBasic() + { + if (CustomRadioButtonDPIMode1.Checked) return DPIBasicBypassMode.Mode1; + else if (CustomRadioButtonDPIMode2.Checked) return DPIBasicBypassMode.Mode2; + else if (CustomRadioButtonDPIMode3.Checked) return DPIBasicBypassMode.Mode3; + else if (CustomRadioButtonDPIMode4.Checked) return DPIBasicBypassMode.Mode4; + else if (CustomRadioButtonDPIMode5.Checked) return DPIBasicBypassMode.Mode5; + else if (CustomRadioButtonDPIMode6.Checked) return DPIBasicBypassMode.Mode6; + else if (CustomRadioButtonDPIModeLight.Checked) return DPIBasicBypassMode.Light; + else if (CustomRadioButtonDPIModeMedium.Checked) return DPIBasicBypassMode.Medium; + else if (CustomRadioButtonDPIModeHigh.Checked) return DPIBasicBypassMode.High; + else if (CustomRadioButtonDPIModeExtreme.Checked) return DPIBasicBypassMode.Extreme; + else return DPIBasicBypassMode.Light; + } + private void DPIBasic() { //// Write Connect first to log @@ -43,66 +58,12 @@ private void DPIBasic() fallbackDnsPort = int.Parse(CustomNumericUpDownSettingBootstrapDnsPort.Value.ToString()); } - if (CustomRadioButtonDPIMode1.Checked) - { - DPIBasicBypass dpiBypass = new(DPIBasicBypassMode.Mode1, CustomNumericUpDownSSLFragmentSize.Value, fallbackDNS, fallbackDnsPort); - args = dpiBypass.Args; - text = dpiBypass.Text; - } - else if (CustomRadioButtonDPIMode2.Checked) - { - DPIBasicBypass dpiBypass = new(DPIBasicBypassMode.Mode2, CustomNumericUpDownSSLFragmentSize.Value, fallbackDNS, fallbackDnsPort); - args = dpiBypass.Args; - text = dpiBypass.Text; - } - else if (CustomRadioButtonDPIMode3.Checked) - { - DPIBasicBypass dpiBypass = new(DPIBasicBypassMode.Mode3, CustomNumericUpDownSSLFragmentSize.Value, fallbackDNS, fallbackDnsPort); - args = dpiBypass.Args; - text = dpiBypass.Text; - } - else if (CustomRadioButtonDPIMode4.Checked) - { - DPIBasicBypass dpiBypass = new(DPIBasicBypassMode.Mode4, CustomNumericUpDownSSLFragmentSize.Value, fallbackDNS, fallbackDnsPort); - args = dpiBypass.Args; - text = dpiBypass.Text; - } - else if (CustomRadioButtonDPIMode5.Checked) - { - DPIBasicBypass dpiBypass = new(DPIBasicBypassMode.Mode5, CustomNumericUpDownSSLFragmentSize.Value, fallbackDNS, fallbackDnsPort); - args = dpiBypass.Args; - text = dpiBypass.Text; - } - else if (CustomRadioButtonDPIMode6.Checked) - { - DPIBasicBypass dpiBypass = new(DPIBasicBypassMode.Mode6, CustomNumericUpDownSSLFragmentSize.Value, fallbackDNS, fallbackDnsPort); - args = dpiBypass.Args; - text = dpiBypass.Text; - } - else if (CustomRadioButtonDPIModeLight.Checked) - { - DPIBasicBypass dpiBypass = new(DPIBasicBypassMode.Light, CustomNumericUpDownSSLFragmentSize.Value, fallbackDNS, fallbackDnsPort); - args = dpiBypass.Args; - text = dpiBypass.Text; - } - else if (CustomRadioButtonDPIModeMedium.Checked) - { - DPIBasicBypass dpiBypass = new(DPIBasicBypassMode.Medium, CustomNumericUpDownSSLFragmentSize.Value, fallbackDNS, fallbackDnsPort); - args = dpiBypass.Args; - text = dpiBypass.Text; - } - else if (CustomRadioButtonDPIModeHigh.Checked) - { - DPIBasicBypass dpiBypass = new(DPIBasicBypassMode.High, CustomNumericUpDownSSLFragmentSize.Value, fallbackDNS, fallbackDnsPort); - args = dpiBypass.Args; - text = dpiBypass.Text; - } - else if (CustomRadioButtonDPIModeExtreme.Checked) - { - DPIBasicBypass dpiBypass = new(DPIBasicBypassMode.Extreme, CustomNumericUpDownSSLFragmentSize.Value, fallbackDNS, fallbackDnsPort); - args = dpiBypass.Args; - text = dpiBypass.Text; - } + // Get User Mode + DPIBasicBypassMode mode = GetGoodbyeDpiModeBasic(); + + DPIBasicBypass dpiBypass = new(mode, CustomNumericUpDownSSLFragmentSize.Value, fallbackDNS, fallbackDnsPort); + args = dpiBypass.Args; + text = dpiBypass.Text; // Execute GoodByeDPI PIDGoodbyeDPI = ProcessManager.ExecuteOnly(out Process _, SecureDNS.GoodbyeDpi, args, true, true, SecureDNS.BinaryDirPath, GetCPUPriority()); diff --git a/SecureDNSClient/Forms/Methods.cs b/SecureDNSClient/Forms/Methods.cs new file mode 100644 index 0000000..d00a48e --- /dev/null +++ b/SecureDNSClient/Forms/Methods.cs @@ -0,0 +1,468 @@ +using MsmhTools; +using MsmhTools.HTTPProxyServer; +using System; +using System.Diagnostics; +using System.Net; +using System.Reflection; + +namespace SecureDNSClient +{ + public partial class FormMain + { + + public enum ConnectMode + { + ConnectToWorkingServers, + ConnectToFakeProxyDohViaProxyDPI, + ConnectToFakeProxyDohViaGoodbyeDPI, + ConnectToPopularServersWithProxy + } + + public ConnectMode GetConnectMode() + { + // Get Connect modes + bool a = CustomRadioButtonConnectCheckedServers.Checked; + bool b = CustomRadioButtonConnectFakeProxyDohViaProxyDPI.Checked; + bool c = CustomRadioButtonConnectFakeProxyDohViaGoodbyeDPI.Checked; + bool d = CustomRadioButtonConnectDNSCrypt.Checked; + + ConnectMode connectMode = ConnectMode.ConnectToWorkingServers; + if (a) connectMode = ConnectMode.ConnectToWorkingServers; + else if (b) connectMode = ConnectMode.ConnectToFakeProxyDohViaProxyDPI; + else if (c) connectMode = ConnectMode.ConnectToFakeProxyDohViaGoodbyeDPI; + else if (d) connectMode = ConnectMode.ConnectToPopularServersWithProxy; + return connectMode; + } + + private static void MoveToNewLocation() + { + try + { + if (File.Exists(SecureDNS.OldSettingsXmlPath)) File.Move(SecureDNS.OldSettingsXmlPath, SecureDNS.SettingsXmlPath, false); + if (File.Exists(SecureDNS.OldSettingsXmlDnsLookup)) File.Move(SecureDNS.OldSettingsXmlDnsLookup, SecureDNS.SettingsXmlDnsLookup, false); + if (File.Exists(SecureDNS.OldSettingsXmlIpScanner)) File.Move(SecureDNS.OldSettingsXmlIpScanner, SecureDNS.SettingsXmlIpScanner, false); + if (File.Exists(SecureDNS.OldUserIdPath)) File.Move(SecureDNS.OldUserIdPath, SecureDNS.UserIdPath, false); + if (File.Exists(SecureDNS.OldFakeDnsRulesPath)) File.Move(SecureDNS.OldFakeDnsRulesPath, SecureDNS.FakeDnsRulesPath, false); + if (File.Exists(SecureDNS.OldBlackWhiteListPath)) File.Move(SecureDNS.OldBlackWhiteListPath, SecureDNS.BlackWhiteListPath, false); + if (File.Exists(SecureDNS.OldDontBypassListPath)) File.Move(SecureDNS.OldDontBypassListPath, SecureDNS.DontBypassListPath, false); + if (File.Exists(SecureDNS.OldCustomServersPath)) File.Move(SecureDNS.OldCustomServersPath, SecureDNS.CustomServersPath, false); + if (File.Exists(SecureDNS.OldWorkingServersPath)) File.Move(SecureDNS.OldWorkingServersPath, SecureDNS.WorkingServersPath, false); + if (File.Exists(SecureDNS.OldDPIBlacklistPath)) File.Move(SecureDNS.OldDPIBlacklistPath, SecureDNS.DPIBlacklistPath, false); + if (File.Exists(SecureDNS.OldNicNamePath)) File.Move(SecureDNS.OldNicNamePath, SecureDNS.NicNamePath, false); + if (File.Exists(SecureDNS.OldSavedEncodedDnsPath)) File.Move(SecureDNS.OldSavedEncodedDnsPath, SecureDNS.SavedEncodedDnsPath, false); + } + catch (Exception) + { + // do nothing + } + } + + private void FixScreenDPI(Form form) + { + using Graphics g = form.CreateGraphics(); + + int x1 = 120; int y1 = 21; + int splitMainD = SplitContainerMain.SplitterDistance; + int splitTopD = SplitContainerTop.SplitterDistance; + + if (form.AutoScaleDimensions == form.CurrentAutoScaleDimensions) + { + // 96 = 100% + // 120 = 125% + // 144 = 150% + if (g.DpiX == 120) // 125% + { + setSize(x1 + 35, y1 + 10, splitMainD, splitTopD + 100); + } + else if (g.DpiX == 144) // 150% + { + setSize(x1 + 80, y1 + 20, splitMainD, splitTopD + 450); + } + + void setSize(int x1, int y1, int splitMainD, int splitTopD) + { + CustomTabControlMain.SizeMode = TabSizeMode.Fixed; + CustomTabControlMain.ItemSize = new Size(x1, y1); + CustomTabControlSecureDNS.SizeMode = TabSizeMode.Fixed; + CustomTabControlSecureDNS.ItemSize = new Size(x1, y1); + CustomTabControlDPIBasicAdvanced.SizeMode = TabSizeMode.Fixed; + CustomTabControlDPIBasicAdvanced.ItemSize = new Size(x1, y1); + CustomTabControlSettings.SizeMode = TabSizeMode.Fixed; + CustomTabControlSettings.ItemSize = new Size(y1 + 9, x1); + + SplitContainerMain.SplitterDistance = splitMainD; + SplitContainerTop.SplitterDistance = splitTopD; + } + } + } + + private bool IsInternetAlive(bool writeToLog = true) + { + if (!Network.IsInternetAlive()) + { + string msgNet = "There is no Internet connectivity." + NL; + if (writeToLog) + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgNet, Color.IndianRed)); + return false; + } + else + return true; + } + + private void FlushDNS(bool writeToLog = true) + { + string? flushDNS = ProcessManager.Execute(out Process _, "ipconfig", "/flushdns"); + if (!string.IsNullOrWhiteSpace(flushDNS) && writeToLog) + { + // Write flush DNS message to log + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(flushDNS + NL, Color.LightGray)); + } + } + + private static void FlushDnsOnExit() + { + ProcessManager.Execute(out Process _, "ipconfig", "/flushdns", true, true); + ProcessManager.Execute(out Process _, "ipconfig", "/registerdns", true, true); + ProcessManager.Execute(out Process _, "ipconfig", "/release", true, true); + ProcessManager.ExecuteOnly(out Process _, "ipconfig", "/renew", true, true); + //ProcessManager.Execute("netsh", "winsock reset"); // Needs PC Restart + } + + private void KillAll(bool killByName = false) + { + if (killByName) + { + ProcessManager.KillProcessByName("SDCHttpProxy"); + ProcessManager.KillProcessByName("dnslookup"); + ProcessManager.KillProcessByName("dnsproxy"); + ProcessManager.KillProcessByName("dnscrypt-proxy"); + ProcessManager.KillProcessByName("goodbyedpi"); + } + else + { + ProcessManager.KillProcessByPID(PIDHttpProxy); + ProcessManager.KillProcessByPID(PIDFakeProxy); + ProcessManager.KillProcessByName("dnslookup"); + ProcessManager.KillProcessByPID(PIDDNSProxy); + ProcessManager.KillProcessByPID(PIDDNSProxyBypass); + ProcessManager.KillProcessByPID(PIDDNSCrypt); + ProcessManager.KillProcessByPID(PIDDNSCryptBypass); + ProcessManager.KillProcessByPID(PIDGoodbyeDPI); + ProcessManager.KillProcessByPID(PIDGoodbyeDPIBypass); + } + } + + public ProcessPriorityClass GetCPUPriority() + { + if (CustomRadioButtonSettingCPUHigh.Checked) + return ProcessPriorityClass.High; + else if (CustomRadioButtonSettingCPUAboveNormal.Checked) + return ProcessPriorityClass.AboveNormal; + else if (CustomRadioButtonSettingCPUNormal.Checked) + return ProcessPriorityClass.Normal; + else if (CustomRadioButtonSettingCPUBelowNormal.Checked) + return ProcessPriorityClass.BelowNormal; + else if (CustomRadioButtonSettingCPULow.Checked) + return ProcessPriorityClass.Idle; + else + return ProcessPriorityClass.Normal; + } + + public bool CheckNecessaryFiles(bool showMessage = true) + { + if (!File.Exists(SecureDNS.DnsLookup) || !File.Exists(SecureDNS.DnsProxy) || !File.Exists(SecureDNS.DNSCrypt) || + !File.Exists(SecureDNS.DNSCryptConfigPath) || !File.Exists(SecureDNS.DNSCryptConfigCloudflarePath) || + !File.Exists(SecureDNS.GoodbyeDpi) || !File.Exists(SecureDNS.HttpProxyPath) || !File.Exists(SecureDNS.WinDivert) || + !File.Exists(SecureDNS.WinDivert32) || !File.Exists(SecureDNS.WinDivert64)) + { + if (showMessage) + { + string msg = "ERROR: Some of binary files are missing!" + NL; + CustomRichTextBoxLog.AppendText(msg, Color.IndianRed); + } + return false; + } + else + return true; + } + + private async Task WriteNecessaryFilesToDisk() + { + // Get New Versions + string dnslookupNewVer = SecureDNS.GetBinariesVersionFromResource("dnslookup"); + string dnsproxyNewVer = SecureDNS.GetBinariesVersionFromResource("dnsproxy"); + string dnscryptNewVer = SecureDNS.GetBinariesVersionFromResource("dnscrypt-proxy"); + string sdchttpproxyNewVer = SecureDNS.GetBinariesVersionFromResource("sdchttpproxy"); + string goodbyedpiNewVer = SecureDNS.GetBinariesVersionFromResource("goodbyedpi"); + + // Get Old Versions + string dnslookupOldVer = SecureDNS.GetBinariesVersion("dnslookup"); + string dnsproxyOldVer = SecureDNS.GetBinariesVersion("dnsproxy"); + string dnscryptOldVer = SecureDNS.GetBinariesVersion("dnscrypt-proxy"); + string sdchttpproxyOldVer = SecureDNS.GetBinariesVersion("sdchttpproxy"); + string goodbyedpiOldVer = SecureDNS.GetBinariesVersion("goodbyedpi"); + + // Get Version Result + int dnslookupResult = Info.VersionCompare(dnslookupNewVer, dnslookupOldVer); + int dnsproxyResult = Info.VersionCompare(dnsproxyNewVer, dnsproxyOldVer); + int dnscryptResult = Info.VersionCompare(dnscryptNewVer, dnscryptOldVer); + int sdchttpproxyResult = Info.VersionCompare(sdchttpproxyNewVer, sdchttpproxyOldVer); + int goodbyedpiResult = Info.VersionCompare(goodbyedpiNewVer, goodbyedpiOldVer); + + // Check Missing/Update Binaries + if (!CheckNecessaryFiles(false) || dnslookupResult == 1 || dnsproxyResult == 1 || dnscryptResult == 1 || + sdchttpproxyResult == 1 || goodbyedpiResult == 1) + { + string msg1 = "Creating/Updating binaries. Please Wait..." + NL; + CustomRichTextBoxLog.AppendText(msg1, Color.LightGray); + + await writeBinariesAsync(); + } + + async Task writeBinariesAsync() + { + if (!Directory.Exists(SecureDNS.BinaryDirPath)) + Directory.CreateDirectory(SecureDNS.BinaryDirPath); + + if (!File.Exists(SecureDNS.DnsLookup) || dnslookupResult == 1) + await Resource.WriteResourceToFileAsync(NecessaryFiles.Resource1.dnslookup, SecureDNS.DnsLookup); + + if (!File.Exists(SecureDNS.DnsProxy) || dnsproxyResult == 1) + await Resource.WriteResourceToFileAsync(NecessaryFiles.Resource1.dnsproxy, SecureDNS.DnsProxy); + + if (!File.Exists(SecureDNS.DNSCrypt) || dnscryptResult == 1) + await Resource.WriteResourceToFileAsync(NecessaryFiles.Resource1.dnscrypt_proxyEXE, SecureDNS.DNSCrypt); + + if (!File.Exists(SecureDNS.DNSCryptConfigPath)) + await Resource.WriteResourceToFileAsync(NecessaryFiles.Resource1.dnscrypt_proxyTOML, SecureDNS.DNSCryptConfigPath); + + if (!File.Exists(SecureDNS.DNSCryptConfigCloudflarePath)) + await Resource.WriteResourceToFileAsync(NecessaryFiles.Resource1.dnscrypt_proxy_fakeproxyTOML, SecureDNS.DNSCryptConfigCloudflarePath); + + if (!File.Exists(SecureDNS.HttpProxyPath) || sdchttpproxyResult == 1) + await Resource.WriteResourceToFileAsync(NecessaryFiles.Resource1.SDCHttpProxy, SecureDNS.HttpProxyPath); + + if (!File.Exists(SecureDNS.GoodbyeDpi) || goodbyedpiResult == 1) + await Resource.WriteResourceToFileAsync(NecessaryFiles.Resource1.goodbyedpi, SecureDNS.GoodbyeDpi); + + if (!File.Exists(SecureDNS.WinDivert)) + await Resource.WriteResourceToFileAsync(NecessaryFiles.Resource1.WinDivert, SecureDNS.WinDivert); + + if (!File.Exists(SecureDNS.WinDivert32)) + await Resource.WriteResourceToFileAsync(NecessaryFiles.Resource1.WinDivert32, SecureDNS.WinDivert32); + + if (!File.Exists(SecureDNS.WinDivert64)) + await Resource.WriteResourceToFileAsync(NecessaryFiles.Resource1.WinDivert64, SecureDNS.WinDivert64); + + // Update old version numbers + await File.WriteAllTextAsync(SecureDNS.BinariesVersionPath, NecessaryFiles.Resource1.versions); + + string msg2 = $"{Info.GetAppInfo(Assembly.GetExecutingAssembly()).ProductName} is ready.{NL}"; + CustomRichTextBoxLog.AppendText(msg2, Color.LightGray); + } + } + + public static bool IsDnsProtocolSupported(string dns) + { + dns = dns.Trim(); + StringComparison sc = StringComparison.OrdinalIgnoreCase; + if (dns.StartsWith("tcp://", sc) || dns.StartsWith("udp://", sc) || dns.StartsWith("http://", sc) || dns.StartsWith("https://", sc) || + dns.StartsWith("tls://", sc) || dns.StartsWith("quic://", sc) || dns.StartsWith("h3://", sc) || dns.StartsWith("sdns://", sc)) + return true; + else + return isPlainDnsWithUnusualPort(dns); + + static bool isPlainDnsWithUnusualPort(string dns) // Support for plain DNS with unusual port + { + if (dns.Contains(':')) + { + string[] split = dns.Split(':'); + string ip = split[0]; + string port = split[1]; + if (Network.IsIPv4Valid(ip, out IPAddress _)) + { + bool isPortValid = int.TryParse(port, out int outPort); + if (isPortValid && outPort >= 1 && outPort <= 65535) + return true; + } + } + return false; + } + } + + private async void CheckDPIWorks(string host, int timeoutSec = 30) //Default timeout: 100 sec + { + if (string.IsNullOrWhiteSpace(host)) return; + + // If DNS is Setting or Unsetting Return + if (IsDNSSetting || IsDNSUnsetting) return; + + // If user changing DPI mode fast, return. + if (StopWatchCheckDPIWorks.IsRunning) + return; + + // Start StopWatch + StopWatchCheckDPIWorks.Start(); + + // Write start DPI checking to log + string msgDPI = $"Checking DPI Bypass ({host})...{NL}"; + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI, Color.LightGray)); + + // Update Bools + //UpdateBools(); + //await UpdateBoolHttpProxy(); + + try + { + if (!IsDPIActive) + { + // Write activate DPI first to log + string msgDPI1 = $"DPI Check: "; + string msgDPI2 = $"Activate DPI Bypass to check.{NL}"; + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI1, Color.LightGray)); + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI2, Color.IndianRed)); + StopWatchCheckDPIWorks.Stop(); + StopWatchCheckDPIWorks.Reset(); + + return; + } + + // Is HTTP Proxy Direct DNS Set?! + bool isProxyDnsSet = false; + if (ProcessManager.FindProcessByPID(PIDFakeProxy) && + IsSharing && + ProxyDNSMode != HTTPProxyServer.Program.Dns.Mode.Disable && + ProxyStaticDPIBypassMode != HTTPProxyServer.Program.DPIBypass.Mode.Disable) + isProxyDnsSet = true; + + if (!IsDNSSet && !isProxyDnsSet) + { + // Write set DNS first to log + string msgDPI1 = $"DPI Check: "; + string msgDPI2 = $"Set DNS to check.{NL}"; + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI1, Color.LightGray)); + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI2, Color.IndianRed)); + StopWatchCheckDPIWorks.Stop(); + StopWatchCheckDPIWorks.Reset(); + + return; + } + + string url = $"https://{host}/"; + Uri uri = new(url, UriKind.Absolute); + + bool isProxyPortOpen = Network.IsPortOpen(IPAddress.Loopback.ToString(), ProxyPort, 5); + Debug.WriteLine($"Is Proxy Port Open: {isProxyPortOpen}, Port: {ProxyPort}"); + + if (IsProxyDPIActive && isProxyPortOpen && ProxyProcess != null) + { + Debug.WriteLine("Proxy"); + + UpdateProxyBools = false; + // Kill all requests before check + ProcessManager.SendCommand(ProxyProcess, "killall"); + + string proxyScheme = $"http://{IPAddress.Loopback}:{ProxyPort}"; + + using SocketsHttpHandler socketsHttpHandler = new(); + socketsHttpHandler.Proxy = new WebProxy(proxyScheme, true); + + using HttpClient httpClientWithProxy = new(socketsHttpHandler); + httpClientWithProxy.Timeout = TimeSpan.FromSeconds(timeoutSec); + + StopWatchCheckDPIWorks.Restart(); + + HttpResponseMessage r = await httpClientWithProxy.GetAsync(uri); + + if (r.IsSuccessStatusCode || r.StatusCode.ToString() == "NotFound") + { + msgSuccess(); + r.Dispose(); + } + else + msgFailed(r); + } + else + { + Debug.WriteLine("No Proxy"); + using HttpClient httpClient = new(); + httpClient.Timeout = TimeSpan.FromSeconds(timeoutSec); + + StopWatchCheckDPIWorks.Restart(); + + HttpResponseMessage r = await httpClient.GetAsync(uri); + + if (r.IsSuccessStatusCode || r.StatusCode.ToString() == "NotFound") + { + msgSuccess(); + r.Dispose(); + } + else + msgFailed(r); + } + + void msgSuccess() + { + // Write Success to log + if (IsDPIActive) + { + var elapsedTime = Math.Round((double)StopWatchCheckDPIWorks.ElapsedMilliseconds / 1000); + string msgDPI1 = $"DPI Check: "; + string msgDPI2 = $"Successfully opened {host} in {elapsedTime} seconds.{NL}"; + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI1, Color.LightGray)); + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI2, Color.MediumSeaGreen)); + } + else + { + string msgCancel = $"DPI Check: Canceled.{NL}"; + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgCancel, Color.LightGray)); + } + } + + void msgFailed(HttpResponseMessage r) + { + // Write Status to log + if (IsDPIActive) + { + string msgDPI1 = $"DPI Check: "; + string msgDPI2 = $"Status {r.StatusCode}: {r.ReasonPhrase}.{NL}"; + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI1, Color.LightGray)); + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI2, Color.DodgerBlue)); + } + else + { + string msgCancel = $"DPI Check: Canceled.{NL}"; + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgCancel, Color.LightGray)); + } + + r.Dispose(); + } + + StopWatchCheckDPIWorks.Stop(); + StopWatchCheckDPIWorks.Reset(); + } + catch (Exception ex) + { + // Write Failed to log + if (IsDPIActive) + { + string msgDPI1 = $"DPI Check: "; + string msgDPI2 = $"{ex.Message}{NL}"; + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI1, Color.LightGray)); + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgDPI2, Color.IndianRed)); + } + else + { + string msgCancel = $"DPI Check: Canceled.{NL}"; + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgCancel, Color.LightGray)); + } + + StopWatchCheckDPIWorks.Stop(); + StopWatchCheckDPIWorks.Reset(); + } + + UpdateProxyBools = true; + } + + } +} diff --git a/SecureDNSClient/Forms/SavedDnsServers.cs b/SecureDNSClient/Forms/SavedDnsServers.cs new file mode 100644 index 0000000..e8770ac --- /dev/null +++ b/SecureDNSClient/Forms/SavedDnsServers.cs @@ -0,0 +1,406 @@ +using MsmhTools; +using MsmhTools.DnsTool; +using System; +using System.Net; +using System.Reflection; + +namespace SecureDNSClient +{ + public partial class FormMain + { + private async Task WriteSavedServersDelayToLog() + { + List savedDnsList = SavedDnsList.ToList(); + if (savedDnsList.Any() && !IsCheckingStarted && !IsConnecting && !IsDisconnecting) + { + if (!IsInternetAlive()) return; + + if (savedDnsList.Count > 1) + { + // Get blocked domain + string blockedDomain = GetBlockedDomainSetting(out string blockedDomainNoWww); + if (string.IsNullOrEmpty(blockedDomain)) return; + + // Get Check timeout value + decimal timeoutSec = 1; + this.InvokeIt(() => timeoutSec = CustomNumericUpDownSettingCheckTimeout.Value); + int timeoutMS = decimal.ToInt32(timeoutSec * 1000); + if (timeoutMS < 500) timeoutMS = 1000; + + // Get Bootstrap IP and Port + string bootstrap = GetBootstrapSetting(out int bootstrapPort).ToString(); + + // Add start msg + string msgStart = $"{NL}Contains {savedDnsList.Count} servers:{NL}"; + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgStart, Color.LightGray)); + + // Get insecure state + bool insecure = CustomCheckBoxInsecure.Checked; + int localPortInsecure = 5390; + if (insecure) + { + // Check open ports + bool isPortOk = GetListeningPort(localPortInsecure, "You need to resolve the conflict.", Color.IndianRed); + if (!isPortOk) return; + + int nt = 1; + + for (int n = 0; n < savedDnsList.Count; n++) + { + if (IsCheckingStarted || IsConnecting || IsDisconnecting) break; + await getDelay(n, nt++); + } + } + else + { + await Task.Run(async () => + { + var lists = savedDnsList.SplitToLists(3); + int nt = 1; + + for (int n = 0; n < lists.Count; n++) + { + if (IsCheckingStarted || IsConnecting || IsDisconnecting) break; + + List list = lists[n]; + var parallelLoopResult = Parallel.For(0, list.Count, async i => + { + await getDelay(i, nt++); + }); + + await Task.Run(async () => + { + while (!parallelLoopResult.IsCompleted) + { + if (parallelLoopResult.IsCompleted) + return Task.CompletedTask; + await Task.Delay(500); + } + return Task.CompletedTask; + }); + } + }); + } + + async Task getDelay(int n, int nt) + { + string dns = savedDnsList[n]; + + // Get Status and Latency + CheckDns checkDns = new(false, GetCPUPriority()); + if (insecure) + checkDns.CheckDNS(true, blockedDomainNoWww, dns, timeoutMS, localPortInsecure, bootstrap, bootstrapPort); + else + checkDns.CheckDNS(blockedDomainNoWww, dns, timeoutMS); + + string msg = $"DNS {nt}: {checkDns.DnsLatency} ms.{NL}"; + Color color = (checkDns.DnsLatency == -1) ? Color.IndianRed : Color.MediumSeaGreen; + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msg, color)); + await Task.Delay(10); + } + } + else + { + string msg = $"There is only one saved server.{NL}"; + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msg, Color.MediumSeaGreen)); + } + } + else + { + string msg = $"There is no saved server.{NL}"; + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msg, Color.MediumSeaGreen)); + } + } + + private async void SavedDnsLoad() + { + await Task.Run(async () => + { + FileDirectory.CreateEmptyFile(SecureDNS.SavedEncodedDnsPath); + + List savedEncodedDnsList = new(); + savedEncodedDnsList.LoadFromFile(SecureDNS.SavedEncodedDnsPath, true, true); + savedEncodedDnsList.RemoveDuplicates(); + + if (savedEncodedDnsList.Any()) + { + // Built-in or Custom + bool builtInMode = CustomRadioButtonBuiltIn.Checked; + + string? fileContent = string.Empty; + if (builtInMode) + fileContent = await Resource.GetResourceTextFileAsync("SecureDNSClient.DNS-Servers.txt", Assembly.GetExecutingAssembly()); + else + { + FileDirectory.CreateEmptyFile(SecureDNS.CustomServersPath); + fileContent = await File.ReadAllTextAsync(SecureDNS.CustomServersPath); + } + + if (!string.IsNullOrEmpty(fileContent) && !string.IsNullOrWhiteSpace(fileContent)) + { + List dnsList = fileContent.SplitToLines(); + + for (int n = 0; n < savedEncodedDnsList.Count; n++) + { + string encodedDns = savedEncodedDnsList[n]; + for (int i = 0; i < dnsList.Count; i++) + { + string dns = dnsList[i]; + if (EncodingTool.GetSHA512(dns).Equals(encodedDns)) + { + SavedDnsList.Add(dns); + WorkingDnsList.Add(new Tuple(100, dns)); + break; + } + } + } + + WorkingDnsList.RemoveDuplicates(); // not important + SavedDnsList.RemoveDuplicates(); + } + } + + SavedDnsUpdateAuto(); + }); + } + + private async void SavedDnsUpdateAuto() + { + await Task.Delay(2000); + await SavedDnsUpdate(); + System.Timers.Timer savedDnsUpdateTimer = new(); + savedDnsUpdateTimer.Interval = TimeSpan.FromMinutes(60).TotalMilliseconds; + savedDnsUpdateTimer.Elapsed += async (s, e) => + { + await SavedDnsUpdate(); + }; + savedDnsUpdateTimer.Start(); + } + + private async Task SavedDnsUpdate() + { + // Update Working Servers? + bool updateWorkingServers = true; + + // Get blocked domain + string blockedDomain = GetBlockedDomainSetting(out string blockedDomainNoWww); + if (string.IsNullOrEmpty(blockedDomain)) return; + + // Get Check timeout value + decimal timeoutSec = 1; + this.InvokeIt(() => timeoutSec = CustomNumericUpDownSettingCheckTimeout.Value); + int timeoutMS = decimal.ToInt32(timeoutSec * 1000); + + // Get Bootstrap IP and Port + string bootstrap = GetBootstrapSetting(out int bootstrapPort).ToString(); + + // Get insecure state + bool insecure = CustomCheckBoxInsecure.Checked; + int localPortInsecure = 5390; + + // Get number of max servers + int maxServers = decimal.ToInt32(CustomNumericUpDownSettingMaxServers.Value); + + // New Check + CheckDns checkDns = new(false, GetCPUPriority()); + + List newSavedDnsList = new(); + List newSavedEncodedDnsList = new(); + List> newWorkingDnsList = new(); + + // Check saved dns servers can work + if (SavedDnsList.Any()) + { + if (!IsInternetAlive(false)) return; + List savedDnsList = SavedDnsList.ToList(); + + if (insecure) + { + int origPort = localPortInsecure; + bool isPortOpen1 = Network.IsPortOpen(IPAddress.Loopback.ToString(), localPortInsecure, 3); + if (isPortOpen1) + { + localPortInsecure = Network.GetNextPort(localPortInsecure); + bool isPortOpen2 = Network.IsPortOpen(IPAddress.Loopback.ToString(), localPortInsecure, 3); + if (isPortOpen2) + { + localPortInsecure = Network.GetNextPort(localPortInsecure); + bool isPortOpen3 = Network.IsPortOpen(IPAddress.Loopback.ToString(), localPortInsecure, 3); + if (isPortOpen3) + { + localPortInsecure = Network.GetNextPort(localPortInsecure); + bool isPortOpen4 = Network.IsPortOpen(IPAddress.Loopback.ToString(), localPortInsecure, 3); + if (isPortOpen4) + { + string existingProcessName = ProcessManager.GetProcessNameByListeningPort(origPort); + existingProcessName = existingProcessName == string.Empty ? "Unknown" : existingProcessName; + string msg = $"Cannot auto update Saved DNS List, port {origPort} is occupied by \"{existingProcessName}\".{NL}"; + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msg, Color.IndianRed)); + return; + } + } + } + } + + for (int n = 0; n < savedDnsList.Count; n++) + { + if (!IsInternetAlive(false)) break; + if (IsCheckingStarted) break; + + string dns = savedDnsList[n]; + checkDns.CheckDNS(true, blockedDomainNoWww, dns, timeoutMS, localPortInsecure, bootstrap, bootstrapPort); + if (checkDns.DnsLatency != -1) + { + newSavedDnsList.Add(dns); + newSavedEncodedDnsList.Add(EncodingTool.GetSHA512(dns)); + + if (updateWorkingServers) + newWorkingDnsList.Add(new Tuple(checkDns.DnsLatency, dns)); + } + } + } + else + { + // If Secure + await Task.Run(async () => + { + var lists = savedDnsList.SplitToLists(3); + + for (int n = 0; n < lists.Count; n++) + { + if (!IsInternetAlive(false)) break; + if (IsCheckingStarted) break; + + List list = lists[n]; + var parallelLoopResult = Parallel.For(0, list.Count, i => + { + string dns = list[i]; + checkDns.CheckDNS(blockedDomainNoWww, dns, timeoutMS); + if (checkDns.DnsLatency != -1) + { + newSavedDnsList.Add(dns); + newSavedEncodedDnsList.Add(EncodingTool.GetSHA512(dns)); + if (updateWorkingServers) + newWorkingDnsList.Add(new Tuple(checkDns.DnsLatency, dns)); + } + }); + + await Task.Run(async () => + { + while (true) + { + await Task.Delay(500); + if (parallelLoopResult.IsCompleted) + break; + } + }); + } + }); + } + } + + if (newSavedDnsList.Any()) + { + SavedDnsList.Clear(); + SavedDnsList = new(newSavedDnsList); + + SavedEncodedDnsList.Clear(); + SavedEncodedDnsList = new(newSavedEncodedDnsList); + SavedEncodedDnsList.SaveToFile(SecureDNS.SavedEncodedDnsPath); + + if (updateWorkingServers && !IsCheckingStarted) + { + // Add + WorkingDnsList = new(WorkingDnsList.Concat(newWorkingDnsList)); + + // Remove Duplicates + WorkingDnsList = new(WorkingDnsList.DistinctBy(x => x.Item2)); + } + } + + if (newSavedDnsList.Count >= maxServers) + return; + + // There is not enough working server lets find some + // Built-in or Custom + bool builtInMode = CustomRadioButtonBuiltIn.Checked; + + string? fileContent = string.Empty; + if (builtInMode) + fileContent = await Resource.GetResourceTextFileAsync("SecureDNSClient.DNS-Servers.txt", Assembly.GetExecutingAssembly()); + else + { + FileDirectory.CreateEmptyFile(SecureDNS.CustomServersPath); + fileContent = await File.ReadAllTextAsync(SecureDNS.CustomServersPath); + } + + if (string.IsNullOrEmpty(fileContent) || string.IsNullOrWhiteSpace(fileContent)) return; + + List dnsList = fileContent.SplitToLines(); + + int currentServers = newSavedDnsList.Count; + for (int n = 0; n < dnsList.Count; n++) + { + if (!IsInternetAlive(false)) break; + if (IsCheckingStarted) break; + + string dns = dnsList[n].Trim(); + if (!string.IsNullOrEmpty(dns) && !string.IsNullOrWhiteSpace(dns)) + { + if (IsDnsProtocolSupported(dns)) + { + // Get DNS Details + DnsReader dnsReader = new(dns, null); + + // Apply Protocol Selection + bool matchRules = CheckDnsMatchRules(dnsReader); + if (!matchRules) continue; + + // Get Status and Latency + if (insecure) + checkDns.CheckDNS(true, blockedDomainNoWww, dns, timeoutMS, localPortInsecure, bootstrap, bootstrapPort); + else + checkDns.CheckDNS(blockedDomainNoWww, dns, timeoutMS); + + if (checkDns.IsDnsOnline) + { + if (!newSavedDnsList.Contains(dns)) + { + newSavedDnsList.Add(dns); + newSavedEncodedDnsList.Add(EncodingTool.GetSHA512(dns)); + + if (updateWorkingServers) + newWorkingDnsList.Add(new Tuple(checkDns.DnsLatency, dns)); + + currentServers++; + if (currentServers >= maxServers) break; + } + } + } + } + } + + if (newSavedDnsList.Any()) + { + SavedDnsList.Clear(); + SavedDnsList = newSavedDnsList.ToList(); + + SavedEncodedDnsList.Clear(); + SavedEncodedDnsList = newSavedEncodedDnsList.ToList(); + SavedEncodedDnsList.SaveToFile(SecureDNS.SavedEncodedDnsPath); + + if (updateWorkingServers && !IsCheckingStarted) + { + // Add + WorkingDnsList = WorkingDnsList.Concat(newWorkingDnsList).ToList(); + + // Remove Duplicates + WorkingDnsList = WorkingDnsList.DistinctBy(x => x.Item2).ToList(); + } + + return; + } + } + + } +} diff --git a/SecureDNSClient/Forms/SetDNS.cs b/SecureDNSClient/Forms/SetDNS.cs index 66a485e..1503cfe 100644 --- a/SecureDNSClient/Forms/SetDNS.cs +++ b/SecureDNSClient/Forms/SetDNS.cs @@ -1,12 +1,8 @@ using CustomControls; using MsmhTools; using System; -using System.Collections.Generic; -using System.Linq; using System.Net; using System.Net.NetworkInformation; -using System.Text; -using System.Threading.Tasks; namespace SecureDNSClient { @@ -140,7 +136,7 @@ private async void SetDNS() // Unset to DHCP await Task.Run(() => Network.UnsetDNS(nic)); Task.Delay(200).Wait(); - UnsetSavedDnsDHCP(); + await UnsetSavedDnsDHCP(); } else { @@ -149,7 +145,7 @@ private async void SetDNS() string dns2 = CustomTextBoxSettingUnsetDns2.Text; await Task.Run(() => Network.UnsetDNS(nic, dns1, dns2)); Task.Delay(200).Wait(); - UnsetSavedDnsStatic(dns1, dns2); + await UnsetSavedDnsStatic(dns1, dns2); } IsDNSUnsetting = false; @@ -173,5 +169,64 @@ private async void SetDNS() CustomRichTextBoxLog.AppendText(msg4 + NL, Color.DodgerBlue); } } + + private async Task UnsetSavedDNS() + { + bool unsetToDHCP = CustomRadioButtonSettingUnsetDnsToDhcp.Checked; + if (unsetToDHCP) + { + // Unset to DHCP + await UnsetSavedDnsDHCP(); + } + else + { + // Unset to Static + string dns1 = CustomTextBoxSettingUnsetDns1.Text; + string dns2 = CustomTextBoxSettingUnsetDns2.Text; + await UnsetSavedDnsStatic(dns1, dns2); + } + } + + // Unset to DHCP + private async Task UnsetSavedDnsDHCP() + { + if (File.Exists(SecureDNS.NicNamePath)) + { + string nicName = File.ReadAllText(SecureDNS.NicNamePath).Replace(NL, string.Empty); + if (nicName.Length > 0) + { + NetworkInterface? nic = Network.GetNICByName(nicName); + if (nic != null) + { + await Task.Run(() => Network.UnsetDNS(nic)); + IsDNSSet = false; + } + } + } + } + + // Unset to Static + private async Task UnsetSavedDnsStatic(string dns1, string dns2) + { + if (File.Exists(SecureDNS.NicNamePath)) + { + string nicName = File.ReadAllText(SecureDNS.NicNamePath).Replace(NL, string.Empty); + if (nicName.Length > 0) + { + NetworkInterface? nic = Network.GetNICByName(nicName); + if (nic != null) + { + dns1 = dns1.Trim(); + dns2 = dns2.Trim(); + if (Network.IsIPv4Valid(dns1, out IPAddress _) && Network.IsIPv4Valid(dns2, out IPAddress _)) + { + await Task.Run(() => Network.UnsetDNS(nic, dns1, dns2)); + IsDNSSet = false; + } + } + } + } + } + } } diff --git a/SecureDNSClient/Forms/SetProxy.cs b/SecureDNSClient/Forms/SetProxy.cs index ed44193..feccd35 100644 --- a/SecureDNSClient/Forms/SetProxy.cs +++ b/SecureDNSClient/Forms/SetProxy.cs @@ -1,10 +1,6 @@ using MsmhTools; using System; -using System.Collections.Generic; -using System.Linq; using System.Net; -using System.Text; -using System.Threading.Tasks; namespace SecureDNSClient { diff --git a/SecureDNSClient/Forms/Share.cs b/SecureDNSClient/Forms/Share.cs index 8ce8e40..d5ab0bf 100644 --- a/SecureDNSClient/Forms/Share.cs +++ b/SecureDNSClient/Forms/Share.cs @@ -4,7 +4,6 @@ using System.Diagnostics; using System.Net; using System.Text; -using System.Threading.Tasks; namespace SecureDNSClient { @@ -16,6 +15,56 @@ public partial class FormMain /// HTTP Proxy /// Returns True if everything's ok. public bool ApplyFakeProxy(HTTPProxyServer proxy) + { + bool isOk = ApplyFakeProxyOut(out HTTPProxyServer.Program.BlackWhiteList? wListProgram, out HTTPProxyServer.Program.FakeDns? fakeDNSProgram); + if (!isOk) return false; + if (wListProgram == null) return false; + if (fakeDNSProgram == null) return false; + + // Add Programs to Proxy + proxy.BlockPort80 = true; + proxy.RequestTimeoutSec = 0; // 0 = Disable + proxy.EnableBlackWhiteList(wListProgram); + proxy.EnableFakeDNS(fakeDNSProgram); + + return true; + } + + /// + /// Apply Fake Proxy (Fake DNS and White List) + /// + /// Process + /// Returns True if everything's ok. + public async Task ApplyFakeProxy(Process fakeProcess) + { + bool isOk = ApplyFakeProxyOut(out HTTPProxyServer.Program.BlackWhiteList? wListProgram, out HTTPProxyServer.Program.FakeDns? fakeDNSProgram); + if (!isOk) return false; + if (wListProgram == null) return false; + if (fakeDNSProgram == null) return false; + + // Add Programs to Proxy + // Get and set block port 80 setting + string blockPort80Command = $"blockport80 -true"; + Debug.WriteLine(blockPort80Command); + await ProcessManager.SendCommandAsync(fakeProcess, blockPort80Command); + + // Kill Request on Timeout (Sec) + string killOnRequestTimeoutCommand = $"requesttimeout -0"; + Debug.WriteLine(killOnRequestTimeoutCommand); + await ProcessManager.SendCommandAsync(fakeProcess, killOnRequestTimeoutCommand); + + string wlCommand = $"bwlistprogram -{wListProgram.ListMode} -{ConvertNewLineToN(wListProgram.TextContent)}"; + Debug.WriteLine(wlCommand); + await ProcessManager.SendCommandAsync(fakeProcess, wlCommand); + + string fdCommand = $"fakednsprogram -{fakeDNSProgram.FakeDnsMode} -{ConvertNewLineToN(fakeDNSProgram.TextContent)}"; + Debug.WriteLine(fdCommand); + await ProcessManager.SendCommandAsync(fakeProcess, fdCommand); + + return true; + } + + public bool ApplyFakeProxyOut(out HTTPProxyServer.Program.BlackWhiteList? blackWhiteList, out HTTPProxyServer.Program.FakeDns? fakeDns) { // Get DoH Clean Ip string dohCleanIP = CustomTextBoxSettingFakeProxyDohCleanIP.Text; @@ -24,6 +73,8 @@ public bool ApplyFakeProxy(HTTPProxyServer proxy) { string msg = $"Fake Proxy clean IP is not valid, check Settings.{NL}"; this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msg, Color.IndianRed)); + blackWhiteList = null; + fakeDns = null; return false; } @@ -35,6 +86,8 @@ public bool ApplyFakeProxy(HTTPProxyServer proxy) // CF Clean IP is not valid string msg = $"Fake Proxy clean IP is not clean.{NL}"; this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msg, Color.IndianRed)); + blackWhiteList = null; + fakeDns = null; return false; } @@ -46,15 +99,15 @@ public bool ApplyFakeProxy(HTTPProxyServer proxy) string host3 = "every1dns.com"; // Set White List and Fake DNS Content (Rules) - string wlContent = $"{host}"; + string wlContent = $"{host}\n{dohCleanIP}"; string fdContent = $"{host}|{dohCleanIP}"; if (host.Equals(host1) || host.Equals(host2) || host.Equals(host3)) { - wlContent = $"{host1}\n{host2}\n{host3}"; + wlContent = $"{host1}\n{host2}\n{host3}\n{dohCleanIP}"; fdContent = $"{host1}|{dohCleanIP}\n{host2}|{dohCleanIP}\n{host3}|{dohCleanIP}"; } - + // White List Program HTTPProxyServer.Program.BlackWhiteList wListProgram = new(); wListProgram.Set(HTTPProxyServer.Program.BlackWhiteList.Mode.WhiteListText, wlContent); @@ -63,11 +116,8 @@ public bool ApplyFakeProxy(HTTPProxyServer proxy) HTTPProxyServer.Program.FakeDns fakeDNSProgram = new(); fakeDNSProgram.Set(HTTPProxyServer.Program.FakeDns.Mode.Text, fdContent); - // Add Programs to Proxy - proxy.BlockPort80 = true; - proxy.EnableBlackWhiteList(wListProgram); - proxy.EnableFakeDNS(fakeDNSProgram); - + blackWhiteList = wListProgram; + fakeDns = fakeDNSProgram; return true; } @@ -92,13 +142,13 @@ private async void Share() // return; //} - // Delete request log on > 100KB + // Delete request log on > 50KB try { if (File.Exists(SecureDNS.HTTPProxyServerRequestLogPath)) { long lenth = new FileInfo(SecureDNS.HTTPProxyServerRequestLogPath).Length; - if (FileDirectory.ConvertSize(lenth, FileDirectory.SizeUnits.Byte, FileDirectory.SizeUnits.KB) > 100) + if (FileDirectory.ConvertSize(lenth, FileDirectory.SizeUnits.Byte, FileDirectory.SizeUnits.KB) > 50) File.Delete(SecureDNS.HTTPProxyServerRequestLogPath); } } @@ -132,7 +182,6 @@ private async void Share() break; await Task.Delay(100); } - return Task.CompletedTask; }); await wait1.WaitAsync(TimeSpan.FromSeconds(5)); @@ -199,7 +248,7 @@ void ProxyProcess_ErrorDataReceived(object sender, DataReceivedEventArgs e) if (!string.IsNullOrEmpty(msg)) { // Write to log - if (!IsCheckingStarted && !IsConnecting && IsProxyActivated && IsSharing) + if (!IsCheckingStarted && !IsConnecting && !IsExiting && IsProxyActivated && IsSharing) this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msg + NL, Color.Gray)); // Write to file @@ -230,8 +279,7 @@ void ProxyProcess_ErrorDataReceived(object sender, DataReceivedEventArgs e) bool isDnsOk = await ApplyPDNS(ProxyProcess); if (!isDnsOk) { - if (FakeProxy.IsRunning) - FakeProxy.Stop(); + ProcessManager.KillProcessByPID(PIDFakeProxy); ProcessManager.KillProcessByPID(PIDHttpProxy); IsProxyActivating = false; return; @@ -241,8 +289,7 @@ void ProxyProcess_ErrorDataReceived(object sender, DataReceivedEventArgs e) bool isFakeDnsOk = await ApplyPFakeDNS(ProxyProcess); if (!isFakeDnsOk) { - if (FakeProxy.IsRunning) - FakeProxy.Stop(); + ProcessManager.KillProcessByPID(PIDFakeProxy); ProcessManager.KillProcessByPID(PIDHttpProxy); IsProxyActivating = false; return; @@ -252,8 +299,7 @@ void ProxyProcess_ErrorDataReceived(object sender, DataReceivedEventArgs e) bool isBlackWhiteListOk = await ApplyPBlackWhiteList(ProxyProcess); if (!isBlackWhiteListOk) { - if (FakeProxy.IsRunning) - FakeProxy.Stop(); + ProcessManager.KillProcessByPID(PIDFakeProxy); ProcessManager.KillProcessByPID(PIDHttpProxy); IsProxyActivating = false; return; @@ -263,8 +309,7 @@ void ProxyProcess_ErrorDataReceived(object sender, DataReceivedEventArgs e) bool isDontBypassOk = await ApplyPDontBypass(ProxyProcess); if (!isDontBypassOk) { - if (FakeProxy.IsRunning) - FakeProxy.Stop(); + ProcessManager.KillProcessByPID(PIDFakeProxy); ProcessManager.KillProcessByPID(PIDHttpProxy); IsProxyActivating = false; return; @@ -285,12 +330,30 @@ void ProxyProcess_ErrorDataReceived(object sender, DataReceivedEventArgs e) Debug.WriteLine(killOnCpuUsageCommand); await ProcessManager.SendCommandAsync(ProxyProcess, killOnCpuUsageCommand); + // Kill Request on Timeout (Sec) + int reqTimeoutSec = Convert.ToInt32(CustomNumericUpDownSettingHTTPProxyKillRequestTimeout.Value); + string killOnRequestTimeoutCommand = $"requesttimeout -{reqTimeoutSec}"; + Debug.WriteLine(killOnRequestTimeoutCommand); + await ProcessManager.SendCommandAsync(ProxyProcess, killOnRequestTimeoutCommand); + // Start Http Proxy string startCommand = $"start -any -{httpProxyPort} -{handleReq}"; Debug.WriteLine(startCommand); await ProcessManager.SendCommandAsync(ProxyProcess, startCommand); await Task.Delay(500); + // Check for successfull comunication with console + ProxyProcess.StandardOutput.DiscardBufferedData(); + string outMsg = await ProcessManager.SendCommandAndGetAnswerAsync(ProxyProcess, "out", false); + if (string.IsNullOrEmpty(outMsg) && !outMsg.StartsWith("Details")) + { + ProcessManager.KillProcessByPID(PIDFakeProxy); + ProcessManager.KillProcessByPID(PIDHttpProxy); + FaildSendCommandMessage(); + IsProxyActivating = false; + return; + } + // Write Sharing Address to log LocalIP = Network.GetLocalIPv4(); // Update Local IP IPAddress localIP = LocalIP ?? IPAddress.Loopback; @@ -314,8 +377,7 @@ void ProxyProcess_ErrorDataReceived(object sender, DataReceivedEventArgs e) if (IsProxyActivating || IsProxyDeactivating) return; IsProxyDeactivating = true; // Stop Fake Proxy - if (FakeProxy != null && FakeProxy.IsRunning) - FakeProxy.Stop(); + ProcessManager.KillProcessByPID(PIDFakeProxy); // Stop HTTP Proxy if (ProcessManager.FindProcessByPID(PIDHttpProxy)) @@ -326,7 +388,18 @@ void ProxyProcess_ErrorDataReceived(object sender, DataReceivedEventArgs e) if (IsProxySet) Network.UnsetProxy(false, true); ProcessManager.KillProcessByPID(PIDHttpProxy); - await Task.Delay(500); + + // Wait for HTTP Proxy to Exit + Task wait1 = Task.Run(async () => + { + while (ProcessManager.FindProcessByPID(PIDHttpProxy)) + { + if (!ProcessManager.FindProcessByPID(PIDHttpProxy)) + break; + await Task.Delay(100); + } + }); + await wait1.WaitAsync(TimeSpan.FromSeconds(5)); if (!ProcessManager.FindProcessByPID(PIDHttpProxy)) { @@ -363,6 +436,64 @@ public string ConvertNewLineToN(string text) return text.Replace(NL, "\n").Replace("\r\n", "\n").Replace("\r", "\n").Replace("\n", @"\n").Replace(@"\n\n", @"\n"); } + private void ApplyPDpiChanges(Process process) + { + // If DNS is Setting or Unsetting Return + if (IsDNSSetting || IsDNSUnsetting) return; + + ApplyPDpiChangesOut(out HTTPProxyServer.Program.DPIBypass.Mode bypassMode, out int beforSniChunks, out HTTPProxyServer.Program.DPIBypass.ChunkMode chunkMode, out int sniChunks, out int antiPatternOffset, out int fragmentDelay); + + UpdateProxyBools = false; + string command = $"staticdpibypassprogram -{bypassMode} -{beforSniChunks} -{chunkMode} -{sniChunks} -{antiPatternOffset} -{fragmentDelay}"; + Debug.WriteLine(command); + ProcessManager.SendCommand(process, command); + UpdateProxyBools = true; + + // Check DPI Works + if (CustomCheckBoxPDpiEnableDpiBypass.Checked && IsProxyActivated) + { + if (bypassMode != HTTPProxyServer.Program.DPIBypass.Mode.Disable) + { + IsProxyDPIActive = true; + IsDPIActive = true; + } + + // Get blocked domain + string blockedDomain = GetBlockedDomainSetting(out string _); + if (!string.IsNullOrEmpty(blockedDomain)) + Task.Run(() => CheckDPIWorks(blockedDomain)); + } + } + + private void ApplyPDpiChangesFakeProxy(Process process) + { + ApplyPDpiChangesOut(out HTTPProxyServer.Program.DPIBypass.Mode bypassMode, out int beforSniChunks, out HTTPProxyServer.Program.DPIBypass.ChunkMode chunkMode, out int sniChunks, out int antiPatternOffset, out int fragmentDelay); + + string command = $"staticdpibypassprogram -{bypassMode} -{beforSniChunks} -{chunkMode} -{sniChunks} -{antiPatternOffset} -{fragmentDelay}"; + Debug.WriteLine(command); + ProcessManager.SendCommand(process, command); + } + + private void ApplyPDpiChangesOut(out HTTPProxyServer.Program.DPIBypass.Mode bypassMode, out int beforSniChunks, out HTTPProxyServer.Program.DPIBypass.ChunkMode chunkMode, out int sniChunks, out int antiPatternOffset, out int fragmentDelay) + { + // Get fragment settings + bool enableDpiBypass = CustomCheckBoxPDpiEnableDpiBypass.Checked; + beforSniChunks = Convert.ToInt32(CustomNumericUpDownPDpiBeforeSniChunks.Value); + int chunkModeInt = CustomComboBoxPDpiSniChunkMode.SelectedIndex; + chunkMode = chunkModeInt switch + { + 0 => HTTPProxyServer.Program.DPIBypass.ChunkMode.SNI, + 1 => HTTPProxyServer.Program.DPIBypass.ChunkMode.SniExtension, + 2 => HTTPProxyServer.Program.DPIBypass.ChunkMode.AllExtensions, + _ => HTTPProxyServer.Program.DPIBypass.ChunkMode.AllExtensions, + }; + sniChunks = Convert.ToInt32(CustomNumericUpDownPDpiSniChunks.Value); + antiPatternOffset = Convert.ToInt32(CustomNumericUpDownPDpiAntiPatternOffset.Value); + fragmentDelay = Convert.ToInt32(CustomNumericUpDownPDpiFragDelay.Value); + + bypassMode = enableDpiBypass ? HTTPProxyServer.Program.DPIBypass.Mode.Program : HTTPProxyServer.Program.DPIBypass.Mode.Disable; + } + public async Task ApplyPUpStreamProxy(Process process) { if (!CustomCheckBoxSettingHTTPProxyUpstream.Checked) return true; @@ -451,25 +582,17 @@ public async Task ApplyPDNS(Process process) // Get loopback string loopback = IPAddress.Loopback.ToString(); - int getNextPort(int currentPort) - { - currentPort = currentPort < 65535 ? currentPort + 1 : currentPort - 1; - if (currentPort == GetHTTPProxyPortSetting()) - currentPort = currentPort < 65535 ? currentPort + 1 : currentPort - 1; - return currentPort; - } - // Check port int fakeProxyPort = GetFakeProxyPortSetting(); bool isPortOk = GetListeningPort(fakeProxyPort, string.Empty, Color.Orange); if (!isPortOk) { - fakeProxyPort = getNextPort(fakeProxyPort); + fakeProxyPort = Network.GetNextPort(fakeProxyPort); this.InvokeIt(() => CustomRichTextBoxLog.AppendText($"Trying Port {fakeProxyPort}...{NL}", Color.MediumSeaGreen)); bool isPort2Ok = GetListeningPort(fakeProxyPort, string.Empty, Color.Orange); if (!isPort2Ok) { - fakeProxyPort = getNextPort(fakeProxyPort); + fakeProxyPort = Network.GetNextPort(fakeProxyPort); this.InvokeIt(() => CustomRichTextBoxLog.AppendText($"Trying Port {fakeProxyPort}...{NL}", Color.MediumSeaGreen)); bool isPort3Ok = GetListeningPort(fakeProxyPort, "Change Fake Proxy port from settings.", Color.IndianRed); if (!isPort3Ok) @@ -483,18 +606,41 @@ int getNextPort(int currentPort) string fakeProxyScheme = $"http://{loopback}:{fakeProxyPort}"; //============================== Start FakeProxy - if (FakeProxy.IsRunning) - FakeProxy.Stop(); + // Kill if it's already running + ProcessManager.KillProcessByPID(PIDFakeProxy); + + // Execute Fake Proxy + PIDFakeProxy = ProcessManager.ExecuteOnly(out Process fakeProcess, SecureDNS.HttpProxyPath, null, true, true, SecureDNS.CurrentPath, GetCPUPriority()); + FakeProxyProcess = fakeProcess; + + // Wait for Fake Proxy + Task fakeWait = Task.Run(async () => + { + while (!ProcessManager.FindProcessByPID(PIDFakeProxy)) + { + if (ProcessManager.FindProcessByPID(PIDFakeProxy)) + break; + await Task.Delay(100); + } + }); + await fakeWait.WaitAsync(TimeSpan.FromSeconds(5)); + + if (!ProcessManager.FindProcessByPID(PIDFakeProxy)) return false; - FakeProxy = new(); - bool isFpOk = ApplyFakeProxy(FakeProxy); + // Apply Fake DNS and White List Support to Fake Proxy + bool isFpOk = await ApplyFakeProxy(FakeProxyProcess); if (!isFpOk) return false; // Apply DPI Bypass Support to Fake Proxy - ApplyPDpiChanges(FakeProxy); + ApplyPDpiChangesFakeProxy(FakeProxyProcess); - FakeProxy.Start(IPAddress.Loopback, fakeProxyPort, 20000); - Task.Delay(500).Wait(); + // Start Fake Proxy + string startCommand = $"start -loopback -{fakeProxyPort} -50"; + Debug.WriteLine(startCommand); + await ProcessManager.SendCommandAsync(FakeProxyProcess, startCommand); + + await Task.Delay(500); + FakeProxyProcess.StandardOutput.DiscardBufferedData(); //============================== End FakeProxy bool isSetCfOk = await setCloudflareIPs(); @@ -601,6 +747,33 @@ public async Task ApplyPDontBypass(Process process) return true; } + private void WriteProxyRequestsAndChunkDetailsToLogAuto() + { + // Another way of reading Error output (I'm using Event instead) + System.Timers.Timer timer = new(); + timer.Interval = 50; + timer.Elapsed += Timer_Elapsed; + + void Timer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e) + { + if (!IsCheckingStarted && !IsConnecting && IsProxyActivated && IsSharing) + { + if (ProxyProcess != null) + { + string? msg = ProxyProcess.StandardError.ReadLine(); + if (!string.IsNullOrEmpty(msg)) + { + // Write to log + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msg + NL, Color.Gray)); + } + ProxyProcess.StandardError.DiscardBufferedData(); + } + } + } + + timer.Start(); + } + } } diff --git a/SecureDNSClient/Forms/TryToBypassFPUsingGoodbyeDPI.cs b/SecureDNSClient/Forms/TryToBypassFPUsingGoodbyeDPI.cs index 486260a..762d3e6 100644 --- a/SecureDNSClient/Forms/TryToBypassFPUsingGoodbyeDPI.cs +++ b/SecureDNSClient/Forms/TryToBypassFPUsingGoodbyeDPI.cs @@ -25,11 +25,23 @@ public async Task TryToBypassFakeProxyDohUsingGoodbyeDPIAsync(string clean if (IsDisconnecting) return false; // Start Camouflage DNS Server - CamouflageDNSServer = new(camouflageDnsPort, cleanIP); + CamouflageDNSServer = new(camouflageDnsPort, dohUrl, cleanIP); CamouflageDNSServer.Start(); Task.Delay(500).Wait(); IsBypassDNSActive = CamouflageDNSServer.IsRunning; + // Wait for CamouflageDNSServer + Task wait1 = Task.Run(async () => + { + while (!IsBypassDNSActive) + { + if (IsBypassDNSActive) + break; + await Task.Delay(100); + } + }); + await wait1.WaitAsync(TimeSpan.FromSeconds(5)); + if (IsBypassDNSActive) { if (IsDisconnecting) return false; @@ -39,9 +51,20 @@ public async Task TryToBypassFakeProxyDohUsingGoodbyeDPIAsync(string clean this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgCfServer1, Color.Orange)); this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgCfServer2, Color.DodgerBlue)); + // Check if Camouflage DNS Server works + CheckDns checkDns = new(false, GetCPUPriority()); + checkDns.CheckDNS("google.com", $"{IPAddress.Loopback}:{camouflageDnsPort}", 5000); + + if (!checkDns.IsDnsOnline) + { + // Restart if not responsive + CamouflageDNSServer.Stop(); + CamouflageDNSServer.Start(); + } + // Attempt 1 // Write attempt 1 message to log - string msgAttempt1 = $"Attempt 1, please wait...{NL}"; + string msgAttempt1 = $"Attempt 1 (Light), please wait...{NL}"; this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgAttempt1, Color.Orange)); // Get loopback @@ -83,7 +106,8 @@ public async Task TryToBypassFakeProxyDohUsingGoodbyeDPIAsync(string clean // Execute DNSProxy PIDDNSProxyBypass = ProcessManager.ExecuteOnly(out Process _, SecureDNS.DnsProxy, dnsproxyArgs, true, true, SecureDNS.CurrentPath, GetCPUPriority()); - Task wait1 = Task.Run(async () => + // Wait for DNSProxyBypass + Task wait2 = Task.Run(async () => { while (!ProcessManager.FindProcessByPID(PIDDNSProxyBypass)) { @@ -91,19 +115,18 @@ public async Task TryToBypassFakeProxyDohUsingGoodbyeDPIAsync(string clean break; await Task.Delay(100); } - return Task.CompletedTask; }); - await wait1.WaitAsync(TimeSpan.FromSeconds(5)); + await wait2.WaitAsync(TimeSpan.FromSeconds(5)); // Create blacklist file for GoodbyeDPI - File.WriteAllText(SecureDNS.DPIBlacklistCFPath, dohHost); + File.WriteAllText(SecureDNS.DPIBlacklistFPPath, dohHost); if (ProcessManager.FindProcessByPID(PIDDNSProxyBypass)) { IsConnected = true; // Start attempt 1 - bool success1 = bypassCF(DPIBasicBypassMode.Light); + bool success1 = await bypassCFAsync(DPIBasicBypassMode.Light); if (success1) { // Success message @@ -117,19 +140,25 @@ public async Task TryToBypassFakeProxyDohUsingGoodbyeDPIAsync(string clean if (!IsConnected || IsDisconnecting) return false; // Write attempt 1 failed message to log - string msgAttempt1Failed = $"Attempt 1 failed.{NL}"; + string msgAttempt1Failed = $"{NL}Attempt 1 failed.{NL}"; this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgAttempt1Failed, Color.IndianRed)); + // Get User Mode + DPIBasicBypassMode mode = GetGoodbyeDpiModeBasic(); + + // Return if it's a same mode + if (mode == DPIBasicBypassMode.Light) return false; + // Attempt 2 // Write attempt 2 message to log - string msgAttempt2 = $"Attempt 2, please wait...{NL}"; + string msgAttempt2 = $"Attempt 2 ({mode}), please wait...{NL}"; this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgAttempt2, Color.Orange)); // Deactive GoodbyeDPI of attempt 1 BypassFakeProxyDohStop(false, false, true, false); // Start attempt 2 - bool success2 = bypassCF(DPIBasicBypassMode.Medium); + bool success2 = await bypassCFAsync(mode); if (success2) { // Success message @@ -144,7 +173,7 @@ public async Task TryToBypassFakeProxyDohUsingGoodbyeDPIAsync(string clean // Not seccess after 2 attempts BypassFakeProxyDohStop(true, true, true, false); - string msgFailure1 = "Failure: "; + string msgFailure1 = $"{NL}Failure: "; string msgFailure2 = $"Camouflage mode is not compatible with your ISP.{NL}"; this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgFailure1, Color.IndianRed)); this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgFailure2, Color.LightGray)); @@ -153,7 +182,7 @@ public async Task TryToBypassFakeProxyDohUsingGoodbyeDPIAsync(string clean } } - bool bypassCF(DPIBasicBypassMode bypassMode) + async Task bypassCFAsync(DPIBasicBypassMode bypassMode) { // Get Bootsrap IP & Port string bootstrap = GetBootstrapSetting(out int bootstrapPort).ToString(); @@ -162,9 +191,20 @@ bool bypassCF(DPIBasicBypassMode bypassMode) // Start GoodbyeDPI DPIBasicBypass dpiBypass = new(bypassMode, CustomNumericUpDownSSLFragmentSize.Value, bootstrap, bootstrapPort); - string args = $"{dpiBypass.Args} --blacklist {SecureDNS.DPIBlacklistCFPath}"; + string args = $"{dpiBypass.Args} --blacklist {SecureDNS.DPIBlacklistFPPath}"; PIDGoodbyeDPIBypass = ProcessManager.ExecuteOnly(out Process _, SecureDNS.GoodbyeDpi, args, true, true, SecureDNS.BinaryDirPath, GetCPUPriority()); - Task.Delay(500).Wait(); + + // Wait for DNSProxyBypass + Task wait3 = Task.Run(async () => + { + while (!ProcessManager.FindProcessByPID(PIDGoodbyeDPIBypass)) + { + if (ProcessManager.FindProcessByPID(PIDGoodbyeDPIBypass)) + break; + await Task.Delay(100); + } + }); + await wait3.WaitAsync(TimeSpan.FromSeconds(5)); if (ProcessManager.FindProcessByPID(PIDGoodbyeDPIBypass)) { diff --git a/SecureDNSClient/Forms/TryToBypassFPUsingProxyDPI.cs b/SecureDNSClient/Forms/TryToBypassFPUsingProxyDPI.cs index a0fa176..42e2f58 100644 --- a/SecureDNSClient/Forms/TryToBypassFPUsingProxyDPI.cs +++ b/SecureDNSClient/Forms/TryToBypassFPUsingProxyDPI.cs @@ -17,12 +17,12 @@ public async Task TryToBypassFakeProxyDohUsingProxyDPIAsync(string cleanIP // Get Fake Proxy DoH Address string dohUrl = CustomTextBoxSettingFakeProxyDohAddress.Text; Network.GetUrlDetails(dohUrl, 443, out string dohHost, out int _, out string _, out bool _); - + // It's blocked message string msgBlocked = $"It's blocked.{NL}"; msgBlocked += $"Trying to bypass {dohHost}{NL}"; this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgBlocked, Color.Orange)); - + // Get fragment settings int beforSniChunks = Convert.ToInt32(CustomNumericUpDownPDpiBeforeSniChunks.Value); int chunkModeInt = -1; @@ -34,15 +34,15 @@ public async Task TryToBypassFakeProxyDohUsingProxyDPIAsync(string cleanIP 2 => HTTPProxyServer.Program.DPIBypass.ChunkMode.AllExtensions, _ => HTTPProxyServer.Program.DPIBypass.ChunkMode.AllExtensions, }; - + int sniChunks = Convert.ToInt32(CustomNumericUpDownPDpiSniChunks.Value); int antiPatternOffset = Convert.ToInt32(CustomNumericUpDownPDpiAntiPatternOffset.Value); int fragmentDelay = Convert.ToInt32(CustomNumericUpDownPDpiFragDelay.Value); - + // DPI Bypass Program HTTPProxyServer.Program.DPIBypass dpiBypassProgram = new(); dpiBypassProgram.Set(HTTPProxyServer.Program.DPIBypass.Mode.Program, beforSniChunks, chunkMode, sniChunks, antiPatternOffset, fragmentDelay); - + //// Test Only //dpiBypassProgram.OnChunkDetailsReceived += DpiBypassProgram_OnChunkDetailsReceived; //void DpiBypassProgram_OnChunkDetailsReceived(object? sender, EventArgs e) @@ -54,12 +54,12 @@ public async Task TryToBypassFakeProxyDohUsingProxyDPIAsync(string cleanIP // Add Programs to Proxy if (CamouflageProxyServer.IsRunning) CamouflageProxyServer.Stop(); - + CamouflageProxyServer = new(); CamouflageProxyServer.EnableDPIBypass(dpiBypassProgram); bool isOk = ApplyFakeProxy(CamouflageProxyServer); if (!isOk) return false; - + //// Test Only //CamouflageProxyServer.OnRequestReceived += CamouflageProxyServer_OnRequestReceived; //void CamouflageProxyServer_OnRequestReceived(object? sender, EventArgs e) @@ -72,7 +72,19 @@ public async Task TryToBypassFakeProxyDohUsingProxyDPIAsync(string cleanIP // Start CamouflageProxyServer.Start(IPAddress.Loopback, fakeProxyPort, 20000); - Task.Delay(500).Wait(); + + // Wait for CamouflageProxyServer + Task wait1 = Task.Run(async () => + { + while (!CamouflageProxyServer.IsRunning) + { + if (CamouflageProxyServer.IsRunning) + break; + await Task.Delay(100); + } + }); + await wait1.WaitAsync(TimeSpan.FromSeconds(5)); + IsBypassProxyActive = CamouflageProxyServer.IsRunning; if (IsBypassProxyActive) @@ -128,36 +140,84 @@ public async Task TryToBypassFakeProxyDohUsingProxyDPIAsync(string cleanIP dnsCryptConfig.DisableDoH(); // Generate SDNS + bool isSdnsGenerateSuccess = false; Network.GetUrlDetails(dohUrl, 443, out string host, out int port, out string path, out bool _); DNSCryptStampGenerator stampGenerator = new(); - string sdns = stampGenerator.GenerateDoH(cleanIP, null, $"{host}:{port}", path, null, true, true, true); - if (!string.IsNullOrEmpty(sdns)) - dnsCryptConfig.ChangePersonalServer(sdns); + string host1 = "dns.cloudflare.com"; + string host2 = "cloudflare-dns.com"; + string host3 = "every1dns.com"; + + if (host.Equals(host1) || host.Equals(host2) || host.Equals(host3)) + { + string sdns1 = stampGenerator.GenerateDoH(cleanIP, null, $"{host1}:{port}", path, null, true, true, true); + string sdns2 = stampGenerator.GenerateDoH(cleanIP, null, $"{host2}:{port}", path, null, true, true, true); + string sdns3 = stampGenerator.GenerateDoH(cleanIP, null, $"{host3}:{port}", path, null, true, true, true); + + string[] sdnss = Array.Empty(); + if (!string.IsNullOrEmpty(sdns1)) + { + Array.Resize(ref sdnss, sdnss.Length + 1); + sdnss[0] = sdns1; + } + if (!string.IsNullOrEmpty(sdns2)) + { + Array.Resize(ref sdnss, sdnss.Length + 1); + sdnss[1] = sdns2; + } + if (!string.IsNullOrEmpty(sdns3)) + { + Array.Resize(ref sdnss, sdnss.Length + 1); + sdnss[2] = sdns3; + } + + if (sdnss.Length > 0) + { + isSdnsGenerateSuccess = true; + dnsCryptConfig.ChangePersonalServer(sdnss); + } + } + else + { + string sdns = stampGenerator.GenerateDoH(cleanIP, null, $"{host}:{port}", path, null, true, true, true); + if (!string.IsNullOrEmpty(sdns)) + { + isSdnsGenerateSuccess = true; + string[] sdnss = { sdns }; + dnsCryptConfig.ChangePersonalServer(sdnss); + } + } + + // Check for success sdns + if (!isSdnsGenerateSuccess) + { + string msg = $"Coudn't generate SDNS!{NL}"; + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msg, Color.IndianRed)); + return false; + } // Save DNSCrypt Config File await dnsCryptConfig.WriteAsync(); await Task.Delay(500); // Args - string args = $"-config {SecureDNS.DNSCryptConfigCloudflarePath}"; + string args = $"-config \"{SecureDNS.DNSCryptConfigCloudflarePath}\""; if (IsDisconnecting) return false; // Execute DNSCrypt PIDDNSCryptBypass = ProcessManager.ExecuteOnly(out Process _, SecureDNS.DNSCrypt, args, true, true); - - // Wait for DNSCrypt - Task wait1 = Task.Run(async () => - { - while (!ProcessManager.FindProcessByPID(PIDDNSCryptBypass)) - { - if (ProcessManager.FindProcessByPID(PIDDNSCryptBypass)) - break; - await Task.Delay(100); - } - return Task.CompletedTask; - }); - await wait1.WaitAsync(TimeSpan.FromSeconds(5)); + + // Wait for DNSCrypt + Task wait2 = Task.Run(async () => + { + while (!ProcessManager.FindProcessByPID(PIDDNSCryptBypass)) + { + if (ProcessManager.FindProcessByPID(PIDDNSCryptBypass)) + break; + await Task.Delay(100); + } + }); + await wait2.WaitAsync(TimeSpan.FromSeconds(5)); if (ProcessManager.FindProcessByPID(PIDDNSCryptBypass)) { @@ -177,11 +237,21 @@ public async Task TryToBypassFakeProxyDohUsingProxyDPIAsync(string cleanIP // Not seccess if (IsConnected) { - string msgFailure1 = "Failure: "; + string msgFailure1 = $"{NL}Failure: "; string msgFailure2 = $"Change DPI bypass settings on Share tab and try again.{NL}"; this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgFailure1, Color.IndianRed)); this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgFailure2, Color.LightGray)); } + else + { + if (!ProcessManager.FindProcessByPID(PIDDNSCryptBypass)) + { + string msgFailure1 = $"{NL}Failure: "; + string msgFailure2 = $"DNSCrypt crashed or closed by another application.{NL}"; + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgFailure1, Color.IndianRed)); + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msgFailure2, Color.LightGray)); + } + } BypassFakeProxyDohStop(true, true, true, false); diff --git a/SecureDNSClient/Forms/UpdateStatusAuto.cs b/SecureDNSClient/Forms/UpdateStatusAuto.cs new file mode 100644 index 0000000..70a8c42 --- /dev/null +++ b/SecureDNSClient/Forms/UpdateStatusAuto.cs @@ -0,0 +1,713 @@ +using CustomControls; +using MsmhTools; +using MsmhTools.HTTPProxyServer; +using System; +using System.Diagnostics; +using System.Media; +using System.Net; +using System.Net.NetworkInformation; +using System.Reflection; + +namespace SecureDNSClient +{ + public partial class FormMain + { + private void CheckUpdateAuto() + { + Task.Run(async () => await CheckUpdate()); + System.Timers.Timer savedDnsUpdateTimer = new(); + savedDnsUpdateTimer.Interval = TimeSpan.FromHours(6).TotalMilliseconds; + savedDnsUpdateTimer.Elapsed += (s, e) => + { + Task.Run(async () => await CheckUpdate()); + }; + savedDnsUpdateTimer.Start(); + } + + private async Task CheckUpdate(bool writeToLog = false) + { + if (IsCheckingStarted) return; + if (!IsInternetAlive(false)) return; + if (IsCheckingForUpdate) return; + if (writeToLog) + IsCheckingForUpdate = true; + + string updateUrl = "https://github.com/msasanmh/SecureDNSClient/raw/main/update"; + string update = string.Empty; + string labelUpdate = string.Empty; + string downloadUrl = string.Empty; + + if (writeToLog) + { + string checking = $"Checking update...{NL}"; + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(checking, Color.LightGray)); + } + + try + { + using HttpClient httpClient = new(); + httpClient.Timeout = TimeSpan.FromSeconds(20); + update = await httpClient.GetStringAsync(new Uri(updateUrl)); + } + catch (Exception) + { + update = string.Empty; + } + + update = update.Trim(); + if (!string.IsNullOrEmpty(update) && update.Contains('|')) + { + string[] split = update.Split('|'); + if (split.Length != 2) + { + IsCheckingForUpdate = false; + return; + } + string newVersion = split[0].Trim(); + string currentVersion = Info.GetAppInfo(Assembly.GetExecutingAssembly()).ProductVersion ?? "99.99.99"; + downloadUrl = split[1].Trim(); + if (string.IsNullOrEmpty(downloadUrl)) downloadUrl = "https://github.com/msasanmh/SecureDNSClient/releases/latest"; + + int versionResult = Info.VersionCompare(newVersion, currentVersion); + if (versionResult == 1) + { + // Link Label Check Update + labelUpdate = $"There is a new version v{newVersion}"; + + if (writeToLog) + { + string productName = Info.GetAppInfo(Assembly.GetExecutingAssembly()).ProductName ?? "Secure DNS Client"; + string msg1 = $"{NL}There is a new version of {productName}{NL}"; + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(msg1, Color.MediumSeaGreen)); + this.InvokeIt(() => CustomRichTextBoxLog.AppendText("New version: ", Color.LightGray)); + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(newVersion, Color.DodgerBlue)); + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(", Current version: ", Color.LightGray)); + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(currentVersion + NL, Color.DodgerBlue)); + this.InvokeIt(() => CustomRichTextBoxLog.AppendText("Download: ", Color.LightGray)); + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(downloadUrl + NL + NL, Color.MediumSeaGreen)); + } + } + else + { + // Link Label Check Update + labelUpdate = string.Empty; + + if (writeToLog) + { + string uptodate = $"{NL}You are using the latest version.{NL}{NL}"; + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(uptodate, Color.MediumSeaGreen)); + } + } + } + else + { + if (writeToLog) + { + string err = $"{NL}Error connecting to update server.{NL}{NL}"; + this.InvokeIt(() => CustomRichTextBoxLog.AppendText(err, Color.IndianRed)); + } + } + + // Link Label Check Update + this.InvokeIt(() => + { + LinkLabelCheckUpdate.ForeColor = Color.MediumSeaGreen; + LinkLabelCheckUpdate.ActiveLinkColor = Color.MediumSeaGreen; + LinkLabelCheckUpdate.LinkColor = Color.MediumSeaGreen; + LinkLabelCheckUpdate.Text = labelUpdate; + }); + + LinkLabelCheckUpdate.LinkClicked -= LinkLabelCheckUpdate_LinkClicked; + LinkLabelCheckUpdate.LinkClicked += LinkLabelCheckUpdate_LinkClicked; + void LinkLabelCheckUpdate_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + if (!string.IsNullOrEmpty(downloadUrl)) OpenLinks.OpenUrl(downloadUrl); + } + + IsCheckingForUpdate = false; + } + + private void LogClearAuto() + { + System.Timers.Timer logAutoClearTimer = new(); + logAutoClearTimer.Interval = 5000; + logAutoClearTimer.Elapsed += (s, e) => + { + int length = 0; + this.InvokeIt(() => length = CustomRichTextBoxLog.Text.Length); + if (length > 90000) + { + this.InvokeIt(() => CustomRichTextBoxLog.ResetText()); + this.InvokeIt(() => CustomRichTextBoxLog.AppendText($"Log Auto Clear.{NL}", Color.MediumSeaGreen)); + } + }; + logAutoClearTimer.Start(); + } + + private void UpdateBoolsAuto() + { + System.Timers.Timer updateBoolsTimer = new(); + updateBoolsTimer.Interval = 4000; + updateBoolsTimer.Elapsed += (s, e) => + { + UpdateBools(); + }; + updateBoolsTimer.Start(); + } + + private async void UpdateBools() + { + // Update bool IsConnected + IsConnected = ProcessManager.FindProcessByPID(PIDDNSProxy) || + ProcessManager.FindProcessByPID(PIDDNSProxyBypass) || + ProcessManager.FindProcessByPID(PIDDNSCrypt) || + ProcessManager.FindProcessByPID(PIDDNSCryptBypass); + + // In case dnsproxy or dnscrypt processes terminated + if (!IsConnected) + { + IsDNSConnected = IsDoHConnected = IsConnected; + LocalDnsLatency = LocalDohLatency = -1; + if (CamouflageDNSServer != null && CamouflageDNSServer.IsRunning) + CamouflageDNSServer.Stop(); + if (IsDNSSet) await UnsetSavedDNS(); + } + + // In case SDCHttpProxy terminated + if (!IsProxyActivated && !IsSharing && IsProxySet) + { + Network.UnsetProxy(false, false); + } + + // Update bool IsDnsSet + //IsDNSSet = UpdateBoolIsDnsSet(out bool _); // I need to test this on Win7 myself! + + // Update bool IsProxySet + IsProxySet = UpdateBoolIsProxySet(); + + // Update bool IsGoodbyeDPIActive + IsGoodbyeDPIActive = ProcessManager.FindProcessByPID(PIDGoodbyeDPI); + + // Update bool IsDPIActive + IsDPIActive = (IsProxyDPIActive || IsGoodbyeDPIActive); + } + + private void UpdateBoolDnsDohAuto() + { + Task.Run(() => + { + while (true) + { + int timeout = 10000; + Task.Delay(timeout + 500).Wait(); + Parallel.Invoke( + () => UpdateBoolDnsOnce(timeout), + () => UpdateBoolDohOnce(timeout) + ); + } + }); + } + + private void UpdateBoolDnsOnce(int timeout) + { + if (IsConnected) + { + // DNS + CheckDns checkDns = new(false, GetCPUPriority()); + checkDns.CheckDNS("google.com", IPAddress.Loopback.ToString(), timeout); + LocalDnsLatency = checkDns.DnsLatency; + IsDNSConnected = LocalDnsLatency != -1; + + try + { + if (!string.IsNullOrEmpty(TheDll)) + if (File.Exists(TheDll) && IsDNSConnected) File.Delete(TheDll); + } + catch (Exception ex) + { + Debug.WriteLine(ex.Message); + } + } + else + { + LocalDnsLatency = -1; + IsDNSConnected = LocalDnsLatency != -1; + } + } + + private void UpdateBoolDohOnce(int timeout) + { + if (IsConnected && CustomRadioButtonSettingWorkingModeDNSandDoH.Checked) + { + // DoH + string dohServer; + if (ConnectedDohPort == 443) + dohServer = $"https://{IPAddress.Loopback}/dns-query"; + else + dohServer = $"https://{IPAddress.Loopback}:{ConnectedDohPort}/dns-query"; + CheckDns checkDns = new(false, GetCPUPriority()); + checkDns.CheckDNS("google.com", dohServer, timeout); + LocalDohLatency = checkDns.DnsLatency; + IsDoHConnected = LocalDohLatency != -1; + + try + { + if (!string.IsNullOrEmpty(TheDll)) + if (File.Exists(TheDll) && IsDoHConnected) File.Delete(TheDll); + } + catch (Exception ex) + { + Debug.WriteLine(ex.Message); + } + } + else + { + LocalDohLatency = -1; + IsDoHConnected = LocalDohLatency != -1; + } + } + + private bool UpdateBoolIsDnsSet(out bool isAnotherDnsSet) + { + isAnotherDnsSet = false; + if (File.Exists(SecureDNS.NicNamePath)) + { + string nicName = File.ReadAllText(SecureDNS.NicNamePath).Replace(NL, string.Empty); + if (nicName.Length > 0) + { + NetworkInterface? nic = Network.GetNICByName(nicName); + if (nic != null) + { + bool isDnsSet = Network.IsDnsSet(nic, out string dnsServer1, out string _); + if (!isDnsSet) return false; // DNS is set to DHCP + else + { + if (dnsServer1 == IPAddress.Loopback.ToString()) + return true; + else + { + isAnotherDnsSet = true; + return false; + } + } + } + } + } + return false; + } + + private void UpdateBoolHttpProxyAuto() + { + Task task = Task.Run(() => + { + while (true) + { + Task.Delay(2000).Wait(); + if (!UpdateProxyBools) continue; + + IsProxyActivated = ProcessManager.FindProcessByPID(PIDHttpProxy); + + string line = string.Empty; + if (ProxyProcess != null) + { + if (!UpdateProxyBools) continue; + + try + { + ProxyProcess.StandardOutput.DiscardBufferedData(); + ProxyProcess.StandardInput.WriteLine("out"); + } + catch (Exception) + { + // do nothing + } + + while (ProcessManager.FindProcessByPID(PIDHttpProxy)) + { + try + { + string l = ProxyProcess.StandardOutput.ReadLine() ?? string.Empty; + Task.Delay(200).Wait(); + if (l.StartsWith("details")) line = l; + } + catch (Exception ex) + { + Debug.WriteLine(ex.Message); + } + + if (line.StartsWith("details")) + { + //Debug.WriteLine("Done"); + break; + } + } + } + + //Debug.WriteLine("Line: " + line); + + if (string.IsNullOrEmpty(line) || string.IsNullOrWhiteSpace(line)) + { + IsSharing = false; ProxyRequests = 0; ProxyMaxRequests = 250; IsProxyDPIActive = false; + } + else if (line.StartsWith("details")) + { + string[] split = line.Split('|'); + if (bool.TryParse(split[1].ToLower(), out bool sharing)) IsSharing = sharing; + if (int.TryParse(split[2].ToLower(), out int port)) ProxyPort = port; + if (int.TryParse(split[3].ToLower(), out int requests)) ProxyRequests = requests; + if (int.TryParse(split[4].ToLower(), out int maxRequests)) ProxyMaxRequests = maxRequests; + if (bool.TryParse(split[5].ToLower(), out bool dpiActive)) IsProxyDPIActive = dpiActive; + + if (split[6].ToLower().Equals("disable")) ProxyStaticDPIBypassMode = HTTPProxyServer.Program.DPIBypass.Mode.Disable; + else if (split[6].ToLower().Equals("program")) ProxyStaticDPIBypassMode = HTTPProxyServer.Program.DPIBypass.Mode.Program; + + if (split[7].ToLower().Equals("disable")) ProxyDPIBypassMode = HTTPProxyServer.Program.DPIBypass.Mode.Disable; + else if (split[7].ToLower().Equals("program")) ProxyDPIBypassMode = HTTPProxyServer.Program.DPIBypass.Mode.Program; + + if (split[8].ToLower().Equals("disable")) ProxyUpStreamMode = HTTPProxyServer.Program.UpStreamProxy.Mode.Disable; + else if (split[8].ToLower().Equals("http")) ProxyUpStreamMode = HTTPProxyServer.Program.UpStreamProxy.Mode.HTTP; + else if (split[8].ToLower().Equals("socks5")) ProxyUpStreamMode = HTTPProxyServer.Program.UpStreamProxy.Mode.SOCKS5; + + if (split[9].ToLower().Equals("disable")) ProxyDNSMode = HTTPProxyServer.Program.Dns.Mode.Disable; + else if (split[9].ToLower().Equals("system")) ProxyDNSMode = HTTPProxyServer.Program.Dns.Mode.System; + else if (split[9].ToLower().Equals("doh")) ProxyDNSMode = HTTPProxyServer.Program.Dns.Mode.DoH; + else if (split[9].ToLower().Equals("plaindns")) ProxyDNSMode = HTTPProxyServer.Program.Dns.Mode.PlainDNS; + + if (split[10].ToLower().Equals("disable")) ProxyFakeDnsMode = HTTPProxyServer.Program.FakeDns.Mode.Disable; + else if (split[10].ToLower().Equals("file")) ProxyFakeDnsMode = HTTPProxyServer.Program.FakeDns.Mode.File; + else if (split[10].ToLower().Equals("text")) ProxyFakeDnsMode = HTTPProxyServer.Program.FakeDns.Mode.Text; + + if (split[11].ToLower().Equals("disable")) ProxyBWListMode = HTTPProxyServer.Program.BlackWhiteList.Mode.Disable; + else if (split[11].ToLower().Equals("blacklistfile")) ProxyBWListMode = HTTPProxyServer.Program.BlackWhiteList.Mode.BlackListFile; + else if (split[11].ToLower().Equals("blacklisttext")) ProxyBWListMode = HTTPProxyServer.Program.BlackWhiteList.Mode.BlackListText; + else if (split[11].ToLower().Equals("whitelistfile")) ProxyBWListMode = HTTPProxyServer.Program.BlackWhiteList.Mode.WhiteListFile; + else if (split[11].ToLower().Equals("whitelisttext")) ProxyBWListMode = HTTPProxyServer.Program.BlackWhiteList.Mode.WhiteListText; + + if (split[12].ToLower().Equals("disable")) DontBypassMode = HTTPProxyServer.Program.DontBypass.Mode.Disable; + else if (split[12].ToLower().Equals("file")) DontBypassMode = HTTPProxyServer.Program.DontBypass.Mode.File; + else if (split[12].ToLower().Equals("text")) DontBypassMode = HTTPProxyServer.Program.DontBypass.Mode.Text; + + } + } + }); + } + + private bool UpdateBoolIsProxySet() + { + if (IsSharing) + { + bool isAnyProxySet = Network.IsProxySet(out string httpProxy, out string _, out string _, out string _); + if (isAnyProxySet) + if (!string.IsNullOrEmpty(httpProxy)) + if (httpProxy.Contains(':')) + { + string[] split = httpProxy.Split(':'); + string ip = split[0]; + string portS = split[1]; + bool isPortInt = int.TryParse(portS, out int port); + if (isPortInt) + if (ip == IPAddress.Loopback.ToString() && port == ProxyPort) + return true; + } + } + return false; + } + + private void UpdateStatusShortAuto() + { + Task.Run(() => + { + while (true) + { + Task.Delay(300).Wait(); + this.InvokeIt(() => UpdateStatusShort()); + } + }); + } + + private void UpdateStatusShort() + { + // Update Status Working Servers + NumberOfWorkingServers = WorkingDnsList.Count; + CustomRichTextBoxStatusWorkingServers.ResetText(); + CustomRichTextBoxStatusWorkingServers.AppendText("Working Servers: ", ForeColor); + CustomRichTextBoxStatusWorkingServers.AppendText(NumberOfWorkingServers.ToString(), Color.DodgerBlue); + + // Check Button + CustomButtonCheck.Enabled = !IsConnecting; + + // Insecure and parallel + if (CustomCheckBoxInsecure.Checked) + CustomCheckBoxCheckInParallel.Checked = false; + + // Connect Button + if (!CustomRadioButtonConnectCheckedServers.Checked) + { + CustomButtonConnect.Enabled = true; + } + else + { + if (WorkingDnsList.Any() && !IsCheckingStarted && !IsConnecting) + CustomButtonConnect.Enabled = true; + else + CustomButtonConnect.Enabled = IsConnected; + } + + // Connect to popular servers using proxy Textbox + CustomTextBoxHTTPProxy.Enabled = CustomRadioButtonConnectDNSCrypt.Checked; + + // SetDNS Button + if (IsConnected && (IsDNSConnected || IsDoHConnected)) + CustomButtonSetDNS.Enabled = true; + + // SetProxy Button + if (IsProxyActivated && IsSharing) + CustomButtonSetProxy.Enabled = true; + + // Settings -> Share -> Advanced + CustomTextBoxSettingHTTPProxyCfCleanIP.Enabled = CustomCheckBoxSettingHTTPProxyCfCleanIP.Checked; + + } + + private void UpdateStatusLongAuto() + { + Task.Run(() => + { + while (true) + { + Task.Delay(2000).Wait(); + UpdateStatusLong(); + } + }); + } + + private void UpdateStatusLong() + { + // Update Status IsConnected + string textConnect = IsConnected ? "Yes" : "No"; + Color colorConnect = IsConnected ? Color.MediumSeaGreen : Color.IndianRed; + this.InvokeIt(() => CustomRichTextBoxStatusIsConnected.ResetText()); + this.InvokeIt(() => CustomRichTextBoxStatusIsConnected.AppendText("Is Connected: ", ForeColor)); + this.InvokeIt(() => CustomRichTextBoxStatusIsConnected.AppendText(textConnect, colorConnect)); + + // Update Status IsDNSConnected + string statusLocalDNS = IsDNSConnected ? "Online" : "Offline"; + Color colorStatusLocalDNS = IsDNSConnected ? Color.MediumSeaGreen : Color.IndianRed; + this.InvokeIt(() => CustomRichTextBoxStatusLocalDNS.ResetText()); + this.InvokeIt(() => CustomRichTextBoxStatusLocalDNS.AppendText("Local DNS: ", ForeColor)); + this.InvokeIt(() => CustomRichTextBoxStatusLocalDNS.AppendText(statusLocalDNS, colorStatusLocalDNS)); + + // Update Status LocalDnsLatency + string statusLocalDnsLatency = LocalDnsLatency != -1 ? $"{LocalDnsLatency}" : "-1"; + Color colorStatusLocalDnsLatency = LocalDnsLatency != -1 ? Color.MediumSeaGreen : Color.IndianRed; + this.InvokeIt(() => CustomRichTextBoxStatusLocalDnsLatency.ResetText()); + this.InvokeIt(() => CustomRichTextBoxStatusLocalDnsLatency.AppendText("Local DNS Latency: ", ForeColor)); + this.InvokeIt(() => CustomRichTextBoxStatusLocalDnsLatency.AppendText(statusLocalDnsLatency, colorStatusLocalDnsLatency)); + + // Update Status IsDoHConnected + string statusLocalDoH = IsDoHConnected ? "Online" : "Offline"; + Color colorStatusLocalDoH = IsDoHConnected ? Color.MediumSeaGreen : Color.IndianRed; + this.InvokeIt(() => CustomRichTextBoxStatusLocalDoH.ResetText()); + this.InvokeIt(() => CustomRichTextBoxStatusLocalDoH.AppendText("Local DoH: ", ForeColor)); + this.InvokeIt(() => CustomRichTextBoxStatusLocalDoH.AppendText(statusLocalDoH, colorStatusLocalDoH)); + + // Update Status LocalDohLatency + string statusLocalDoHLatency = LocalDohLatency != -1 ? $"{LocalDohLatency}" : "-1"; + Color colorStatusLocalDoHLatency = LocalDohLatency != -1 ? Color.MediumSeaGreen : Color.IndianRed; + this.InvokeIt(() => CustomRichTextBoxStatusLocalDoHLatency.ResetText()); + this.InvokeIt(() => CustomRichTextBoxStatusLocalDoHLatency.AppendText("Local DoH Latency: ", ForeColor)); + this.InvokeIt(() => CustomRichTextBoxStatusLocalDoHLatency.AppendText(statusLocalDoHLatency, colorStatusLocalDoHLatency)); + + // Update Status IsDnsSet + string textDNS = IsDNSSet ? "Yes" : "No"; + Color colorDNS = IsDNSSet ? Color.MediumSeaGreen : Color.IndianRed; + this.InvokeIt(() => CustomRichTextBoxStatusIsDNSSet.ResetText()); + this.InvokeIt(() => CustomRichTextBoxStatusIsDNSSet.AppendText("Is DNS Set: ", ForeColor)); + this.InvokeIt(() => CustomRichTextBoxStatusIsDNSSet.AppendText(textDNS, colorDNS)); + + // Update Status IsSharing + string textSharing = IsSharing ? "Yes" : "No"; + Color colorSharing = IsSharing ? Color.MediumSeaGreen : Color.IndianRed; + this.InvokeIt(() => CustomRichTextBoxStatusIsSharing.ResetText()); + this.InvokeIt(() => CustomRichTextBoxStatusIsSharing.AppendText("Is Sharing: ", ForeColor)); + this.InvokeIt(() => CustomRichTextBoxStatusIsSharing.AppendText(textSharing, colorSharing)); + + // Update Status ProxyRequests + string textProxyRequests = "0 of 0"; + Color colorProxyRequests = Color.MediumSeaGreen; + textProxyRequests = $"{ProxyRequests} of {ProxyMaxRequests}"; + colorProxyRequests = ProxyRequests < ProxyMaxRequests ? Color.MediumSeaGreen : Color.IndianRed; + this.InvokeIt(() => CustomRichTextBoxStatusProxyRequests.ResetText()); + this.InvokeIt(() => CustomRichTextBoxStatusProxyRequests.AppendText("Proxy Requests ", ForeColor)); + this.InvokeIt(() => CustomRichTextBoxStatusProxyRequests.AppendText(textProxyRequests, colorProxyRequests)); + + // Update Status IsProxySet + string textProxySet = IsProxySet ? "Yes" : "No"; + Color colorProxySet = IsProxySet ? Color.MediumSeaGreen : Color.IndianRed; + this.InvokeIt(() => CustomRichTextBoxStatusIsProxySet.ResetText()); + this.InvokeIt(() => CustomRichTextBoxStatusIsProxySet.AppendText("Is Proxy Set: ", ForeColor)); + this.InvokeIt(() => CustomRichTextBoxStatusIsProxySet.AppendText(textProxySet, colorProxySet)); + + // Update Status IsProxyDPIActive + string textProxyDPI = IsProxyDPIActive ? "Active" : "Inactive"; + Color colorProxyDPI = IsProxyDPIActive ? Color.MediumSeaGreen : Color.IndianRed; + this.InvokeIt(() => CustomRichTextBoxStatusProxyDpiBypass.ResetText()); + this.InvokeIt(() => CustomRichTextBoxStatusProxyDpiBypass.AppendText("Proxy DPI Bypass: ", ForeColor)); + this.InvokeIt(() => CustomRichTextBoxStatusProxyDpiBypass.AppendText(textProxyDPI, colorProxyDPI)); + + // Update Status IsGoodbyeDPIActive + string textGoodbyeDPI = IsGoodbyeDPIActive ? "Active" : "Inactive"; + Color colorGoodbyeDPI = IsGoodbyeDPIActive ? Color.MediumSeaGreen : Color.IndianRed; + this.InvokeIt(() => CustomRichTextBoxStatusGoodbyeDPI.ResetText()); + this.InvokeIt(() => CustomRichTextBoxStatusGoodbyeDPI.AppendText("GoodbyeDPI: ", ForeColor)); + this.InvokeIt(() => CustomRichTextBoxStatusGoodbyeDPI.AppendText(textGoodbyeDPI, colorGoodbyeDPI)); + + // Play Audio Alert + if (!CustomCheckBoxSettingDisableAudioAlert.Checked && !IsCheckingStarted) + { + if (!StopWatchAudioAlertDelay.IsRunning) StopWatchAudioAlertDelay.Start(); + if (StopWatchAudioAlertDelay.ElapsedMilliseconds > 5000) + PlayAudioAlert(); + } + } + + private void UpdateStatusCpuUsageAuto() + { + Task.Run(async () => + { + while (true) + { + int delay = 1500; + double cpu = await GetCpuUsage(delay); + await Task.Delay(3000); + // Update Status CPU Usage + Color colorCPU = cpu <= 35 ? Color.MediumSeaGreen : Color.IndianRed; + this.InvokeIt(() => CustomRichTextBoxStatusCpuUsage.ResetText()); + this.InvokeIt(() => CustomRichTextBoxStatusCpuUsage.AppendText("CPU: ", ForeColor)); + this.InvokeIt(() => CustomRichTextBoxStatusCpuUsage.AppendText($"{cpu}%", colorCPU)); + } + }); + } + + private async Task GetCpuUsage(int delay) + { + float sdc = -1, sdcHttpProxy = -1, sdcFakeProxy = -1; + float dnsproxy1 = -1, dnscrypt1 = -1, goodbyedpi1 = -1; + float dnsproxy2 = -1, dnscrypt2 = -1, goodbyedpi2 = -1; + + Task a = Task.Run(async () => sdc = await ProcessManager.GetCpuUsage(Process.GetCurrentProcess(), delay)); + Task b = Task.Run(async () => sdcHttpProxy = await ProcessManager.GetCpuUsage(PIDHttpProxy, delay)); + Task c = Task.Run(async () => sdcFakeProxy = await ProcessManager.GetCpuUsage(PIDFakeProxy, delay)); + Task d = Task.Run(async () => dnsproxy1 = await ProcessManager.GetCpuUsage(PIDDNSProxy, delay)); + Task e = Task.Run(async () => dnsproxy2 = await ProcessManager.GetCpuUsage(PIDDNSProxyBypass, delay)); + Task f = Task.Run(async () => dnscrypt1 = await ProcessManager.GetCpuUsage(PIDDNSCrypt, delay)); + Task g = Task.Run(async () => dnscrypt2 = await ProcessManager.GetCpuUsage(PIDDNSCryptBypass, delay)); + Task h = Task.Run(async () => goodbyedpi1 = await ProcessManager.GetCpuUsage(PIDGoodbyeDPI, delay)); + Task i = Task.Run(async () => goodbyedpi2 = await ProcessManager.GetCpuUsage(PIDGoodbyeDPIBypass, delay)); + + await Task.WhenAll(a, b, c, d, e, f, g, h, i); + + float sum = 0; + List list = new(); + if (sdc != -1) list.Add(sdc); + if (sdcHttpProxy != -1) list.Add(sdcHttpProxy); + if (sdcFakeProxy != -1) list.Add(sdcFakeProxy); + if (dnsproxy1 != -1) list.Add(dnsproxy1); + if (dnsproxy2 != -1) list.Add(dnsproxy2); + if (dnscrypt1 != -1) list.Add(dnscrypt1); + if (dnscrypt2 != -1) list.Add(dnscrypt2); + if (goodbyedpi1 != -1) list.Add(goodbyedpi1); + if (goodbyedpi2 != -1) list.Add(goodbyedpi2); + + for (int n = 0; n < list.Count; n++) sum += list[n]; + double result = Math.Round(Convert.ToDouble(sum), 2); + return result > 100 ? 100 : result; + } + + private void AutoSaveSettings() + { + // Using System.Timers.Timer needs Invoke. + System.Windows.Forms.Timer autoSaveTimer = new(); + autoSaveTimer.Interval = int.Parse(TimeSpan.FromMinutes(2).TotalMilliseconds.ToString()); + autoSaveTimer.Tick += async (s, e) => + { + // Select Control type and properties to save + AppSettings.AddSelectedControlAndProperty(typeof(CustomCheckBox), "Checked"); + AppSettings.AddSelectedControlAndProperty(typeof(CustomNumericUpDown), "Value"); + AppSettings.AddSelectedControlAndProperty(typeof(CustomRadioButton), "Checked"); + AppSettings.AddSelectedControlAndProperty(typeof(CustomTextBox), "Text"); + AppSettings.AddSelectedControlAndProperty(typeof(CustomTextBox), "Texts"); + AppSettings.AddSelectedControlAndProperty(typeof(CustomComboBox), "SelectedIndex"); + + // Add Settings to save + AppSettings.AddSelectedSettings(this); + + // Save Application Settings + await AppSettings.SaveAsync(SecureDNS.SettingsXmlPath); + }; + autoSaveTimer.Start(); + } + + private void PlayAudioAlert() + { + if ((IsDNSConnected || IsDoHConnected) && AudioAlertOnline) + { + AudioAlertOnline = false; + AudioAlertOffline = true; + + Task.Run(() => + { + SoundPlayer soundPlayer = new(Audio.Resource1.DNS_Online); + soundPlayer.PlaySync(); + soundPlayer.Stop(); + soundPlayer.Dispose(); + }); + } + + if (!IsDNSConnected && !IsDoHConnected && AudioAlertOffline) + { + AudioAlertOffline = false; + AudioAlertOnline = true; + + int softEtherPID = -1; + if (ProcessManager.FindProcessByName("vpnclient_x64")) + softEtherPID = ProcessManager.GetFirstPidByName("vpnclient_x64"); + + if (softEtherPID != -1) + ProcessManager.SuspendProcess(softEtherPID); // On net disconnect SoftEther cause noise to audio. + + Task.Run(() => + { + Task.Delay(1000).Wait(); + SoundPlayer soundPlayer = new(Audio.Resource1.DNS_Offline); + soundPlayer.PlaySync(); + soundPlayer.Stop(); + soundPlayer.Dispose(); + Task.Delay(5000).Wait(); + }); + + if (softEtherPID != -1) + ProcessManager.ResumeProcess(softEtherPID); + } + + if (IsSharing && (ProxyRequests >= ProxyMaxRequests) && !AudioAlertRequestsExceeded) + { + AudioAlertRequestsExceeded = true; + Task.Run(() => + { + SoundPlayer soundPlayer = new(Audio.Resource1.Warning_Handle_Requests_Exceeded); + soundPlayer.PlaySync(); + soundPlayer.Stop(); + soundPlayer.Dispose(); + }); + } + + if (ProxyRequests < ProxyMaxRequests - 5) + AudioAlertRequestsExceeded = false; + + StopWatchAudioAlertDelay.Stop(); + StopWatchAudioAlertDelay.Reset(); + } + + } +} diff --git a/SecureDNSClient/NecessaryFiles/Resource1.Designer.cs b/SecureDNSClient/NecessaryFiles/Resource1.Designer.cs index 3060e28..d50329e 100644 --- a/SecureDNSClient/NecessaryFiles/Resource1.Designer.cs +++ b/SecureDNSClient/NecessaryFiles/Resource1.Designer.cs @@ -134,7 +134,7 @@ internal static byte[] SDCHttpProxy { /// Looks up a localized string similar to dnscrypt-proxy 2.1.4 ///dnslookup 1.9.1 ///dnsproxy 0.50.2 - ///sdchttpproxy 2.2.5 + ///sdchttpproxy 2.3.0 ///goodbyedpi 0.2.2. ///
internal static string versions { diff --git a/SecureDNSClient/NecessaryFiles/SDCHttpProxy.exe b/SecureDNSClient/NecessaryFiles/SDCHttpProxy.exe index 18ef46b38f61e73e4c3437e79efabb7fa0adc46e..c70e43f19eeeb430f3394953cb1407441d377cdd 100644 GIT binary patch delta 369513 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 DFv~Q) delta 355927 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%0DQB+T*hbm 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

b(X2b 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 diff --git a/SecureDNSClient/NecessaryFiles/versions.txt b/SecureDNSClient/NecessaryFiles/versions.txt index cf780c0..b118d9c 100644 --- a/SecureDNSClient/NecessaryFiles/versions.txt +++ b/SecureDNSClient/NecessaryFiles/versions.txt @@ -1,5 +1,5 @@ dnscrypt-proxy 2.1.4 dnslookup 1.9.1 dnsproxy 0.50.2 -sdchttpproxy 2.2.5 +sdchttpproxy 2.3.0 goodbyedpi 0.2.2 \ No newline at end of file diff --git a/SecureDNSClient/Properties/PublishProfiles/FolderProfile.pubxml.user b/SecureDNSClient/Properties/PublishProfiles/FolderProfile.pubxml.user index d04309a..e881915 100644 --- a/SecureDNSClient/Properties/PublishProfiles/FolderProfile.pubxml.user +++ b/SecureDNSClient/Properties/PublishProfiles/FolderProfile.pubxml.user @@ -4,6 +4,6 @@ https://go.microsoft.com/fwlink/?LinkID=208121. --> - True|2023-07-17T18:02:20.6598533Z;True|2023-07-17T21:50:48.4709956+04:30;True|2023-07-17T21:41:55.9459002+04:30;True|2023-07-17T21:18:13.0811919+04:30;True|2023-07-04T20:14:27.5923252+04:30;True|2023-07-03T17:04:51.8596933+04:30;True|2023-06-28T20:50:29.7354161+04:30;True|2023-06-28T20:45:12.9586472+04:30;True|2023-06-28T20:36:22.0289215+04:30;True|2023-06-28T20:16:14.5797027+04:30;True|2023-06-17T16:31:05.5599274+04:30;True|2023-06-17T14:52:35.3347651+04:30;True|2023-06-04T19:48:51.8162459+04:30;True|2023-06-04T17:30:12.3301548+04:30;True|2023-06-02T21:18:20.3636677+04:30;True|2023-06-02T20:51:04.1304394+04:30;True|2023-06-02T20:25:56.5067353+04:30;True|2023-06-02T20:22:14.1787902+04:30;True|2023-06-02T17:15:42.7452611+04:30;True|2023-05-30T17:58:01.2450123+04:30;True|2023-05-29T20:36:32.5291896+04:30;True|2023-05-29T20:18:12.2031439+04:30;True|2023-05-29T19:44:46.0704739+04:30;True|2023-05-27T17:25:56.0498058+04:30;True|2023-05-27T14:50:19.0862471+04:30;True|2023-05-26T00:33:02.8133052+04:30;True|2023-05-26T00:22:55.5762345+04:30;True|2023-05-19T21:55:55.2053137+04:30;True|2023-05-04T21:14:13.1959990+04:30;True|2023-05-03T18:38:41.0925495+04:30;True|2023-05-03T18:22:56.1278337+04:30;True|2023-04-07T19:23:03.7575436+04:30;True|2023-04-07T19:01:53.8374192+04:30;True|2023-04-07T18:56:48.3465035+04:30;True|2023-02-23T19:42:36.6931238+03:30;True|2023-02-21T23:02:29.4417103+03:30;True|2023-02-21T22:58:29.4403662+03:30;True|2023-02-21T22:48:24.4128535+03:30;True|2023-02-21T22:27:17.9388815+03:30;True|2023-02-20T17:48:08.6532315+03:30;True|2023-02-16T01:42:22.8837631+03:30;True|2023-02-16T01:39:16.7954793+03:30;True|2023-02-15T21:24:18.8085514+03:30;True|2023-02-15T21:18:04.1969211+03:30;True|2023-02-15T21:15:01.3739223+03:30;True|2023-02-08T06:22:33.0414550+03:30;True|2023-02-08T05:20:18.9270105+03:30;True|2023-02-08T05:15:17.5374116+03:30;True|2023-02-08T05:03:44.0882459+03:30;True|2023-02-08T04:53:40.5516012+03:30;True|2023-02-08T02:23:19.0633758+03:30; + True|2023-07-30T21:42:04.5448192Z;True|2023-07-31T00:04:46.0894144+04:30;True|2023-07-31T00:01:33.6095925+04:30;True|2023-07-30T21:43:56.3111067+04:30;True|2023-07-30T21:12:58.0148728+04:30;True|2023-07-30T21:12:04.4089924+04:30;True|2023-07-30T21:08:02.5981217+04:30;True|2023-07-30T20:59:26.1393550+04:30;True|2023-07-30T20:49:10.0641504+04:30;True|2023-07-30T20:37:55.0060946+04:30;True|2023-07-30T19:59:45.2211753+04:30;True|2023-07-30T19:22:27.2089781+04:30;True|2023-07-30T18:59:16.4344534+04:30;True|2023-07-30T18:18:36.0414670+04:30;True|2023-07-30T17:53:16.0490028+04:30;True|2023-07-30T17:17:30.2774165+04:30;True|2023-07-30T02:41:58.4359505+04:30;True|2023-07-30T01:47:45.1815278+04:30;True|2023-07-30T01:39:19.1433492+04:30;True|2023-07-30T01:36:00.2507530+04:30;True|2023-07-30T01:29:16.5405756+04:30;True|2023-07-30T00:58:07.8090602+04:30;True|2023-07-29T23:47:20.3162431+04:30;True|2023-07-29T22:55:03.7928616+04:30;True|2023-07-17T22:32:20.6598533+04:30;True|2023-07-17T21:50:48.4709956+04:30;True|2023-07-17T21:41:55.9459002+04:30;True|2023-07-17T21:18:13.0811919+04:30;True|2023-07-04T20:14:27.5923252+04:30;True|2023-07-03T17:04:51.8596933+04:30;True|2023-06-28T20:50:29.7354161+04:30;True|2023-06-28T20:45:12.9586472+04:30;True|2023-06-28T20:36:22.0289215+04:30;True|2023-06-28T20:16:14.5797027+04:30;True|2023-06-17T16:31:05.5599274+04:30;True|2023-06-17T14:52:35.3347651+04:30;True|2023-06-04T19:48:51.8162459+04:30;True|2023-06-04T17:30:12.3301548+04:30;True|2023-06-02T21:18:20.3636677+04:30;True|2023-06-02T20:51:04.1304394+04:30;True|2023-06-02T20:25:56.5067353+04:30;True|2023-06-02T20:22:14.1787902+04:30;True|2023-06-02T17:15:42.7452611+04:30;True|2023-05-30T17:58:01.2450123+04:30;True|2023-05-29T20:36:32.5291896+04:30;True|2023-05-29T20:18:12.2031439+04:30;True|2023-05-29T19:44:46.0704739+04:30;True|2023-05-27T17:25:56.0498058+04:30;True|2023-05-27T14:50:19.0862471+04:30;True|2023-05-26T00:33:02.8133052+04:30;True|2023-05-26T00:22:55.5762345+04:30;True|2023-05-19T21:55:55.2053137+04:30;True|2023-05-04T21:14:13.1959990+04:30;True|2023-05-03T18:38:41.0925495+04:30;True|2023-05-03T18:22:56.1278337+04:30;True|2023-04-07T19:23:03.7575436+04:30;True|2023-04-07T19:01:53.8374192+04:30;True|2023-04-07T18:56:48.3465035+04:30;True|2023-02-23T19:42:36.6931238+03:30;True|2023-02-21T23:02:29.4417103+03:30;True|2023-02-21T22:58:29.4403662+03:30;True|2023-02-21T22:48:24.4128535+03:30;True|2023-02-21T22:27:17.9388815+03:30;True|2023-02-20T17:48:08.6532315+03:30;True|2023-02-16T01:42:22.8837631+03:30;True|2023-02-16T01:39:16.7954793+03:30;True|2023-02-15T21:24:18.8085514+03:30;True|2023-02-15T21:18:04.1969211+03:30;True|2023-02-15T21:15:01.3739223+03:30;True|2023-02-08T06:22:33.0414550+03:30;True|2023-02-08T05:20:18.9270105+03:30;True|2023-02-08T05:15:17.5374116+03:30;True|2023-02-08T05:03:44.0882459+03:30;True|2023-02-08T04:53:40.5516012+03:30;True|2023-02-08T02:23:19.0633758+03:30; \ No newline at end of file diff --git a/SecureDNSClient/Properties/Resources.Designer.cs b/SecureDNSClient/Properties/Resources.Designer.cs index 30afe07..6a7ca36 100644 --- a/SecureDNSClient/Properties/Resources.Designer.cs +++ b/SecureDNSClient/Properties/Resources.Designer.cs @@ -60,6 +60,26 @@ internal Resources() { } } + ///

+ /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Farvahar { + get { + object obj = ResourceManager.GetObject("Farvahar", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap FarvaharBlueRed { + get { + object obj = ResourceManager.GetObject("FarvaharBlueRed", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/SecureDNSClient/Properties/Resources.resx b/SecureDNSClient/Properties/Resources.resx index e852d3f..b6bc2fb 100644 --- a/SecureDNSClient/Properties/Resources.resx +++ b/SecureDNSClient/Properties/Resources.resx @@ -118,6 +118,12 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\Farvahar.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\FarvaharBlueRed.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\SecureDNSClient.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/SecureDNSClient/Resources/Farvahar.png b/SecureDNSClient/Resources/Farvahar.png new file mode 100644 index 0000000000000000000000000000000000000000..7f4b1f54095b8ae34aa3e14e84955d9c3a1a8f14 GIT binary patch literal 257672 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%0D4)(6?H#4s=oCR3mj^W^sm>7x9p7gZC@kOZ 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%0A51aLGl95#kwi1Tp3WSqZ;nECFG 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