From 592ecd9702cc92a1268722c6e15943403326b5a9 Mon Sep 17 00:00:00 2001 From: Student Main Date: Fri, 10 Apr 2020 02:56:31 +0800 Subject: [PATCH 1/5] backport WinINet from shadowsocksrr --- shadowsocks-csharp/Util/SystemProxy/RAS.cs | 92 +++++++++ shadowsocks-csharp/Util/SystemProxy/WinINet.cs | 248 +++++++++++++++++++++++++ 2 files changed, 340 insertions(+) create mode 100644 shadowsocks-csharp/Util/SystemProxy/RAS.cs create mode 100644 shadowsocks-csharp/Util/SystemProxy/WinINet.cs diff --git a/shadowsocks-csharp/Util/SystemProxy/RAS.cs b/shadowsocks-csharp/Util/SystemProxy/RAS.cs new file mode 100644 index 00000000..3dd3ef9a --- /dev/null +++ b/shadowsocks-csharp/Util/SystemProxy/RAS.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; + +namespace Shadowsocks.Util.SystemProxy +{ + + enum RasFieldSizeConst + { + MaxEntryName = 256, + MaxPath = 260, + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + struct RasEntryName + { + public int dwSize; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = RAS.MaxEntryName + 1)] + public string szEntryName; + + public int dwFlags; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = RAS.MaxPath + 1)] + public string szPhonebookPath; + } + class RAS + { + public const int MaxEntryName = 256; + public const int MaxPath = 260; + + const int ESuccess = 0; + const int RasBase = 600; + const int EBufferTooSmall = 603; + + [DllImport("rasapi32.dll", CharSet = CharSet.Auto)] + private static extern uint RasEnumEntries( + // reserved, must be NULL + string reserved, + // pointer to full path and file name of phone-book file + string lpszPhonebook, + // buffer to receive phone-book entries + [In, Out] RasEntryName[] lprasentryname, + // size in bytes of buffer + ref int lpcb, + // number of entries written to buffer + out int lpcEntries + ); + + public static string[] GetAllConnections() + { + int lpNames = 0; + int entryNameSize = 0; + int lpSize = 0; + uint retval = ESuccess; + RasEntryName[] names = null; + + entryNameSize = Marshal.SizeOf(typeof(RasEntryName)); + + // Windows Vista or later: To determine the required buffer size, call RasEnumEntries + // with lprasentryname set to NULL. The variable pointed to by lpcb should be set to zero. + // The function will return the required buffer size in lpcb and an error code of ERROR_BUFFER_TOO_SMALL. + retval = RasEnumEntries(null, null, null, ref lpSize, out lpNames); + if (retval == EBufferTooSmall) + { + names = new RasEntryName[lpNames]; + for (int i = 0; i < names.Length; i++) + { + names[i].dwSize = entryNameSize; + } + + retval = RasEnumEntries(null, null, names, ref lpSize, out lpNames); + } + + if (retval == ESuccess) + { + if (lpNames == 0) + { + // no entries found. + return Array.Empty(); + } + return names.Select(n => n.szEntryName).ToArray(); + } + else + { + throw new Exception(); + } + } + } +} diff --git a/shadowsocks-csharp/Util/SystemProxy/WinINet.cs b/shadowsocks-csharp/Util/SystemProxy/WinINet.cs new file mode 100644 index 00000000..0c8bc700 --- /dev/null +++ b/shadowsocks-csharp/Util/SystemProxy/WinINet.cs @@ -0,0 +1,248 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; + +namespace Shadowsocks.Util.SystemProxy +{ + public enum InternetOptions + { + Refresh = 37, + SettingsChanged = 39, + PerConnectionOption = 75, + ProxySettingChanged = 95, + } + + public enum InternetPerConnectionOptionEnum + { + Flags = 1, + ProxyServer = 2, + ProxyBypass = 3, + AutoConfigUrl = 4, + AutoDiscovery = 5, + AutoConfigSecondaryUrl = 6, + AutoConfigReloadDelay = 7, + AutoConfigLastDetectTime = 8, + AutoConfigLastDetectUrl = 9, + FlagsUI = 10, + } + + [Flags] + public enum InternetPerConnectionFlags + { + Direct = 0x01, + Proxy = 0x02, + AutoProxyUrl = 0x04, + AutoDetect = 0x08, + } + + [StructLayout(LayoutKind.Explicit)] + public struct InternetPerConnectionOptionUnion : IDisposable + { + [FieldOffset(0)] + public int dwValue; + + [FieldOffset(0)] + public IntPtr pszValue; + + [FieldOffset(0)] + public System.Runtime.InteropServices.ComTypes.FILETIME ftValue; + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + private void Dispose(bool disposing) + { + if (disposing) + { + if (pszValue != IntPtr.Zero) + { + Marshal.FreeHGlobal(pszValue); + pszValue = IntPtr.Zero; + } + } + } + } + + + + [StructLayout(LayoutKind.Sequential)] + public struct InternetPerConnectionOption + { + public int dwOption; + public InternetPerConnectionOptionUnion Value; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + public struct InternetPerConnectionOptionList : IDisposable + { + public int Size; + + // The connection to be set. NULL means LAN. + public IntPtr Connection; + + public int OptionCount; + public int OptionError; + + // List of INTERNET_PER_CONN_OPTIONs. + public System.IntPtr pOptions; + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + private void Dispose(bool disposing) + { + if (disposing) + { + if (Connection != IntPtr.Zero) + { + Marshal.FreeHGlobal(Connection); + Connection = IntPtr.Zero; + } + + if (pOptions != IntPtr.Zero) + { + Marshal.FreeHGlobal(pOptions); + pOptions = IntPtr.Zero; + } + } + } + } + + public class WinINet + { + // TODO: Save, Restore, + // TODO: Query, Set, + + public static void ProxyGlobal(string server, string bypass) + { + List options = new List + { + GetOption(InternetPerConnectionOptionEnum.FlagsUI,InternetPerConnectionFlags.Proxy), + GetOption(InternetPerConnectionOptionEnum.ProxyServer,server), + GetOption(InternetPerConnectionOptionEnum.ProxyBypass,bypass), + }; + Exec(options); + } + public static void ProxyPAC(string url) + { + List options = new List + { + GetOption(InternetPerConnectionOptionEnum.FlagsUI,InternetPerConnectionFlags.AutoProxyUrl), + GetOption(InternetPerConnectionOptionEnum.ProxyServer,url), + }; + Exec(options); + } + public static void Direct() + { + List options = new List + { + GetOption(InternetPerConnectionOptionEnum.FlagsUI,InternetPerConnectionFlags.Direct), + }; + Exec(options); + } + + private static InternetPerConnectionOption GetOption( + InternetPerConnectionOptionEnum option, + InternetPerConnectionFlags flag + ) + { + return new InternetPerConnectionOption + { + dwOption = (int)option, + Value = + { + dwValue = (int)flag, + } + }; + } + + private static InternetPerConnectionOption GetOption( + InternetPerConnectionOptionEnum option, + string param + ) + { + return new InternetPerConnectionOption + { + dwOption = (int)option, + Value = + { + pszValue = Marshal.StringToCoTaskMemAuto(param), + } + }; + } + + private static void Exec(List options) + { + Exec(options, null); + foreach (var conn in RAS.GetAllConnections()) + { + Exec(options, conn); + } + } + + private static void Exec(List options, string connName) + { + int len = options.Sum(o => Marshal.SizeOf(o)); + + IntPtr buf = Marshal.AllocCoTaskMem(len); + IntPtr cur = buf; + + foreach (var o in options) + { + Marshal.StructureToPtr(o, cur, false); + cur += Marshal.SizeOf(o); + } + InternetPerConnectionOptionList optionList = new InternetPerConnectionOptionList + { + pOptions = buf, + Connection = string.IsNullOrEmpty(connName) + ? IntPtr.Zero + : Marshal.StringToHGlobalAuto(connName), + OptionCount = options.Count, + OptionError = 0, + }; + int listSize = Marshal.SizeOf(optionList); + optionList.Size = listSize; + + IntPtr unmanagedList = Marshal.AllocCoTaskMem(listSize); + Marshal.StructureToPtr(optionList, unmanagedList, true); + + bool ok = InternetSetOption( + IntPtr.Zero, + (int)InternetOptions.PerConnectionOption, + unmanagedList, + listSize + ); + + Marshal.FreeCoTaskMem(buf); + Marshal.FreeCoTaskMem(unmanagedList); + + if (!ok) throw new Exception(); + ok = InternetSetOption( + IntPtr.Zero, + (int)InternetOptions.ProxySettingChanged, + IntPtr.Zero, + 0 + ); + if (!ok) throw new Exception(); + ok = InternetSetOption( + IntPtr.Zero, + (int)InternetOptions.Refresh, + IntPtr.Zero, + 0 + ); + if (!ok) throw new Exception(); + + } + + [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength); + } + +} From 2efbcc08e5dee932c11345d408c459fedd6a40ee Mon Sep 17 00:00:00 2001 From: Student Main Date: Fri, 10 Apr 2020 14:46:25 +0800 Subject: [PATCH 2/5] Migrate to WinINet --- .../Controller/System/SystemProxy.cs | 8 +- shadowsocks-csharp/Util/SystemProxy/WinINet.cs | 201 ++++++++++++++++++--- 2 files changed, 182 insertions(+), 27 deletions(-) diff --git a/shadowsocks-csharp/Controller/System/SystemProxy.cs b/shadowsocks-csharp/Controller/System/SystemProxy.cs index 1d61dd86..025781b7 100644 --- a/shadowsocks-csharp/Controller/System/SystemProxy.cs +++ b/shadowsocks-csharp/Controller/System/SystemProxy.cs @@ -31,7 +31,7 @@ namespace Shadowsocks.Controller { if (global) { - Sysproxy.SetIEProxy(true, true, "localhost:" + config.localPort.ToString(), null); + WinINet.ProxyGlobal("localhost:" + config.localPort.ToString(), ""); } else { @@ -45,12 +45,12 @@ namespace Shadowsocks.Controller pacUrl = pacSrv.PacUrl; } - Sysproxy.SetIEProxy(true, false, null, pacUrl); + WinINet.ProxyPAC(pacUrl); } } else { - Sysproxy.SetIEProxy(false, false, null, null); + WinINet.Restore(); } } catch (ProxyException ex) @@ -61,7 +61,7 @@ namespace Shadowsocks.Controller var ret = MessageBox.Show(I18N.GetString("Error occured when process proxy setting, do you want reset current setting and retry?"), I18N.GetString("Shadowsocks"), MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (ret == DialogResult.Yes) { - Sysproxy.ResetIEProxy(); + WinINet.Reset(); Update(config, forceDisable, pacSrv, true); } } diff --git a/shadowsocks-csharp/Util/SystemProxy/WinINet.cs b/shadowsocks-csharp/Util/SystemProxy/WinINet.cs index 0c8bc700..d33d3b5a 100644 --- a/shadowsocks-csharp/Util/SystemProxy/WinINet.cs +++ b/shadowsocks-csharp/Util/SystemProxy/WinINet.cs @@ -1,5 +1,9 @@ -using System; +using Newtonsoft.Json; +using Shadowsocks.Model; +using System; using System.Collections.Generic; +using System.ComponentModel; +using System.IO; using System.Linq; using System.Runtime.InteropServices; @@ -114,16 +118,29 @@ namespace Shadowsocks.Util.SystemProxy } } + public class WinINetSetting + { + public InternetPerConnectionFlags Flags = InternetPerConnectionFlags.Direct; + public string ProxyServer; + public string ProxyBypass; + public string AutoConfigUrl; + } + public class WinINet { - // TODO: Save, Restore, - // TODO: Query, Set, + private const string SettingFile = "wininet-setting.json"; + private static WinINetSetting initialSetting; + + static WinINet() + { + Load(); + } public static void ProxyGlobal(string server, string bypass) { List options = new List { - GetOption(InternetPerConnectionOptionEnum.FlagsUI,InternetPerConnectionFlags.Proxy), + GetOption(InternetPerConnectionOptionEnum.Flags,InternetPerConnectionFlags.Proxy|InternetPerConnectionFlags.Direct), GetOption(InternetPerConnectionOptionEnum.ProxyServer,server), GetOption(InternetPerConnectionOptionEnum.ProxyBypass,bypass), }; @@ -133,8 +150,8 @@ namespace Shadowsocks.Util.SystemProxy { List options = new List { - GetOption(InternetPerConnectionOptionEnum.FlagsUI,InternetPerConnectionFlags.AutoProxyUrl), - GetOption(InternetPerConnectionOptionEnum.ProxyServer,url), + GetOption(InternetPerConnectionOptionEnum.Flags,InternetPerConnectionFlags.AutoProxyUrl|InternetPerConnectionFlags.Direct), + GetOption(InternetPerConnectionOptionEnum.AutoConfigUrl,url), }; Exec(options); } @@ -142,10 +159,124 @@ namespace Shadowsocks.Util.SystemProxy { List options = new List { - GetOption(InternetPerConnectionOptionEnum.FlagsUI,InternetPerConnectionFlags.Direct), + GetOption(InternetPerConnectionOptionEnum.Flags,InternetPerConnectionFlags.Direct), + }; + Exec(options); + } + + private static void Load() + { + try + { + string configContent = File.ReadAllText(Utils.GetTempPath(SettingFile)); + initialSetting = JsonConvert.DeserializeObject(configContent); + } + catch (Exception) + { + // Suppress all exceptions. finally block will initialize new user config settings. + } + finally + { + initialSetting ??= new WinINetSetting(); + } + } + private static void Save() + { + try + { + using (StreamWriter sw = new StreamWriter(File.Open(Utils.GetTempPath(SettingFile), FileMode.Create))) + { + string jsonString = JsonConvert.SerializeObject(initialSetting, Formatting.Indented); + sw.Write(jsonString); + sw.Flush(); + } + } + catch (IOException e) + { + // logger.LogUsefulException(e); + } + } + private static void Record() + { + initialSetting ??= Query(); + } + public static void Restore() + { + Set(initialSetting); + } + + public static void Set(WinINetSetting setting) + { + List options = new List + { + GetOption(InternetPerConnectionOptionEnum.Flags,setting.Flags), + GetOption(InternetPerConnectionOptionEnum.ProxyServer,setting.ProxyServer), + GetOption(InternetPerConnectionOptionEnum.ProxyBypass,setting.ProxyBypass), + GetOption(InternetPerConnectionOptionEnum.AutoConfigUrl,setting.AutoConfigUrl), }; Exec(options); } + public static void Reset() + { + Set(new WinINetSetting + { + Flags = InternetPerConnectionFlags.Direct, + ProxyServer = "", + ProxyBypass = "", + AutoConfigUrl = "", + }); + } + + public static WinINetSetting Query() + { + List options = new List + { + new InternetPerConnectionOption{dwOption = (int)InternetPerConnectionOptionEnum.FlagsUI}, + new InternetPerConnectionOption{dwOption = (int)InternetPerConnectionOptionEnum.ProxyServer}, + new InternetPerConnectionOption{dwOption = (int)InternetPerConnectionOptionEnum.ProxyBypass}, + new InternetPerConnectionOption{dwOption = (int)InternetPerConnectionOptionEnum.AutoConfigUrl}, + }; + + var (unmanagedList, listSize) = PrepareOptionList(options, null); + bool ok = InternetQueryOption(IntPtr.Zero, (int)InternetOptions.PerConnectionOption, unmanagedList, ref listSize); + if (!ok) throw new Exception(); + + var proxy = new WinINetSetting(); + + InternetPerConnectionOptionList ret = Marshal.PtrToStructure(unmanagedList); + IntPtr p = ret.pOptions; + int nOption = ret.OptionCount; + List outOptions = new List(); + for (int i = 0; i < nOption; i++) + { + var o = Marshal.PtrToStructure(p); + outOptions.Add(o); + p += Marshal.SizeOf(o); + } + + foreach (var o in outOptions) + { + switch ((InternetPerConnectionOptionEnum)o.dwOption) + { + case InternetPerConnectionOptionEnum.FlagsUI: + case InternetPerConnectionOptionEnum.Flags: + proxy.Flags = (InternetPerConnectionFlags)o.Value.dwValue; + break; + case InternetPerConnectionOptionEnum.AutoConfigUrl: + proxy.AutoConfigUrl = Marshal.PtrToStringAuto(o.Value.pszValue); + break; + case InternetPerConnectionOptionEnum.ProxyBypass: + proxy.ProxyBypass = Marshal.PtrToStringAuto(o.Value.pszValue); + break; + case InternetPerConnectionOptionEnum.ProxyServer: + proxy.ProxyServer = Marshal.PtrToStringAuto(o.Value.pszValue); + break; + default: + break; + } + } + return proxy; + } private static InternetPerConnectionOption GetOption( InternetPerConnectionOptionEnum option, @@ -177,16 +308,7 @@ namespace Shadowsocks.Util.SystemProxy }; } - private static void Exec(List options) - { - Exec(options, null); - foreach (var conn in RAS.GetAllConnections()) - { - Exec(options, conn); - } - } - - private static void Exec(List options, string connName) + private static (IntPtr, int) PrepareOptionList(List options, string connName) { int len = options.Sum(o => Marshal.SizeOf(o)); @@ -201,10 +323,10 @@ namespace Shadowsocks.Util.SystemProxy InternetPerConnectionOptionList optionList = new InternetPerConnectionOptionList { pOptions = buf, + OptionCount = options.Count, Connection = string.IsNullOrEmpty(connName) ? IntPtr.Zero : Marshal.StringToHGlobalAuto(connName), - OptionCount = options.Count, OptionError = 0, }; int listSize = Marshal.SizeOf(optionList); @@ -212,6 +334,34 @@ namespace Shadowsocks.Util.SystemProxy IntPtr unmanagedList = Marshal.AllocCoTaskMem(listSize); Marshal.StructureToPtr(optionList, unmanagedList, true); + return (unmanagedList, listSize); + } + + private static void ClearOptionList(IntPtr list) + { + InternetPerConnectionOptionList l = Marshal.PtrToStructure(list); + Marshal.FreeCoTaskMem(l.pOptions); + Marshal.FreeCoTaskMem(list); + } + + private static void Exec(List options) + { + // TODO: optimize load and save + Load(); + Record(); + + Exec(options, null); + foreach (var conn in RAS.GetAllConnections()) + { + Exec(options, conn); + } + + Save(); + } + + private static void Exec(List options, string connName) + { + var (unmanagedList, listSize) = PrepareOptionList(options, connName); bool ok = InternetSetOption( IntPtr.Zero, @@ -220,10 +370,12 @@ namespace Shadowsocks.Util.SystemProxy listSize ); - Marshal.FreeCoTaskMem(buf); - Marshal.FreeCoTaskMem(unmanagedList); - - if (!ok) throw new Exception(); + if (!ok) + { + int errno = Marshal.GetLastWin32Error(); + throw new Win32Exception(errno); + } + ClearOptionList(unmanagedList); ok = InternetSetOption( IntPtr.Zero, (int)InternetOptions.ProxySettingChanged, @@ -243,6 +395,9 @@ namespace Shadowsocks.Util.SystemProxy [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength); - } + [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] + static extern bool InternetQueryOption(IntPtr hInternet, uint dwOption, IntPtr lpBuffer, ref int lpdwBufferLength); + + } } From 12f163553fe71ee3822568c2aa22515e68f5a316 Mon Sep 17 00:00:00 2001 From: Student Main Date: Fri, 10 Apr 2020 14:51:43 +0800 Subject: [PATCH 3/5] drop Sysproxy --- shadowsocks-csharp/Data/sysproxy.exe.gz | Bin 56029 -> 0 bytes shadowsocks-csharp/Data/sysproxy64.exe.gz | Bin 61784 -> 0 bytes shadowsocks-csharp/Properties/Resources.resx | 6 - shadowsocks-csharp/Util/SystemProxy/Sysproxy.cs | 291 ------------------------ shadowsocks-csharp/shadowsocks-csharp.csproj | 4 - 5 files changed, 301 deletions(-) delete mode 100644 shadowsocks-csharp/Data/sysproxy.exe.gz delete mode 100644 shadowsocks-csharp/Data/sysproxy64.exe.gz delete mode 100644 shadowsocks-csharp/Util/SystemProxy/Sysproxy.cs diff --git a/shadowsocks-csharp/Data/sysproxy.exe.gz b/shadowsocks-csharp/Data/sysproxy.exe.gz deleted file mode 100644 index 980d304b0cba3417b89e1f1ef9abbfbb7e3b05a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 KcmV+b0RR6000031 literal 56029 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 diff --git a/shadowsocks-csharp/Data/sysproxy64.exe.gz b/shadowsocks-csharp/Data/sysproxy64.exe.gz deleted file mode 100644 index c5ff36af391832b09710ea138375632cc984dd32..0000000000000000000000000000000000000000 GIT binary patch literal 0 KcmV+b0RR6000031 literal 61784 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 Xw)%hkbH{u3J1JKH(g6Sg00960$c{NL diff --git a/shadowsocks-csharp/Properties/Resources.resx b/shadowsocks-csharp/Properties/Resources.resx index 253c66c0..847eb7a7 100755 --- a/shadowsocks-csharp/Properties/Resources.resx +++ b/shadowsocks-csharp/Properties/Resources.resx @@ -151,12 +151,6 @@ ..\Resources\ssw128.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Data\sysproxy64.exe.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\Data\sysproxy.exe.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - ..\data\user-rule.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 diff --git a/shadowsocks-csharp/Util/SystemProxy/Sysproxy.cs b/shadowsocks-csharp/Util/SystemProxy/Sysproxy.cs deleted file mode 100644 index b1ffcac4..00000000 --- a/shadowsocks-csharp/Util/SystemProxy/Sysproxy.cs +++ /dev/null @@ -1,291 +0,0 @@ -using Newtonsoft.Json; -using NLog; -using Shadowsocks.Controller; -using Shadowsocks.Model; -using Shadowsocks.Properties; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading; - -namespace Shadowsocks.Util.SystemProxy -{ - public static class Sysproxy - { - private static Logger logger = LogManager.GetCurrentClassLogger(); - - private const string _userWininetConfigFile = "user-wininet.json"; - - private readonly static string[] _lanIP = { - "", - "localhost", - "127.*", - "10.*", - "172.16.*", - "172.17.*", - "172.18.*", - "172.19.*", - "172.20.*", - "172.21.*", - "172.22.*", - "172.23.*", - "172.24.*", - "172.25.*", - "172.26.*", - "172.27.*", - "172.28.*", - "172.29.*", - "172.30.*", - "172.31.*", - "192.168.*" - }; - - - private static string _queryStr; - - // In general, this won't change - // format: - // - // - // - // - private static SysproxyConfig _userSettings = null; - - enum RET_ERRORS : int - { - RET_NO_ERROR = 0, - INVALID_FORMAT = 1, - NO_PERMISSION = 2, - SYSCALL_FAILED = 3, - NO_MEMORY = 4, - INVAILD_OPTION_COUNT = 5, - }; - - static Sysproxy() - { - try - { - FileManager.UncompressFile(Utils.GetTempPath("sysproxy.exe"), - Environment.Is64BitOperatingSystem ? Resources.sysproxy64_exe : Resources.sysproxy_exe); - } - catch (IOException e) - { - logger.LogUsefulException(e); - } - } - - public static void SetIEProxy(bool enable, bool global, string proxyServer, string pacURL) - { - Read(); - - if (!_userSettings.UserSettingsRecorded) - { - // record user settings - ExecSysproxy("query"); - ParseQueryStr(_queryStr); - } - - string arguments; - if (enable) - { - string customBypassString = _userSettings.BypassList ?? ""; - List customBypassList = new List(customBypassString.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)); - customBypassList.AddRange(_lanIP); - string[] realBypassList = customBypassList.Distinct().ToArray(); - string realBypassString = string.Join(";", realBypassList); - - arguments = global - ? $"global {proxyServer} {realBypassString}" - : $"pac {pacURL}"; - } - else - { - // restore user settings - var flags = _userSettings.Flags; - var proxy_server = _userSettings.ProxyServer ?? "-"; - var bypass_list = _userSettings.BypassList ?? "-"; - var pac_url = _userSettings.PacUrl ?? "-"; - arguments = $"set {flags} {proxy_server} {bypass_list} {pac_url}"; - - // have to get new settings - _userSettings.UserSettingsRecorded = false; - } - - Save(); - ExecSysproxy(arguments); - } - - // set system proxy to 1 (null) (null) (null) - public static bool ResetIEProxy() - { - try - { - // clear user-wininet.json - _userSettings = new SysproxyConfig(); - Save(); - // clear system setting - ExecSysproxy("set 1 - - -"); - } - catch (Exception) - { - return false; - } - - return true; - } - - private static void ExecSysproxy(string arguments) - { - // using event to avoid hanging when redirect standard output/error - // ref: https://stackoverflow.com/questions/139593/processstartinfo-hanging-on-waitforexit-why - // and http://blog.csdn.net/zhangweixing0/article/details/7356841 - using (AutoResetEvent outputWaitHandle = new AutoResetEvent(false)) - using (AutoResetEvent errorWaitHandle = new AutoResetEvent(false)) - { - using (var process = new Process()) - { - // Configure the process using the StartInfo properties. - process.StartInfo.FileName = Utils.GetTempPath("sysproxy.exe"); - process.StartInfo.Arguments = arguments; - process.StartInfo.WorkingDirectory = Utils.GetTempPath(); - process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardError = true; - process.StartInfo.RedirectStandardOutput = true; - - // Need to provide encoding info, or output/error strings we got will be wrong. - process.StartInfo.StandardOutputEncoding = Encoding.Unicode; - process.StartInfo.StandardErrorEncoding = Encoding.Unicode; - - process.StartInfo.CreateNoWindow = true; - - StringBuilder output = new StringBuilder(); - StringBuilder error = new StringBuilder(); - - process.OutputDataReceived += (sender, e) => - { - if (e.Data == null) - { - outputWaitHandle.Set(); - } - else - { - output.AppendLine(e.Data); - } - }; - process.ErrorDataReceived += (sender, e) => - { - if (e.Data == null) - { - errorWaitHandle.Set(); - } - else - { - error.AppendLine(e.Data); - } - }; - try - { - process.Start(); - - process.BeginErrorReadLine(); - process.BeginOutputReadLine(); - - process.WaitForExit(); - } - catch (System.ComponentModel.Win32Exception e) - { - // log the arguments - throw new ProxyException(ProxyExceptionType.FailToRun, process.StartInfo.Arguments, e); - } - var stderr = error.ToString(); - var stdout = output.ToString(); - - var exitCode = process.ExitCode; - if (exitCode != (int)RET_ERRORS.RET_NO_ERROR) - { - throw new ProxyException(ProxyExceptionType.SysproxyExitError, stderr); - } - - if (arguments == "query") - { - if (stdout.IsNullOrWhiteSpace() || stdout.IsNullOrEmpty()) - { - // we cannot get user settings - throw new ProxyException(ProxyExceptionType.QueryReturnEmpty); - } - _queryStr = stdout; - } - } - } - } - - private static void Save() - { - try - { - using (StreamWriter sw = new StreamWriter(File.Open(Utils.GetTempPath(_userWininetConfigFile), FileMode.Create))) - { - string jsonString = JsonConvert.SerializeObject(_userSettings, Formatting.Indented); - sw.Write(jsonString); - sw.Flush(); - } - } - catch (IOException e) - { - logger.LogUsefulException(e); - } - } - - private static void Read() - { - try - { - string configContent = File.ReadAllText(Utils.GetTempPath(_userWininetConfigFile)); - _userSettings = JsonConvert.DeserializeObject(configContent); - } - catch (Exception) - { - // Suppress all exceptions. finally block will initialize new user config settings. - } - finally - { - if (_userSettings == null) _userSettings = new SysproxyConfig(); - } - } - - private static void ParseQueryStr(string str) - { - string[] userSettingsArr = str.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); - - // sometimes sysproxy output in utf16le instead of ascii - // manually translate it - if (userSettingsArr.Length != 4) - { - byte[] strByte = Encoding.ASCII.GetBytes(str); - str = Encoding.Unicode.GetString(strByte); - userSettingsArr = str.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); - // still fail, throw exception with string hexdump - if (userSettingsArr.Length != 4) - { - throw new ProxyException(ProxyExceptionType.QueryReturnMalformed, BitConverter.ToString(strByte)); - } - } - - _userSettings.Flags = userSettingsArr[0]; - - // handle output from WinINET - if (userSettingsArr[1] == "(null)") _userSettings.ProxyServer = null; - else _userSettings.ProxyServer = userSettingsArr[1]; - if (userSettingsArr[2] == "(null)") _userSettings.BypassList = null; - else _userSettings.BypassList = userSettingsArr[2]; - if (userSettingsArr[3] == "(null)") _userSettings.PacUrl = null; - else _userSettings.PacUrl = userSettingsArr[3]; - - _userSettings.UserSettingsRecorded = true; - } - } -} diff --git a/shadowsocks-csharp/shadowsocks-csharp.csproj b/shadowsocks-csharp/shadowsocks-csharp.csproj index 700ed4f9..b437a7d6 100644 --- a/shadowsocks-csharp/shadowsocks-csharp.csproj +++ b/shadowsocks-csharp/shadowsocks-csharp.csproj @@ -29,8 +29,6 @@ - - @@ -92,8 +90,6 @@ - - From fc2285b0c62e00d68ca618c494a4232018ecf408 Mon Sep 17 00:00:00 2001 From: Student Main Date: Fri, 10 Apr 2020 23:14:47 +0800 Subject: [PATCH 4/5] platform and required service check for wininet --- shadowsocks-csharp/Util/SystemProxy/WinINet.cs | 78 ++++++++++++++++++++------ 1 file changed, 61 insertions(+), 17 deletions(-) diff --git a/shadowsocks-csharp/Util/SystemProxy/WinINet.cs b/shadowsocks-csharp/Util/SystemProxy/WinINet.cs index d33d3b5a..9814fadd 100644 --- a/shadowsocks-csharp/Util/SystemProxy/WinINet.cs +++ b/shadowsocks-csharp/Util/SystemProxy/WinINet.cs @@ -1,5 +1,5 @@ using Newtonsoft.Json; -using Shadowsocks.Model; +using NLog; using System; using System.Collections.Generic; using System.ComponentModel; @@ -92,7 +92,7 @@ namespace Shadowsocks.Util.SystemProxy public int OptionError; // List of INTERNET_PER_CONN_OPTIONs. - public System.IntPtr pOptions; + public IntPtr pOptions; public void Dispose() { @@ -128,11 +128,37 @@ namespace Shadowsocks.Util.SystemProxy public class WinINet { + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); + private const string SettingFile = "wininet-setting.json"; private static WinINetSetting initialSetting; + public static bool operational { get; private set; } = true; static WinINet() { + try + { + Query(); + } + catch (DllNotFoundException) + { + operational = false; + // Not on windows + logger.Info("You are not running on Windows platform, system proxy will disable"); + } + catch (Win32Exception we) + { + if (we.NativeErrorCode == 12178) + { + logger.Warn("WPAD service is not running, system proxy will disable"); + // WPAD not running + } + else + { + throw we; + } + } + Load(); } @@ -191,7 +217,7 @@ namespace Shadowsocks.Util.SystemProxy sw.Flush(); } } - catch (IOException e) + catch (IOException) { // logger.LogUsefulException(e); } @@ -229,6 +255,11 @@ namespace Shadowsocks.Util.SystemProxy public static WinINetSetting Query() { + if (!operational) + { + return new WinINetSetting(); + } + List options = new List { new InternetPerConnectionOption{dwOption = (int)InternetPerConnectionOptionEnum.FlagsUI}, @@ -237,11 +268,14 @@ namespace Shadowsocks.Util.SystemProxy new InternetPerConnectionOption{dwOption = (int)InternetPerConnectionOptionEnum.AutoConfigUrl}, }; - var (unmanagedList, listSize) = PrepareOptionList(options, null); + (IntPtr unmanagedList, int listSize) = PrepareOptionList(options, null); bool ok = InternetQueryOption(IntPtr.Zero, (int)InternetOptions.PerConnectionOption, unmanagedList, ref listSize); - if (!ok) throw new Exception(); + if (!ok) + { + throw new Win32Exception(Marshal.GetLastWin32Error()); + } - var proxy = new WinINetSetting(); + WinINetSetting proxy = new WinINetSetting(); InternetPerConnectionOptionList ret = Marshal.PtrToStructure(unmanagedList); IntPtr p = ret.pOptions; @@ -249,12 +283,12 @@ namespace Shadowsocks.Util.SystemProxy List outOptions = new List(); for (int i = 0; i < nOption; i++) { - var o = Marshal.PtrToStructure(p); + InternetPerConnectionOption o = Marshal.PtrToStructure(p); outOptions.Add(o); p += Marshal.SizeOf(o); } - foreach (var o in outOptions) + foreach (InternetPerConnectionOption o in outOptions) { switch ((InternetPerConnectionOptionEnum)o.dwOption) { @@ -315,7 +349,7 @@ namespace Shadowsocks.Util.SystemProxy IntPtr buf = Marshal.AllocCoTaskMem(len); IntPtr cur = buf; - foreach (var o in options) + foreach (InternetPerConnectionOption o in options) { Marshal.StructureToPtr(o, cur, false); cur += Marshal.SizeOf(o); @@ -351,7 +385,7 @@ namespace Shadowsocks.Util.SystemProxy Record(); Exec(options, null); - foreach (var conn in RAS.GetAllConnections()) + foreach (string conn in RAS.GetAllConnections()) { Exec(options, conn); } @@ -361,7 +395,12 @@ namespace Shadowsocks.Util.SystemProxy private static void Exec(List options, string connName) { - var (unmanagedList, listSize) = PrepareOptionList(options, connName); + if (!operational) + { + return; + } + + (IntPtr unmanagedList, int listSize) = PrepareOptionList(options, connName); bool ok = InternetSetOption( IntPtr.Zero, @@ -372,8 +411,7 @@ namespace Shadowsocks.Util.SystemProxy if (!ok) { - int errno = Marshal.GetLastWin32Error(); - throw new Win32Exception(errno); + throw new Win32Exception(Marshal.GetLastWin32Error()); } ClearOptionList(unmanagedList); ok = InternetSetOption( @@ -382,22 +420,28 @@ namespace Shadowsocks.Util.SystemProxy IntPtr.Zero, 0 ); - if (!ok) throw new Exception(); + if (!ok) + { + throw new Win32Exception(Marshal.GetLastWin32Error()); + } + ok = InternetSetOption( IntPtr.Zero, (int)InternetOptions.Refresh, IntPtr.Zero, 0 ); - if (!ok) throw new Exception(); - + if (!ok) + { + throw new Win32Exception(Marshal.GetLastWin32Error()); + } } [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength); [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] - static extern bool InternetQueryOption(IntPtr hInternet, uint dwOption, IntPtr lpBuffer, ref int lpdwBufferLength); + private static extern bool InternetQueryOption(IntPtr hInternet, uint dwOption, IntPtr lpBuffer, ref int lpdwBufferLength); } } From f4d052169b41350674bdf41c32428b84bcd5563a Mon Sep 17 00:00:00 2001 From: Student Main Date: Fri, 10 Apr 2020 23:26:17 +0800 Subject: [PATCH 5/5] toggle menu item Enable by WinINet state --- shadowsocks-csharp/Controller/System/SystemProxy.cs | 7 +------ shadowsocks-csharp/View/MenuViewController.cs | 9 +++++++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/shadowsocks-csharp/Controller/System/SystemProxy.cs b/shadowsocks-csharp/Controller/System/SystemProxy.cs index 025781b7..56137e44 100644 --- a/shadowsocks-csharp/Controller/System/SystemProxy.cs +++ b/shadowsocks-csharp/Controller/System/SystemProxy.cs @@ -10,17 +10,12 @@ namespace Shadowsocks.Controller { private static Logger logger = LogManager.GetCurrentClassLogger(); - private static string GetTimestamp(DateTime value) - { - return value.ToString("yyyyMMddHHmmssfff"); - } - public static void Update(Configuration config, bool forceDisable, PACServer pacSrv, bool noRetry = false) { bool global = config.global; bool enabled = config.enabled; - if (forceDisable) + if (forceDisable || WinINet.operational) { enabled = false; } diff --git a/shadowsocks-csharp/View/MenuViewController.cs b/shadowsocks-csharp/View/MenuViewController.cs index 30199ef0..bf38caf0 100644 --- a/shadowsocks-csharp/View/MenuViewController.cs +++ b/shadowsocks-csharp/View/MenuViewController.cs @@ -3,6 +3,7 @@ using Shadowsocks.Controller; using Shadowsocks.Model; using Shadowsocks.Properties; using Shadowsocks.Util; +using Shadowsocks.Util.SystemProxy; using System; using System.Diagnostics; using System.Drawing; @@ -38,7 +39,7 @@ namespace Shadowsocks.View private ToolStripMenuItem disableItem; private ToolStripMenuItem AutoStartupItem; private ToolStripMenuItem ShareOverLANItem; - private ToolStripSeparator SeperatorItem; + private ToolStripSeparator SeperatorItem; private ToolStripMenuItem ConfigItem; private ToolStripMenuItem ServersItem; private ToolStripMenuItem globalModeItem; @@ -504,7 +505,8 @@ namespace Shadowsocks.View ) { menuItem.Checked = true; - } else + } + else { menuItem.Checked = false; } @@ -668,6 +670,9 @@ namespace Shadowsocks.View globalModeItem.Checked = config.global; PACModeItem.Checked = !config.global; } + + globalModeItem.Enabled = WinINet.operational; + PACModeItem.Enabled = WinINet.operational; } private void GlobalModeItem_Click(object sender, EventArgs e)