Cleanup code

This commit is contained in:
Bruce Wayne
2020-01-23 20:44:17 +08:00
parent c5e46844da
commit 087f6e4eb9
33 changed files with 294 additions and 407 deletions

View File

@@ -1,5 +1,5 @@
using Microsoft.Win32;
using System;
using System;
using Microsoft.Win32;
namespace Netch.Controllers
{
@@ -22,14 +22,12 @@ namespace Netch.Controllers
{
if (server.Type == "Socks5")
{
if (!String.IsNullOrWhiteSpace(server.Username) && !String.IsNullOrWhiteSpace(server.Password))
if (!string.IsNullOrWhiteSpace(server.Username) && !string.IsNullOrWhiteSpace(server.Password))
{
return false;
}
else
{
pPrivoxyController.Start(server, mode);
}
pPrivoxyController.Start(server, mode);
}
else
{

View File

@@ -9,7 +9,7 @@ namespace Netch.Controllers
public static Process GetProcess()
{
var process = new Process();
process.StartInfo.WorkingDirectory = String.Format("{0}\\bin", Directory.GetCurrentDirectory());
process.StartInfo.WorkingDirectory = string.Format("{0}\\bin", Directory.GetCurrentDirectory());
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardInput = true;
@@ -23,33 +23,33 @@ namespace Netch.Controllers
/// <summary>
/// SS 控制器
/// </summary>
public SSController pSSController = null;
public SSController pSSController;
/// <summary>
/// SSR 控制器
/// </summary>
public SSRController pSSRController = null;
public SSRController pSSRController;
/// <summary>
/// V2Ray 控制器
/// </summary>
public VMessController pVMessController = null;
public VMessController pVMessController;
/// <summary>
/// NF 控制器
/// </summary>
public NFController pNFController = null;
public NFController pNFController;
/// <summary>
/// HTTP 控制器
/// </summary>
public HTTPController pHTTPController = null;
public HTTPController pHTTPController;
/// <summary>
/// TUN/TAP 控制器
/// </summary>
public TUNTAPController pTUNTAPController = null;
public TUNTAPController pTUNTAPController;
/// <summary>
/// 启动
@@ -96,8 +96,6 @@ namespace Netch.Controllers
}
result = pVMessController.Start(server, mode);
break;
default:
break;
}
if (result)
@@ -189,9 +187,9 @@ namespace Netch.Controllers
}
public void KillProcess(String name) {
Process[] processes = Process.GetProcessesByName(name);
foreach (Process p in processes)
public void KillProcess(string name) {
var processes = Process.GetProcessesByName(name);
foreach (var p in processes)
{
if (IsChildProcess(p, name))
{
@@ -205,8 +203,8 @@ namespace Netch.Controllers
bool result;
try
{
string FileName = (Directory.GetCurrentDirectory() + "\\bin\\" + name + ".exe").ToLower();
string procFileName = process.MainModule.FileName.ToLower();
var FileName = (Directory.GetCurrentDirectory() + "\\bin\\" + name + ".exe").ToLower();
var procFileName = process.MainModule.FileName.ToLower();
result = FileName.Equals(procFileName, StringComparison.Ordinal);
}
catch (Exception e)

View File

@@ -19,7 +19,7 @@ namespace Netch.Controllers
/// </summary>
/// <param name="upload">上传</param>
/// <param name="download">下载</param>
public delegate void BandwidthUpdateHandler(long upload, Int64 download);
public delegate void BandwidthUpdateHandler(long upload, long download);
/// <summary>
/// 进程实例
@@ -45,7 +45,7 @@ namespace Netch.Controllers
}
// 生成驱动文件路径
var driver = String.Format("{0}\\drivers\\netfilter2.sys", Environment.SystemDirectory);
var driver = string.Format("{0}\\drivers\\netfilter2.sys", Environment.SystemDirectory);
// 检查驱动是否存在
if (!File.Exists(driver))
@@ -139,9 +139,9 @@ namespace Netch.Controllers
return false;
}
fallback = $"-r {result.ToString()}:{server.Port} -p \"{processes}\"";
fallback = $"-r {result}:{server.Port} -p \"{processes}\"";
if (!String.IsNullOrWhiteSpace(server.Username) && !String.IsNullOrWhiteSpace(server.Password))
if (!string.IsNullOrWhiteSpace(server.Username) && !string.IsNullOrWhiteSpace(server.Password))
{
fallback += $" -username \"{server.Username}\" -password \"{server.Password}\"";
}
@@ -156,7 +156,7 @@ namespace Netch.Controllers
Instance.BeginErrorReadLine();
var IsFallback = false;
for (int i = 0; i < 1000; i++)
for (var i = 0; i < 1000; i++)
{
Thread.Sleep(10);
@@ -219,9 +219,9 @@ namespace Netch.Controllers
public void OnOutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (!String.IsNullOrWhiteSpace(e.Data))
if (!string.IsNullOrWhiteSpace(e.Data))
{
File.AppendAllText("logging\\redirector.log", String.Format("{0}\r\n", e.Data));
File.AppendAllText("logging\\redirector.log", string.Format("{0}\r\n", e.Data));
if (State == Models.State.Starting)
{
@@ -250,7 +250,7 @@ namespace Netch.Controllers
if (uploadSplited.Length == 2 && downloadSplited.Length == 2)
{
if (long.TryParse(uploadSplited[1], out long upload) && long.TryParse(downloadSplited[1], out long download))
if (long.TryParse(uploadSplited[1], out var upload) && long.TryParse(downloadSplited[1], out var download))
{
Task.Run(() => OnBandwidthUpdated(upload, download));
}

View File

@@ -46,13 +46,13 @@ namespace Netch.Controllers
}
Instance = new Process()
Instance = new Process
{
StartInfo =
{
FileName = String.Format("{0}\\bin\\Privoxy.exe", Directory.GetCurrentDirectory()),
FileName = string.Format("{0}\\bin\\Privoxy.exe", Directory.GetCurrentDirectory()),
Arguments = "..\\data\\privoxy.conf",
WorkingDirectory = String.Format("{0}\\bin", Directory.GetCurrentDirectory()),
WorkingDirectory = string.Format("{0}\\bin", Directory.GetCurrentDirectory()),
WindowStyle = ProcessWindowStyle.Hidden,
UseShellExecute = true,
CreateNoWindow = true

View File

@@ -33,7 +33,7 @@ namespace Netch.Controllers
Instance = MainController.GetProcess();
Instance.StartInfo.FileName = "bin\\Shadowsocks.exe";
if (!String.IsNullOrWhiteSpace(server.Plugin) && !String.IsNullOrWhiteSpace(server.PluginOption))
if (!string.IsNullOrWhiteSpace(server.Plugin) && !string.IsNullOrWhiteSpace(server.PluginOption))
{
Instance.StartInfo.Arguments = $"-s {server.Hostname} -p {server.Port} -b {Global.Settings.LocalAddress} -l {Global.Settings.Socks5LocalPort} -m {server.EncryptMethod} -k \"{server.Password}\" -u --plugin {server.Plugin} --plugin-opts \"{server.PluginOption}\"";
}
@@ -54,7 +54,7 @@ namespace Netch.Controllers
Instance.Start();
Instance.BeginOutputReadLine();
Instance.BeginErrorReadLine();
for (int i = 0; i < 1000; i++)
for (var i = 0; i < 1000; i++)
{
Thread.Sleep(10);
@@ -97,7 +97,7 @@ namespace Netch.Controllers
public void OnOutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (!String.IsNullOrWhiteSpace(e.Data))
if (!string.IsNullOrWhiteSpace(e.Data))
{
// File.AppendAllText("logging\\shadowsocks.log", $"{e.Data}\r\n");

View File

@@ -34,21 +34,21 @@ namespace Netch.Controllers
Instance.StartInfo.FileName = "bin\\ShadowsocksR.exe";
Instance.StartInfo.Arguments = $"-s {server.Hostname} -p {server.Port} -k \"{server.Password}\" -m {server.EncryptMethod}";
if (!String.IsNullOrEmpty(server.Protocol))
if (!string.IsNullOrEmpty(server.Protocol))
{
Instance.StartInfo.Arguments += $" -O {server.Protocol}";
if (!String.IsNullOrEmpty(server.ProtocolParam))
if (!string.IsNullOrEmpty(server.ProtocolParam))
{
Instance.StartInfo.Arguments += $" -G \"{server.ProtocolParam}\"";
}
}
if (!String.IsNullOrEmpty(server.OBFS))
if (!string.IsNullOrEmpty(server.OBFS))
{
Instance.StartInfo.Arguments += $" -o {server.OBFS}";
if (!String.IsNullOrEmpty(server.OBFSParam))
if (!string.IsNullOrEmpty(server.OBFSParam))
{
Instance.StartInfo.Arguments += $" -g \"{server.OBFSParam}\"";
}
@@ -68,7 +68,7 @@ namespace Netch.Controllers
Instance.Start();
Instance.BeginOutputReadLine();
Instance.BeginErrorReadLine();
for (int i = 0; i < 1000; i++)
for (var i = 0; i < 1000; i++)
{
Thread.Sleep(10);
@@ -111,7 +111,7 @@ namespace Netch.Controllers
public void OnOutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (!String.IsNullOrWhiteSpace(e.Data))
if (!string.IsNullOrWhiteSpace(e.Data))
{
File.AppendAllText("logging\\shadowsocksr.log", $"{e.Data}\r\n");

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Diagnostics;
using System.IO;
using System.Net;
@@ -101,12 +101,12 @@ namespace Netch.Controllers
if (SavedMode.Type == 2) // 处理仅规则内走直连
{
// 将 TUN/TAP 网卡权重放到最高
var instance = new Process()
var instance = new Process
{
StartInfo =
{
FileName = String.Format("netsh"),
Arguments = String.Format("interface ip set interface {0} metric=0", Global.TUNTAP.Index),
FileName = "netsh",
Arguments = string.Format("interface ip set interface {0} metric=0", Global.TUNTAP.Index),
WindowStyle = ProcessWindowStyle.Hidden,
UseShellExecute = true,
CreateNoWindow = true
@@ -166,7 +166,7 @@ namespace Netch.Controllers
{
if (SavedMode.Type == 2)
{
NativeMethods.DeleteRoute("0.0.0.0", 0, Global.Settings.TUNTAP.Gateway.ToString(), Global.TUNTAP.Index, 10);
NativeMethods.DeleteRoute("0.0.0.0", 0, Global.Settings.TUNTAP.Gateway, Global.TUNTAP.Index, 10);
foreach (var ip in SavedMode.Rule)
{
@@ -273,8 +273,8 @@ namespace Netch.Controllers
SetupBypass();
Instance = new Process();
Instance.StartInfo.WorkingDirectory = String.Format("{0}\\bin", Directory.GetCurrentDirectory());
Instance.StartInfo.FileName = String.Format("{0}\\bin\\tun2socks.exe", Directory.GetCurrentDirectory());
Instance.StartInfo.WorkingDirectory = string.Format("{0}\\bin", Directory.GetCurrentDirectory());
Instance.StartInfo.FileName = string.Format("{0}\\bin\\tun2socks.exe", Directory.GetCurrentDirectory());
string dns;
if (Global.Settings.TUNTAP.UseCustomDNS)
@@ -297,11 +297,11 @@ namespace Netch.Controllers
if (server.Type == "Socks5")
{
Instance.StartInfo.Arguments = String.Format("-proxyServer {0}:{1} -tunAddr {2} -tunMask {3} -tunGw {4} -tunDns {5} -tunName \"{6}\"", server.Hostname, server.Port, Global.Settings.TUNTAP.Address, Global.Settings.TUNTAP.Netmask, Global.Settings.TUNTAP.Gateway, dns, Global.TUNTAP.Adapter.Name);
Instance.StartInfo.Arguments = string.Format("-proxyServer {0}:{1} -tunAddr {2} -tunMask {3} -tunGw {4} -tunDns {5} -tunName \"{6}\"", server.Hostname, server.Port, Global.Settings.TUNTAP.Address, Global.Settings.TUNTAP.Netmask, Global.Settings.TUNTAP.Gateway, dns, Global.TUNTAP.Adapter.Name);
}
else
{
Instance.StartInfo.Arguments = String.Format("-proxyServer 127.0.0.1:{0} -tunAddr {1} -tunMask {2} -tunGw {3} -tunDns {4} -tunName \"{5}\"", Global.Settings.Socks5LocalPort, Global.Settings.TUNTAP.Address, Global.Settings.TUNTAP.Netmask, Global.Settings.TUNTAP.Gateway, dns, Global.TUNTAP.Adapter.Name);
Instance.StartInfo.Arguments = string.Format("-proxyServer 127.0.0.1:{0} -tunAddr {1} -tunMask {2} -tunGw {3} -tunDns {4} -tunName \"{5}\"", Global.Settings.Socks5LocalPort, Global.Settings.TUNTAP.Address, Global.Settings.TUNTAP.Netmask, Global.Settings.TUNTAP.Gateway, dns, Global.TUNTAP.Adapter.Name);
}
Instance.StartInfo.CreateNoWindow = true;
@@ -319,7 +319,7 @@ namespace Netch.Controllers
Instance.BeginOutputReadLine();
Instance.PriorityClass = ProcessPriorityClass.RealTime;
for (int i = 0; i < 1000; i++)
for (var i = 0; i < 1000; i++)
{
Thread.Sleep(10);
@@ -362,9 +362,9 @@ namespace Netch.Controllers
public void OnOutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (!String.IsNullOrEmpty(e.Data))
if (!string.IsNullOrEmpty(e.Data))
{
File.AppendAllText("logging\\tun2socks.log", String.Format("{0}\r\n", e.Data.Trim()));
File.AppendAllText("logging\\tun2socks.log", string.Format("{0}\r\n", e.Data.Trim()));
if (State == Models.State.Starting)
{

View File

@@ -1,10 +1,10 @@
using Netch.Models.GitHubRelease;
using Newtonsoft.Json;
using System;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Net.Http;
using System.Threading.Tasks;
using Netch.Models.GitHubRelease;
using Newtonsoft.Json;
namespace Netch.Controllers
{

View File

@@ -31,32 +31,32 @@ namespace Netch.Controllers
return false;
}
File.WriteAllText("data\\last.json", Newtonsoft.Json.JsonConvert.SerializeObject(new Models.Information.VMess.Config()
File.WriteAllText("data\\last.json", Newtonsoft.Json.JsonConvert.SerializeObject(new Models.Information.VMess.Config
{
inbounds = new List<Models.Information.VMess.Inbounds>()
inbounds = new List<Models.Information.VMess.Inbounds>
{
new Models.Information.VMess.Inbounds()
new Models.Information.VMess.Inbounds
{
settings = new Models.Information.VMess.InboundSettings(),
port = Global.Settings.Socks5LocalPort,
listen = Global.Settings.LocalAddress
}
},
outbounds = new List<Models.Information.VMess.Outbounds>()
outbounds = new List<Models.Information.VMess.Outbounds>
{
new Models.Information.VMess.Outbounds()
new Models.Information.VMess.Outbounds
{
settings = new Models.Information.VMess.OutboundSettings()
settings = new Models.Information.VMess.OutboundSettings
{
vnext = new List<Models.Information.VMess.VNext>()
vnext = new List<Models.Information.VMess.VNext>
{
new Models.Information.VMess.VNext()
new Models.Information.VMess.VNext
{
address = server.Hostname,
port = server.Port,
users = new List<Models.Information.VMess.User>
{
new Models.Information.VMess.User()
new Models.Information.VMess.User
{
id = server.UserID,
alterId = server.AlterID,
@@ -66,66 +66,66 @@ namespace Netch.Controllers
}
}
},
streamSettings = new Models.Information.VMess.StreamSettings()
streamSettings = new Models.Information.VMess.StreamSettings
{
network = server.TransferProtocol,
security = server.TLSSecure == true ? "tls" : "",
wsSettings = server.TransferProtocol == "ws" ? new Models.Information.VMess.WebSocketSettings()
security = server.TLSSecure ? "tls" : "",
wsSettings = server.TransferProtocol == "ws" ? new Models.Information.VMess.WebSocketSettings
{
path = server.Path == "" ? "/" : server.Path,
headers = new Models.Information.VMess.WSHeaders()
headers = new Models.Information.VMess.WSHeaders
{
Host = server.Host == "" ? server.Hostname : server.Host
}
} : null,
tcpSettings = server.FakeType == "http" ? new Models.Information.VMess.TCPSettings()
tcpSettings = server.FakeType == "http" ? new Models.Information.VMess.TCPSettings
{
header = new Models.Information.VMess.TCPHeaders()
header = new Models.Information.VMess.TCPHeaders
{
type = server.FakeType,
request = new Models.Information.VMess.TCPRequest()
request = new Models.Information.VMess.TCPRequest
{
path = server.Path == "" ? "/" : server.Path,
headers = new Models.Information.VMess.TCPRequestHeaders()
headers = new Models.Information.VMess.TCPRequestHeaders
{
Host = server.Host == "" ? server.Hostname : server.Host
}
}
}
} : null,
kcpSettings = server.TransferProtocol == "kcp" ? new Models.Information.VMess.KCPSettings()
kcpSettings = server.TransferProtocol == "kcp" ? new Models.Information.VMess.KCPSettings
{
header = new Models.Information.VMess.TCPHeaders()
header = new Models.Information.VMess.TCPHeaders
{
type = server.FakeType
}
} : null,
quicSettings = server.TransferProtocol == "quic" ? new Models.Information.VMess.QUICSettings()
quicSettings = server.TransferProtocol == "quic" ? new Models.Information.VMess.QUICSettings
{
security = server.QUICSecure,
key = server.QUICSecret,
header = new Models.Information.VMess.TCPHeaders()
header = new Models.Information.VMess.TCPHeaders
{
type = server.FakeType
}
} : null,
httpSettings = server.TransferProtocol == "h2" ? new Models.Information.VMess.HTTPSettings()
httpSettings = server.TransferProtocol == "h2" ? new Models.Information.VMess.HTTPSettings
{
host = server.Host == "" ? server.Hostname : server.Host,
path = server.Path == "" ? "/" : server.Path
} : null,
tlsSettings = new Models.Information.VMess.TLSSettings()
tlsSettings = new Models.Information.VMess.TLSSettings
{
allowInsecure = true,
serverName = server.Host == "" ? server.Hostname : server.Host
}
},
mux = new Models.Information.VMess.OutboundMux()
mux = new Models.Information.VMess.OutboundMux
{
enabled = server.UseMux
}
},
new Models.Information.VMess.Outbounds()
new Models.Information.VMess.Outbounds
{
tag = "direct",
protocol = "freedom",
@@ -134,11 +134,11 @@ namespace Netch.Controllers
mux = null
}
},
routing = new Models.Information.VMess.Routing()
routing = new Models.Information.VMess.Routing
{
rules = new List<Models.Information.VMess.RoutingRules>()
rules = new List<Models.Information.VMess.RoutingRules>
{
mode.BypassChina == true ? new Models.Information.VMess.RoutingRules()
mode.BypassChina ? new Models.Information.VMess.RoutingRules
{
type = "field",
ip = new List<string>
@@ -152,7 +152,7 @@ namespace Netch.Controllers
"geosite:cn"
},
outboundTag = "direct"
} : new Models.Information.VMess.RoutingRules()
} : new Models.Information.VMess.RoutingRules
{
type = "field",
ip = new List<string>
@@ -185,7 +185,7 @@ namespace Netch.Controllers
Instance.Start();
Instance.BeginOutputReadLine();
Instance.BeginErrorReadLine();
for (int i = 0; i < 1000; i++)
for (var i = 0; i < 1000; i++)
{
Thread.Sleep(10);
@@ -232,7 +232,7 @@ namespace Netch.Controllers
public void OnOutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (!String.IsNullOrWhiteSpace(e.Data))
if (!string.IsNullOrWhiteSpace(e.Data))
{
File.AppendAllText("logging\\v2ray.log", $"{e.Data}\r\n");

View File

@@ -34,11 +34,11 @@ namespace Netch.Forms
private void AddButton_Click(object sender, EventArgs e)
{
if (!String.IsNullOrEmpty(IPTextBox.Text))
if (!string.IsNullOrEmpty(IPTextBox.Text))
{
if (IPAddress.TryParse(IPTextBox.Text, out var address))
{
IPListBox.Items.Add(String.Format("{0}/{1}", address, PrefixComboBox.SelectedItem));
IPListBox.Items.Add(string.Format("{0}/{1}", address, PrefixComboBox.SelectedItem));
}
else
{
@@ -68,7 +68,7 @@ namespace Netch.Forms
Global.Settings.BypassIPs.Clear();
foreach (var ip in IPListBox.Items)
{
Global.Settings.BypassIPs.Add(ip as String);
Global.Settings.BypassIPs.Add(ip as string);
}
Utils.Configuration.Save();

View File

@@ -1,5 +1,4 @@
using Netch.Controllers;
using System;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
@@ -9,6 +8,7 @@ using System.ServiceProcess;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Netch.Controllers;
namespace Netch.Forms
{
@@ -27,12 +27,12 @@ namespace Netch.Forms
/// <summary>
/// 上一次上传的流量
/// </summary>
public long LastUploadBandwidth = 0;
public long LastUploadBandwidth;
/// <summary>
/// 上一次下载的流量
/// </summary>
public long LastDownloadBandwidth = 0;
public long LastDownloadBandwidth;
/// <summary>
/// 是否第一次打开
@@ -142,7 +142,7 @@ namespace Netch.Forms
if (splited.Length >= 2)
{
if (int.TryParse(splited[1], out int result))
if (int.TryParse(splited[1], out var result))
{
mode.Type = result;
}
@@ -155,9 +155,9 @@ namespace Netch.Forms
if (splited.Length >= 3)
{
if (int.TryParse(splited[2], out int result))
if (int.TryParse(splited[2], out var result))
{
mode.BypassChina = (result == 1);
mode.BypassChina = result == 1;
}
else
{
@@ -168,7 +168,7 @@ namespace Netch.Forms
}
else
{
if (!text.StartsWith("#") && !String.IsNullOrWhiteSpace(text))
if (!text.StartsWith("#") && !string.IsNullOrWhiteSpace(text))
{
mode.Rule.Add(text.Trim());
}
@@ -186,7 +186,7 @@ namespace Netch.Forms
}
var array = Global.ModeFiles.ToArray();
Array.Sort(array, (a, b) => String.Compare(a.Remark, b.Remark, StringComparison.Ordinal));
Array.Sort(array, (a, b) => string.Compare(a.Remark, b.Remark, StringComparison.Ordinal));
ModeComboBox.Items.AddRange(array);
@@ -199,7 +199,7 @@ namespace Netch.Forms
ModeComboBox.Items.Clear();
Global.ModeFiles.Add(mode);
var array = Global.ModeFiles.ToArray();
Array.Sort(array, (a, b) => String.Compare(a.Remark, b.Remark, StringComparison.Ordinal));
Array.Sort(array, (a, b) => string.Compare(a.Remark, b.Remark, StringComparison.Ordinal));
ModeComboBox.Items.AddRange(array);
SelectLastMode();
@@ -389,7 +389,7 @@ namespace Netch.Forms
private void ImportServersFromClipboardToolStripMenuItem_Click(object sender, EventArgs e)
{
var texts = Clipboard.GetText();
if (!String.IsNullOrWhiteSpace(texts))
if (!string.IsNullOrWhiteSpace(texts))
{
var result = Utils.ShareLink.Parse(texts);
@@ -409,37 +409,37 @@ namespace Netch.Forms
private void AddSocks5ServerToolStripMenuItem_Click(object sender, EventArgs e)
{
(new Server.Socks5()).Show();
new Server.Socks5().Show();
Hide();
}
private void AddShadowsocksServerToolStripMenuItem_Click(object sender, EventArgs e)
{
(new Server.Shadowsocks()).Show();
new Server.Shadowsocks().Show();
Hide();
}
private void AddShadowsocksRServerToolStripMenuItem_Click(object sender, EventArgs e)
{
(new Server.ShadowsocksR()).Show();
new Server.ShadowsocksR().Show();
Hide();
}
private void AddVMessServerToolStripMenuItem_Click(object sender, EventArgs e)
{
(new Server.VMess()).Show();
new Server.VMess().Show();
Hide();
}
private void CreateProcessModeToolStripButton_Click(object sender, EventArgs e)
{
(new Mode.Process()).Show();
new Mode.Process().Show();
Hide();
}
private void ManageSubscribeLinksToolStripMenuItem_Click(object sender, EventArgs e)
{
(new SubscribeForm()).Show();
new SubscribeForm().Show();
Hide();
}
@@ -466,7 +466,7 @@ namespace Netch.Forms
{
if (Global.Settings.UseProxyToUpdateSubscription)
{
var mode = new Models.Mode()
var mode = new Models.Mode
{
Remark = "ProxyUpdate",
Type = 5
@@ -479,7 +479,7 @@ namespace Netch.Forms
using var client = new Override.WebClient();
try
{
if (!String.IsNullOrEmpty(item.UserAgent))
if (!string.IsNullOrEmpty(item.UserAgent))
{
client.Headers.Add("User-Agent", item.UserAgent);
}
@@ -529,7 +529,6 @@ namespace Netch.Forms
}
catch (Exception)
{
continue;
}
}
@@ -628,7 +627,7 @@ namespace Netch.Forms
}
catch (Exception ex)
{
MessageBox.Show(this, Utils.i18N.Translate("Error") + Utils.i18N.Translate(": ") + ex.ToString(), Utils.i18N.Translate("Information"), MessageBoxButtons.OK, MessageBoxIcon.Information);
MessageBox.Show(this, Utils.i18N.Translate("Error") + Utils.i18N.Translate(": ") + ex, Utils.i18N.Translate("Information"), MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
@@ -680,16 +679,16 @@ namespace Netch.Forms
switch (Global.Settings.Server[ServerComboBox.SelectedIndex].Type)
{
case "Socks5":
(new Server.Socks5(ServerComboBox.SelectedIndex)).Show();
new Server.Socks5(ServerComboBox.SelectedIndex).Show();
break;
case "SS":
(new Server.Shadowsocks(ServerComboBox.SelectedIndex)).Show();
new Server.Shadowsocks(ServerComboBox.SelectedIndex).Show();
break;
case "SSR":
(new Server.ShadowsocksR(ServerComboBox.SelectedIndex)).Show();
new Server.ShadowsocksR(ServerComboBox.SelectedIndex).Show();
break;
case "VMess":
(new Server.VMess(ServerComboBox.SelectedIndex)).Show();
new Server.VMess(ServerComboBox.SelectedIndex).Show();
break;
default:
return;
@@ -715,7 +714,7 @@ namespace Netch.Forms
if (ServerComboBox.Items.Count > 0)
{
ServerComboBox.SelectedIndex = (index != 0) ? index - 1 : index;
ServerComboBox.SelectedIndex = index != 0 ? index - 1 : index;
}
Utils.Configuration.Save();
}
@@ -898,10 +897,8 @@ namespace Netch.Forms
return;
}
// 否则直接调用停止按钮的方法
else
{
ControlButton_Click(sender, e);
}
ControlButton_Click(sender, e);
}
SaveConfigs();
@@ -933,7 +930,7 @@ namespace Netch.Forms
private void AboutToolStripButton_Click(object sender, EventArgs e)
{
(new AboutForm()).Show();
new AboutForm().Show();
Hide();
}
@@ -951,21 +948,19 @@ namespace Netch.Forms
private void ProfileButton_Click(object sender, EventArgs e)
{
int index = ProfileButtons.IndexOf((Button)sender);
var index = ProfileButtons.IndexOf((Button)sender);
//Utils.Logging.Info(String.Format("Button no.{0} clicked", index));
if (Control.ModifierKeys == Keys.Control)
if (ModifierKeys == Keys.Control)
{
if (ServerComboBox.SelectedIndex == -1)
{
MessageBox.Show(Utils.i18N.Translate("Please select a server first"), Utils.i18N.Translate("Information"), MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
else if (ModeComboBox.SelectedIndex == -1)
{
MessageBox.Show(Utils.i18N.Translate("Please select an mode first"), Utils.i18N.Translate("Information"), MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
else
{
@@ -980,7 +975,7 @@ namespace Netch.Forms
ProfileNameText.Text = LoadProfile(index);
// start the profile
bool need2ndStart = true;
var need2ndStart = true;
if (State == Models.State.Waiting || State == Models.State.Stopped)
{
need2ndStart = false;
@@ -1019,7 +1014,7 @@ namespace Netch.Forms
public void InitProfile()
{
int num_profile = 4;
var num_profile = 4;
ProfileTable.ColumnCount = num_profile;
while (Global.Settings.profiles.Count < num_profile)
@@ -1028,12 +1023,12 @@ namespace Netch.Forms
}
// buttons
for (int i = 0; i < num_profile; ++i)
for (var i = 0; i < num_profile; ++i)
{
var b = new Button();
ProfileTable.Controls.Add(b, i, 0);
b.Location = new Point(i * 100, 0);
b.Click += new EventHandler(ProfileButton_Click);
b.Click += ProfileButton_Click;
b.Dock = DockStyle.Fill;
b.Text = "None";
ProfileButtons.Add(b);
@@ -1049,25 +1044,25 @@ namespace Netch.Forms
}
// equal column
this.ProfileTable.ColumnStyles.Clear();
for (int i = 1; i <= this.ProfileTable.RowCount; i++)
ProfileTable.ColumnStyles.Clear();
for (var i = 1; i <= ProfileTable.RowCount; i++)
{
ProfileTable.RowStyles.Add(new RowStyle(SizeType.Percent, 1));
}
for (int i = 1; i <= this.ProfileTable.ColumnCount; i++)
for (var i = 1; i <= ProfileTable.ColumnCount; i++)
{
ProfileTable.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 1));
}
}
private String LoadProfile(int index)
private string LoadProfile(int index)
{
Models.Profile p = Global.Settings.profiles[index];
var p = Global.Settings.profiles[index];
if (p.IsDummy)
throw new Exception("Profile not found.");
bool result = false;
var result = false;
foreach (Models.Server server in ServerComboBox.Items)
{
@@ -1103,7 +1098,7 @@ namespace Netch.Forms
{
var selectedServer = (Models.Server)ServerComboBox.SelectedItem;
var selectedMode = (Models.Mode)ModeComboBox.SelectedItem;
String name = ProfileNameText.Text;
var name = ProfileNameText.Text;
Global.Settings.profiles[index] = new Models.Profile(selectedServer, selectedMode, name);

View File

@@ -17,11 +17,11 @@ namespace Netch.Forms.Mode
/// 扫描目录
/// </summary>
/// <param name="DirName">路径</param>
public void ScanDirectory(String DirName)
public void ScanDirectory(string DirName)
{
try
{
DirectoryInfo RDirInfo = new DirectoryInfo(DirName);
var RDirInfo = new DirectoryInfo(DirName);
if (!RDirInfo.Exists)
{
return;
@@ -32,17 +32,17 @@ namespace Netch.Forms.Mode
return;
}
System.Collections.Generic.Stack<string> DirStack = new System.Collections.Generic.Stack<string>();
var DirStack = new System.Collections.Generic.Stack<string>();
DirStack.Push(DirName);
while (DirStack.Count > 0)
{
DirectoryInfo DirInfo = new DirectoryInfo(DirStack.Pop());
foreach (DirectoryInfo DirChildInfo in DirInfo.GetDirectories())
var DirInfo = new DirectoryInfo(DirStack.Pop());
foreach (var DirChildInfo in DirInfo.GetDirectories())
{
DirStack.Push(DirChildInfo.FullName);
}
foreach (FileInfo FileChildInfo in DirInfo.GetFiles())
foreach (var FileChildInfo in DirInfo.GetFiles())
{
if (FileChildInfo.Name.EndsWith(".exe") && !RuleListBox.Items.Contains(FileChildInfo.Name))
{
@@ -92,7 +92,7 @@ namespace Netch.Forms.Mode
private void AddButton_Click(object sender, EventArgs e)
{
if (!String.IsNullOrWhiteSpace(ProcessNameTextBox.Text))
if (!string.IsNullOrWhiteSpace(ProcessNameTextBox.Text))
{
var process = ProcessNameTextBox.Text;
if (!process.EndsWith(".exe"))
@@ -105,7 +105,7 @@ namespace Netch.Forms.Mode
RuleListBox.Items.Add(process);
}
ProcessNameTextBox.Text = String.Empty;
ProcessNameTextBox.Text = string.Empty;
}
else
{
@@ -146,7 +146,7 @@ namespace Netch.Forms.Mode
Utils.Configuration.Save();
if (!String.IsNullOrWhiteSpace(RemarkTextBox.Text))
if (!string.IsNullOrWhiteSpace(RemarkTextBox.Text))
{
var ModeFilename = Path.Combine("mode", FilenameTextBox.Text);
@@ -159,7 +159,7 @@ namespace Netch.Forms.Mode
if (RuleListBox.Items.Count != 0)
{
var mode = new Models.Mode()
var mode = new Models.Mode
{
BypassChina = false,
FileName = ModeFilename,
@@ -170,7 +170,7 @@ namespace Netch.Forms.Mode
var text = $"# {RemarkTextBox.Text}, 0\r\n";
foreach (var item in RuleListBox.Items)
{
var process = item as String;
var process = item as string;
mode.Rule.Add(process);
text += process + "\r\n";
}

View File

@@ -90,7 +90,7 @@ namespace Netch.Forms.Server
}
if (Index == -1)
{
Global.Settings.Server.Add(new Models.Server()
Global.Settings.Server.Add(new Models.Server
{
Remark = RemarkTextBox.Text,
Type = "SS",
@@ -104,7 +104,7 @@ namespace Netch.Forms.Server
}
else
{
Global.Settings.Server[Index] = new Models.Server()
Global.Settings.Server[Index] = new Models.Server
{
Remark = RemarkTextBox.Text,
Group = Global.Settings.Server[Index].Group,

View File

@@ -106,7 +106,7 @@ namespace Netch.Forms.Server
}
if (Index == -1)
{
Global.Settings.Server.Add(new Models.Server()
Global.Settings.Server.Add(new Models.Server
{
Remark = RemarkTextBox.Text,
Type = "SSR",
@@ -122,7 +122,7 @@ namespace Netch.Forms.Server
}
else
{
Global.Settings.Server[Index] = new Models.Server()
Global.Settings.Server[Index] = new Models.Server
{
Remark = RemarkTextBox.Text,
Group = Global.Settings.Server[Index].Group,

View File

@@ -77,7 +77,7 @@ namespace Netch.Forms.Server
}
if (Index == -1)
{
Global.Settings.Server.Add(new Models.Server()
Global.Settings.Server.Add(new Models.Server
{
Remark = RemarkTextBox.Text,
Type = "Socks5",
@@ -89,7 +89,7 @@ namespace Netch.Forms.Server
}
else
{
Global.Settings.Server[Index] = new Models.Server()
Global.Settings.Server[Index] = new Models.Server
{
Remark = RemarkTextBox.Text,
Group = Global.Settings.Server[Index].Group,

View File

@@ -118,7 +118,7 @@ namespace Netch.Forms.Server
}
if (Index == -1)
{
Global.Settings.Server.Add(new Models.Server()
Global.Settings.Server.Add(new Models.Server
{
Remark = RemarkTextBox.Text,
Type = "VMess",
@@ -139,7 +139,7 @@ namespace Netch.Forms.Server
}
else
{
Global.Settings.Server[Index] = new Models.Server()
Global.Settings.Server[Index] = new Models.Server
{
Remark = RemarkTextBox.Text,
Type = "VMess",

View File

@@ -133,7 +133,7 @@ namespace Netch.Forms
try
{
var Socks5Port = Int32.Parse(Socks5PortTextBox.Text);
var Socks5Port = int.Parse(Socks5PortTextBox.Text);
if (Socks5Port > 0 && Socks5Port < 65536)
{
@@ -154,7 +154,7 @@ namespace Netch.Forms
try
{
var HTTPPort = Int32.Parse(HTTPPortTextBox.Text);
var HTTPPort = int.Parse(HTTPPortTextBox.Text);
if (HTTPPort > 0 && HTTPPort < 65536)
{
@@ -175,7 +175,7 @@ namespace Netch.Forms
try
{
var RedirectorPort = Int32.Parse(RedirectorTextBox.Text);
var RedirectorPort = int.Parse(RedirectorTextBox.Text);
if (RedirectorPort > 0 && RedirectorPort < 65536)
{
@@ -226,7 +226,7 @@ namespace Netch.Forms
var DNS = "";
foreach (var ip in Global.Settings.TUNTAP.DNS)
{
DNS += ip.ToString();
DNS += ip;
DNS += ',';
}
DNS = DNS.Trim();

View File

@@ -17,16 +17,16 @@ namespace Netch.Forms
foreach (var item in Global.Settings.SubscribeLink)
{
if (!String.IsNullOrEmpty(item.UserAgent))
if (!string.IsNullOrEmpty(item.UserAgent))
{
SubscribeLinkListView.Items.Add(new ListViewItem(new String[] {
SubscribeLinkListView.Items.Add(new ListViewItem(new[] {
item.Remark,
item.Link,
item.UserAgent}));
}
else
{
SubscribeLinkListView.Items.Add(new ListViewItem(new String[] {
SubscribeLinkListView.Items.Add(new ListViewItem(new[] {
item.Remark,
item.Link,
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"}));
@@ -63,7 +63,7 @@ namespace Netch.Forms
{
if (SubscribeLinkListView.SelectedItems.Count > 0)
{
for (int i = SubscribeLinkListView.SelectedItems.Count - 1; i >= 0; i--)
for (var i = SubscribeLinkListView.SelectedItems.Count - 1; i >= 0; i--)
{
var item = SubscribeLinkListView.SelectedItems[i];
var link = Global.Settings.SubscribeLink[item.Index];
@@ -89,21 +89,21 @@ namespace Netch.Forms
private void AddButton_Click(object sender, EventArgs e)
{
if (!String.IsNullOrWhiteSpace(RemarkTextBox.Text))
if (!string.IsNullOrWhiteSpace(RemarkTextBox.Text))
{
if (!String.IsNullOrWhiteSpace(LinkTextBox.Text))
if (!string.IsNullOrWhiteSpace(LinkTextBox.Text))
{
if (LinkTextBox.Text.StartsWith("HTTP://", StringComparison.OrdinalIgnoreCase) || LinkTextBox.Text.StartsWith("HTTPS://", StringComparison.OrdinalIgnoreCase))
{
Global.Settings.SubscribeLink.Add(new Models.SubscribeLink()
Global.Settings.SubscribeLink.Add(new Models.SubscribeLink
{
Remark = RemarkTextBox.Text,
Link = LinkTextBox.Text,
UserAgent = UserAgentTextBox.Text
});
RemarkTextBox.Text = String.Empty;
LinkTextBox.Text = String.Empty;
RemarkTextBox.Text = string.Empty;
LinkTextBox.Text = string.Empty;
UserAgentTextBox.Text = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36";
InitSubscribeLink();

View File

@@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.Net;
using System.Net.NetworkInformation;
@@ -25,7 +24,7 @@ namespace Netch
/// <summary>
/// SS 加密列表
/// </summary>
public static List<string> SS = new List<string>()
public static List<string> SS = new List<string>
{
"rc4-md5",
"aes-128-gcm",
@@ -51,7 +50,7 @@ namespace Netch
/// <summary>
/// SSR 加密列表
/// </summary>
public static List<string> SSR = new List<string>()
public static List<string> SSR = new List<string>
{
"none",
"table",
@@ -79,7 +78,7 @@ namespace Netch
/// <summary>
/// VMess 解密列表
/// </summary>
public static List<string> VMess = new List<string>()
public static List<string> VMess = new List<string>
{
"auto",
"none",
@@ -90,7 +89,7 @@ namespace Netch
/// <summary>
/// VMess QUIC 加密列表
/// </summary>
public static List<string> VMessQUIC = new List<string>()
public static List<string> VMessQUIC = new List<string>
{
"none",
"aes-128-gcm",
@@ -101,7 +100,7 @@ namespace Netch
/// <summary>
/// SSR 协议列表
/// </summary>
public static List<string> Protocols = new List<string>()
public static List<string> Protocols = new List<string>
{
"origin",
"verify_deflate",
@@ -114,7 +113,7 @@ namespace Netch
/// <summary>
/// SSR 混淆列表
/// </summary>
public static List<string> OBFSs = new List<string>()
public static List<string> OBFSs = new List<string>
{
"plain",
"http_simple",
@@ -125,7 +124,7 @@ namespace Netch
/// <summary>
/// V2Ray 传输协议
/// </summary>
public static List<string> TransferProtocols = new List<string>()
public static List<string> TransferProtocols = new List<string>
{
"tcp",
"kcp",
@@ -137,7 +136,7 @@ namespace Netch
/// <summary>
/// V2Ray 伪装类型
/// </summary>
public static List<string> FakeTypes = new List<string>()
public static List<string> FakeTypes = new List<string>
{
"none",
"http",
@@ -187,7 +186,7 @@ namespace Netch
/// <summary>
/// 组件 ID
/// </summary>
public static string ComponentID = String.Empty;
public static string ComponentID = string.Empty;
}
/// <summary>

View File

@@ -1,6 +1,4 @@
using System;
namespace Netch.Models
namespace Netch.Models
{
public class LegacyServer
{
@@ -42,7 +40,7 @@ namespace Netch.Models
/// <summary>
/// 用户 IDV2
/// </summary>
public string UserID = String.Empty;
public string UserID = string.Empty;
/// <summary>
/// 额外 IDV2
@@ -82,17 +80,17 @@ namespace Netch.Models
/// <summary>
/// 伪装类型V2
/// </summary>
public string FakeType = String.Empty;
public string FakeType = string.Empty;
/// <summary>
/// 伪装域名V2HTTP、WebSocket、HTTP/2
/// </summary>
public string Host = String.Empty;
public string Host = string.Empty;
/// <summary>
/// 传输路径V2WebSocket、HTTP/2
/// </summary>
public string Path = String.Empty;
public string Path = string.Empty;
/// <summary>
/// QUIC 加密方式V2
@@ -102,7 +100,7 @@ namespace Netch.Models
/// <summary>
/// QUIC 加密密钥V2
/// </summary>
public string QUICSecret = String.Empty;
public string QUICSecret = string.Empty;
/// <summary>
/// TLS 底层传输安全V2

View File

@@ -45,12 +45,12 @@ namespace Netch.Models
/// <summary>
/// 服务器列表
/// </summary>
public List<Models.LegacyServer> Server = new List<Models.LegacyServer>();
public List<LegacyServer> Server = new List<LegacyServer>();
/// <summary>
/// 订阅链接列表
/// </summary>
public List<Models.SubscribeLink> SubscribeLink = new List<Models.SubscribeLink>();
public List<SubscribeLink> SubscribeLink = new List<SubscribeLink>();
/// <summary>
/// 全局绕过 IP 列表

View File

@@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
namespace Netch.Models
{
@@ -42,7 +41,7 @@ namespace Netch.Models
/// <returns>备注</returns>
public override string ToString()
{
return String.Format("[{0}] {1}", Type + 1, Remark);
return string.Format("[{0}] {1}", Type + 1, Remark);
}
/// <summary>
@@ -74,7 +73,7 @@ namespace Netch.Models
FileString = $"# {Remark}, {Type}, {(BypassChina ? 1 : 0)}\r\n";
}
foreach (String item in Rule)
foreach (var item in Rule)
{
FileString = $"{FileString}{item}\r\n";
}

View File

@@ -1,16 +1,14 @@
using System;
namespace Netch.Models
namespace Netch.Models
{
public class Profile
{
public String ServerRemark;
public String ModeRemark;
public String ProfileName;
public string ServerRemark;
public string ModeRemark;
public string ProfileName;
public bool IsDummy = true;
public Profile(Server server, Mode mode, String name)
public Profile(Server server, Mode mode, string name)
{
ServerRemark = server.Remark;
ModeRemark = mode.Remark;

View File

@@ -51,7 +51,7 @@ namespace Netch.Models
/// <summary>
/// 用户 IDVMess
/// </summary>
public string UserID = String.Empty;
public string UserID = string.Empty;
/// <summary>
/// 额外 IDVMess
@@ -101,17 +101,17 @@ namespace Netch.Models
/// <summary>
/// 伪装类型VMess
/// </summary>
public string FakeType = String.Empty;
public string FakeType = string.Empty;
/// <summary>
/// 伪装域名VMessHTTP、WebSocket、HTTP/2
/// </summary>
public string Host = String.Empty;
public string Host = string.Empty;
/// <summary>
/// 传输路径VMessWebSocket、HTTP/2
/// </summary>
public string Path = String.Empty;
public string Path = string.Empty;
/// <summary>
/// QUIC 加密方式VMess
@@ -121,7 +121,7 @@ namespace Netch.Models
/// <summary>
/// QUIC 加密密钥VMess
/// </summary>
public string QUICSecret = String.Empty;
public string QUICSecret = string.Empty;
/// <summary>
/// TLS 底层传输安全VMess
@@ -144,7 +144,7 @@ namespace Netch.Models
/// <returns>备注</returns>
public override string ToString()
{
if (String.IsNullOrWhiteSpace(Remark))
if (string.IsNullOrWhiteSpace(Remark))
{
Remark = $"{Hostname}:{Port}";
}
@@ -179,9 +179,9 @@ namespace Netch.Models
}
var list = new Task<int>[3];
for (int i = 0; i < 3; i++)
for (var i = 0; i < 3; i++)
{
list[i] = Task.Run<int>(() =>
list[i] = Task.Run(() =>
{
try
{
@@ -190,7 +190,7 @@ namespace Netch.Models
var watch = new Stopwatch();
watch.Start();
var task = client.BeginConnect(new IPEndPoint(destination, Port), (result) =>
var task = client.BeginConnect(new IPEndPoint(destination, Port), result =>
{
watch.Stop();
}, 0);

View File

@@ -107,12 +107,12 @@ namespace Netch.Models
/// <summary>
/// 订阅链接列表
/// </summary>
public List<Models.SubscribeLink> SubscribeLink = new List<Models.SubscribeLink>();
public List<SubscribeLink> SubscribeLink = new List<SubscribeLink>();
/// <summary>
/// 服务器列表
/// </summary>
public List<Models.Server> Server = new List<Models.Server>();
public List<Server> Server = new List<Server>();
/// <summary>
/// 全局绕过 IP 列表

View File

@@ -28,7 +28,7 @@ namespace Netch
}
// 预创建目录
var directories = new String[] { "mode", "data", "i18n", "logging" };
var directories = new[] { "mode", "data", "i18n", "logging" };
foreach (var item in directories)
{
// 检查是否已经存在

View File

@@ -1,5 +1,4 @@
using System.Diagnostics;
using System.Linq;
using System.Linq;
namespace System.Windows.Forms
{

View File

@@ -51,10 +51,6 @@ namespace Netch
// 跳过
}
}
else
{
// 跳过
}
}
return Task.FromResult(response);

View File

@@ -18,7 +18,7 @@
i++;
} while ((result /= 1024) > 1024);
return System.String.Format("{0} {1}", System.Math.Round(result, 2), units[i]);
return string.Format("{0} {1}", System.Math.Round(result, 2), units[i]);
}
}
}

View File

@@ -37,7 +37,7 @@ namespace Netch.Utils
if (Global.Settings.Server[0].Hostname == null)
{
var LegacySettingConfig = Newtonsoft.Json.JsonConvert.DeserializeObject<Models.LegacySetting>(File.ReadAllText(SETTINGS_JSON));
for (int i = 0; i < LegacySettingConfig.Server.Count; i++)
for (var i = 0; i < LegacySettingConfig.Server.Count; i++)
{
Global.Settings.Server[i].Hostname = LegacySettingConfig.Server[i].Address;
if (Global.Settings.Server[i].Type == "Shadowsocks")
@@ -100,22 +100,22 @@ namespace Netch.Utils
}
else
{
Logging.Info($"GetBestRoute 搜索失败");
Logging.Info("GetBestRoute 搜索失败");
return false;
}
foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces())
foreach (var adapter in NetworkInterface.GetAllNetworkInterfaces())
{
IPInterfaceProperties adapterProperties = adapter.GetIPProperties();
IPv4InterfaceProperties p = adapterProperties.GetIPv4Properties();
var adapterProperties = adapter.GetIPProperties();
var p = adapterProperties.GetIPv4Properties();
// 通过索引查找对应适配器的 IPv4 地址
if (p.Index == Global.Adapter.Index)
{
var AddressGot = false;
String AdapterIPs = "";
var AdapterIPs = "";
foreach (UnicastIPAddressInformation ip in adapterProperties.UnicastAddresses)
foreach (var ip in adapterProperties.UnicastAddresses)
{
if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
{
@@ -124,7 +124,7 @@ namespace Netch.Utils
Logging.Info($"当前出口 IPv4 地址:{Global.Adapter.Address}");
break;
}
AdapterIPs = $"{ip.Address.ToString()} | ";
AdapterIPs = $"{ip.Address} | ";
}
if (!AddressGot)
@@ -134,7 +134,7 @@ namespace Netch.Utils
AdapterIPs = AdapterIPs.Substring(0, AdapterIPs.Length - 3);
Logging.Info($"所有出口地址:{AdapterIPs}");
}
Logging.Info($"出口无 IPv4 地址,当前只支持 IPv4 地址");
Logging.Info("出口无 IPv4 地址,当前只支持 IPv4 地址");
return false;
}
break;
@@ -143,7 +143,7 @@ namespace Netch.Utils
// 搜索 TUN/TAP 适配器的索引
Global.TUNTAP.ComponentID = TUNTAP.GetComponentID();
if (String.IsNullOrEmpty(Global.TUNTAP.ComponentID))
if (string.IsNullOrEmpty(Global.TUNTAP.ComponentID))
{
MessageBox.Show(i18N.Translate("Please install TAP-Windows and create an TUN/TAP adapter manually"), i18N.Translate("Information"), MessageBoxButtons.OK, MessageBoxIcon.Information);
return false;

View File

@@ -16,7 +16,7 @@ namespace Netch.Utils
/// <param name="text">内容</param>
public static void Info(string text)
{
File.AppendAllText("logging\\application.log", String.Format("[{0}] {1}{2}", DateTime.Now, text, EOF));
File.AppendAllText("logging\\application.log", string.Format("[{0}] {1}{2}", DateTime.Now, text, EOF));
}
}
}

View File

@@ -1,13 +1,12 @@
using Netch.Models;
using Netch.Models.SS;
using Newtonsoft.Json;
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using VMess = Netch.Models.VMess;
using Netch.Models;
using Netch.Models.SS;
using Newtonsoft.Json;
namespace Netch.Utils
{
@@ -311,7 +310,7 @@ namespace Netch.Utils
}
else if (text.StartsWith("ssd://"))
{
var json = Newtonsoft.Json.JsonConvert.DeserializeObject<Models.SSD.Main>(URLSafeBase64Decode(text.Substring(6)));
var json = JsonConvert.DeserializeObject<Models.SSD.Main>(URLSafeBase64Decode(text.Substring(6)));
foreach (var server in json.servers)
{
@@ -320,11 +319,11 @@ namespace Netch.Utils
data.Remark = server.remarks;
data.Hostname = server.server;
data.Port = (server.port != 0) ? server.port : json.port;
data.Password = (server.password != null) ? server.password : json.password;
data.EncryptMethod = (server.encryption != null) ? server.encryption : json.encryption;
data.Plugin = (string.IsNullOrEmpty(json.plugin)) ? (string.IsNullOrEmpty(server.plugin) ? null : server.plugin) : json.plugin;
data.PluginOption = (string.IsNullOrEmpty(json.plugin_options)) ? (string.IsNullOrEmpty(server.plugin_options) ? null : server.plugin_options) : json.plugin_options;
data.Port = server.port != 0 ? server.port : json.port;
data.Password = server.password != null ? server.password : json.password;
data.EncryptMethod = server.encryption != null ? server.encryption : json.encryption;
data.Plugin = string.IsNullOrEmpty(json.plugin) ? string.IsNullOrEmpty(server.plugin) ? null : server.plugin : json.plugin;
data.PluginOption = string.IsNullOrEmpty(json.plugin_options) ? string.IsNullOrEmpty(server.plugin_options) ? null : server.plugin_options : json.plugin_options;
if (Global.EncryptMethods.SS.Contains(data.EncryptMethod))
{
@@ -489,7 +488,7 @@ namespace Netch.Utils
data.Type = "VMess";
text = text.Substring(8);
var vmess = Newtonsoft.Json.JsonConvert.DeserializeObject<VMess>(URLSafeBase64Decode(text));
var vmess = JsonConvert.DeserializeObject<VMess>(URLSafeBase64Decode(text));
data.Remark = vmess.ps;
data.Hostname = vmess.add;
@@ -527,11 +526,9 @@ namespace Netch.Utils
Logging.Info(string.Format("不支持的 VMess QUIC 加密方式:{0}", vmess.host));
return null;
}
else
{
data.QUICSecure = vmess.host;
data.QUICSecret = vmess.path;
}
data.QUICSecure = vmess.host;
data.QUICSecret = vmess.path;
}
else
@@ -568,7 +565,7 @@ namespace Netch.Utils
else if (text.StartsWith("Netch://"))
{
text = text.Substring(8);
var NetchLink = Newtonsoft.Json.JsonConvert.DeserializeObject<Server>(URLSafeBase64Decode(text));
var NetchLink = JsonConvert.DeserializeObject<Server>(URLSafeBase64Decode(text));
if (!string.IsNullOrEmpty(NetchLink.Hostname) || NetchLink.Port > 65536 || NetchLink.Port > 0)
{
return null;

View File

@@ -15,7 +15,7 @@ namespace Netch
Other = 1,
Invalid = 2,
Direct = 3,
Indirect = 4,
Indirect = 4
}
public enum ForwardProtocol
@@ -36,7 +36,7 @@ namespace Netch
BGP = 14, // 0x0000000E
NT_AUTOSTATIC = 10002, // 0x00002712
NT_STATIC = 10006, // 0x00002716
NT_STATIC_NON_DOD = 10007, // 0x00002717
NT_STATIC_NON_DOD = 10007 // 0x00002717
}
public class RouteEntry
@@ -60,188 +60,98 @@ namespace Netch
public int Index
{
get
{
return this._index;
}
set
{
this._index = value;
}
get => _index;
set => _index = value;
}
public IPAddress Destination
{
get
{
return this._destination;
}
set
{
this._destination = value;
}
get => _destination;
set => _destination = value;
}
public IPAddress Mask
{
get
{
return this._mask;
}
set
{
this._mask = value;
}
get => _mask;
set => _mask = value;
}
public int Policy
{
get
{
return this._policy;
}
set
{
this._policy = value;
}
get => _policy;
set => _policy = value;
}
public IPAddress NextHop
{
get
{
return this._nextHop;
}
set
{
this._nextHop = value;
}
get => _nextHop;
set => _nextHop = value;
}
public NetworkInterface RelatedInterface
{
get
{
return this._interface;
}
}
public NetworkInterface RelatedInterface => _interface;
public string InterfaceName
{
get
{
if (this.RelatedInterface == null)
if (RelatedInterface == null)
return string.Empty;
return this.RelatedInterface.Name;
return RelatedInterface.Name;
}
}
public ForwardType ForwardType
{
get
{
return this._type;
}
set
{
this._type = value;
}
get => _type;
set => _type = value;
}
public ForwardProtocol Protocol
{
get
{
return this._protocol;
}
set
{
this._protocol = value;
}
get => _protocol;
set => _protocol = value;
}
public int Age
{
get
{
return this._age;
}
set
{
this._age = value;
}
get => _age;
set => _age = value;
}
public int NextHopAS
{
get
{
return this._nextHopAS;
}
set
{
this._nextHopAS = value;
}
get => _nextHopAS;
set => _nextHopAS = value;
}
public int Metric1
{
get
{
return this._metric1;
}
set
{
this._metric1 = value;
}
get => _metric1;
set => _metric1 = value;
}
public int Metric2
{
get
{
return this._metric2;
}
set
{
this._metric2 = value;
}
get => _metric2;
set => _metric2 = value;
}
public int Metric3
{
get
{
return this._metric3;
}
set
{
this._metric3 = value;
}
get => _metric3;
set => _metric3 = value;
}
public int Metric4
{
get
{
return this._metric4;
}
set
{
this._metric4 = value;
}
get => _metric4;
set => _metric4 = value;
}
public int Metric5
{
get
{
return this._metric5;
}
set
{
this._metric5 = value;
}
get => _metric5;
set => _metric5 = value;
}
public RouteEntry(
@@ -261,21 +171,21 @@ namespace Netch
int metric5,
int idx)
{
this._age = age;
this._policy = policy;
this._protocol = proto;
this._type = type;
this._destination = new IPAddress((long)destination);
this._mask = new IPAddress((long)mask);
this._nextHop = new IPAddress((long)nextHop);
this._nextHopAS = nextHopAS;
this._interface = intf;
this._metric1 = metric1;
this._metric2 = metric2;
this._metric3 = metric3;
this._metric4 = metric4;
this._metric5 = metric5;
this._index = idx;
_age = age;
_policy = policy;
_protocol = proto;
_type = type;
_destination = new IPAddress(destination);
_mask = new IPAddress(mask);
_nextHop = new IPAddress(nextHop);
_nextHopAS = nextHopAS;
_interface = intf;
_metric1 = metric1;
_metric2 = metric2;
_metric3 = metric3;
_metric4 = metric4;
_metric5 = metric5;
_index = idx;
}
}
@@ -320,48 +230,48 @@ namespace Netch
public IDictionary<int, NetworkInterface> GetAdapters()
{
return (IDictionary<int, NetworkInterface>)this._adapters;
return _adapters;
}
public NetworkInterface GetAdapter(int interfaceIndex)
{
NetworkInterface networkInterface = (NetworkInterface)null;
this._adapters.TryGetValue(interfaceIndex, out networkInterface);
NetworkInterface networkInterface = null;
_adapters.TryGetValue(interfaceIndex, out networkInterface);
return networkInterface;
}
public int GetAdapterIndex(NetworkInterface networkInterface)
{
return this._adapters.First<KeyValuePair<int, NetworkInterface>>((Func<KeyValuePair<int, NetworkInterface>, bool>)(a => a.Value == networkInterface)).Key;
return _adapters.First(a => a.Value == networkInterface).Key;
}
public AdaptersTable()
{
IntPtr num1 = IntPtr.Zero;
int pdwSize = 0;
int num2 = 0;
num2 = Win32Native.GetIfTable(IntPtr.Zero, ref pdwSize, true);
NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
var num1 = IntPtr.Zero;
var pdwSize = 0;
var num2 = 0;
num2 = GetIfTable(IntPtr.Zero, ref pdwSize, true);
var networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
try
{
num1 = Marshal.AllocHGlobal(pdwSize);
if (Win32Native.GetIfTable(num1, ref pdwSize, true) != 0)
if (GetIfTable(num1, ref pdwSize, true) != 0)
return;
int num3 = Marshal.ReadInt32(num1);
IntPtr ptr = new IntPtr(num1.ToInt32() + 4);
for (int index = 0; index < num3; ++index)
var num3 = Marshal.ReadInt32(num1);
var ptr = new IntPtr(num1.ToInt32() + 4);
for (var index = 0; index < num3; ++index)
{
MIB_IFROW structure = (MIB_IFROW)Marshal.PtrToStructure(ptr, typeof(MIB_IFROW));
MIB_IFROW pIfRow = new MIB_IFROW();
var structure = (MIB_IFROW)Marshal.PtrToStructure(ptr, typeof(MIB_IFROW));
var pIfRow = new MIB_IFROW();
pIfRow.dwIndex = structure.dwIndex;
if (Win32Native.GetIfEntry(ref pIfRow) == 0)
if (GetIfEntry(ref pIfRow) == 0)
{
string str = Encoding.ASCII.GetString(structure.bDescr, 0, pIfRow.dwDescrLen - 1);
foreach (NetworkInterface networkInterface in networkInterfaces)
var str = Encoding.ASCII.GetString(structure.bDescr, 0, pIfRow.dwDescrLen - 1);
foreach (var networkInterface in networkInterfaces)
{
if (networkInterface.Description == str)
{
this._adapters.Add(structure.dwIndex, networkInterface);
_adapters.Add(structure.dwIndex, networkInterface);
break;
}
}
@@ -399,7 +309,7 @@ namespace Netch
public static implicit operator MIB_IPFORWARDROW(RouteEntry value)
{
MIB_IPFORWARDROW mibIpforwardrow = new MIB_IPFORWARDROW();
var mibIpforwardrow = new MIB_IPFORWARDROW();
mibIpforwardrow.dwForwardAge = value.Age;
mibIpforwardrow.dwForwardDest = BitConverter.ToUInt32(value.Destination.GetAddressBytes(), 0);
mibIpforwardrow.dwForwardMask = BitConverter.ToUInt32(value.Mask.GetAddressBytes(), 0);
@@ -413,7 +323,7 @@ namespace Netch
mibIpforwardrow.dwForwardPolicy = value.Policy;
mibIpforwardrow.dwForwardProto = value.Protocol;
mibIpforwardrow.dwForwardType = value.ForwardType;
AdaptersTable adaptersTable = new AdaptersTable();
var adaptersTable = new AdaptersTable();
mibIpforwardrow.dwForwardIfIndex = adaptersTable.GetAdapterIndex(value.RelatedInterface);
return mibIpforwardrow;
}