1
0
mirror of https://github.com/proxysu/ProxySU.git synced 2024-11-30 00:56:07 +03:00
ProxySU/ProxySU/SSpluginWindow.xaml.cs

405 lines
16 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace ProxySU
{
/// <summary>
/// SSpluginWindow.xaml 的交互逻辑
/// </summary>
public partial class SSpluginWindow : Window
{
//SS加密方法设定
public class EncryptionMethodInfo
{
public string Name { get; set; }
public string Value { get; set; }
}
public SSpluginWindow()
{
InitializeComponent();
#region chacha20-ietf-poly1305
List<EncryptionMethodInfo> methodList = new List<EncryptionMethodInfo>();
methodList.Add(new EncryptionMethodInfo { Name = "chacha20-ietf-poly1305", Value = "chacha20-ietf-poly1305" });
methodList.Add(new EncryptionMethodInfo { Name = "xchacha20-ietf-poly1305", Value = "xchacha20-ietf-poly1305" });
methodList.Add(new EncryptionMethodInfo { Name = "aes-256-gcm", Value = "aes-256-gcm" });
methodList.Add(new EncryptionMethodInfo { Name = "aes-192-gcm", Value = "aes-192-gcm" });
methodList.Add(new EncryptionMethodInfo { Name = "aes-128-gcm", Value = "aes-128-gcm" });
ComboBoxEncryptionMethodInfo.ItemsSource = methodList;
ComboBoxEncryptionMethodInfo.DisplayMemberPath = "Name";//显示出来的值
ComboBoxEncryptionMethodInfo.SelectedValuePath = "Value";//实际选中后获取的结果的值
ComboBoxEncryptionMethodInfo.SelectedIndex = 0;
DataContext = this;
#endregion
}
//取消不在当前活动选项卡中的其他所有选项卡中的所有RadioBuuton的选中状态
//代码参考网址https://blog.csdn.net/weixin_42583999/article/details/103468857
//调用UncheckLayouts((TabItem)TabControlTemplate.SelectedItem);
private void UncheckLayouts(TabItem activePage)
{
foreach (TabItem tabPage in TabControlTemplate.Items)
{
if (tabPage == activePage) continue;
Grid grid = (Grid)tabPage.Content;
foreach (UIElement element in grid.Children)
{
if (element is RadioButton)
{
RadioButton radiobutton = (element as RadioButton);
radiobutton.IsChecked = false;
}
}
}
}
//伪装网站处理
private void DisguiseURLprocessing()
{
//处理伪装网站域名中的前缀
if (TextBoxMaskSites.Text.ToString().Length >= 7)
{
string testDomain = TextBoxMaskSites.Text.Substring(0, 7);
if (String.Equals(testDomain, "https:/") || String.Equals(testDomain, "http://"))
{
MainWindow.ReceiveConfigurationParameters[7] = TextBoxMaskSites.Text.Replace("/", "\\/");
}
else
{
MainWindow.ReceiveConfigurationParameters[7] = "http:\\/\\/" + TextBoxMaskSites.Text;
}
}
}
private void ButtondDecide_Click(object sender, RoutedEventArgs e)
{
bool testDomain = true;
//UncheckLayouts(TabControlTemplate);
//SS 经典模式被选中
if (RadioButtonNonePluginSS.IsChecked == true)
{
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "NonePluginSS";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonNonePluginSS.Content.ToString();
}
//SS+obfs+http+web伪装模式被选中
else if (RadioButtonObfsPluginHttpWebSS.IsChecked == true)
{
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "ObfsPluginHttpWebSS";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonObfsPluginHttpWebSS.Content.ToString();
}
//SS+obfs+TLS+web模式被选中
else if (RadioButtonObfsPluginHttpsWebSS.IsChecked == true)
{
//if (string.IsNullOrEmpty(TextBoxDomainSS.Text.ToString()) == true)
//{
// //****** "域名不能为空,请检查相关参数设置!" ******
// MessageBox.Show(Application.Current.FindResource("MessageBoxShow_DomainNotEmpty").ToString());
// return;
//}
testDomain = TestDomainIsEmpty();
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "ObfsPluginHttpsWebSS";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonObfsPluginHttpsWebSS.Content.ToString();
//传递域名
MainWindow.ReceiveConfigurationParameters[4] = TextBoxDomainSS.Text.ToString();
}
//V2Ray-Plugin SS+WebSocket 无TLS模式被选中
else if (RadioButtonWebSocketSS.IsChecked == true)
{
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "WebSocketSS";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonWebSocketSS.Content.ToString();
//传递路径
MainWindow.ReceiveConfigurationParameters[6] = TextBoxWebSocketPathSS.Text.ToString();
}
//V2Ray-Plugin SS+WebSocket+TLS+Web模式被选中
else if (RadioButtonWebSocketTLSWebFrontSS.IsChecked == true || RadioButtonWebSocketTLSWebFrontSSHot.IsChecked == true)
{
testDomain = TestDomainIsEmpty();
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "WebSocketTLSWebFrontSS";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonWebSocketTLSWebFrontSS.Content.ToString();
//传递路径
MainWindow.ReceiveConfigurationParameters[6] = TextBoxWebSocketPathSS.Text.ToString();
//传递域名
MainWindow.ReceiveConfigurationParameters[4] = TextBoxDomainSS.Text.ToString();
//传递伪装网站
//MainWindow.ReceiveConfigurationParameters[7] = TextBoxMaskSites.Text.ToString();
//处理伪装网站域名中的前缀
//DisguiseURLprocessing();
//if (TextBoxMaskSites.Text.ToString().Length >= 7)
//{
// string testDomain = TextBoxMaskSites.Text.Substring(0, 7);
// if (String.Equals(testDomain, "https:/") || String.Equals(testDomain, "http://"))
// {
// //MessageBox.Show(testDomain);
// MainWindow.ReceiveConfigurationParameters[7] = TextBoxMaskSites.Text.Replace("/", "\\/");
// }
// else
// {
// MainWindow.ReceiveConfigurationParameters[7] = "http:\\/\\/" + TextBoxMaskSites.Text;
// }
//}
}
//V2Ray-Plugin SS+QUIC模式被选中
else if (RadioButtonQuicSS.IsChecked == true)
{
testDomain = TestDomainIsEmpty();
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "QuicSS";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonQuicSS.Content.ToString();
//传递域名
MainWindow.ReceiveConfigurationParameters[4] = TextBoxDomainSS.Text.ToString();
}
//SS+kcptun-plugin模式被选中
else if (RadioButtonKcptunPluginSS.IsChecked == true)
{
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "KcptunPluginSS";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonKcptunPluginSS.Content.ToString();
}
//SS+GoQuiet-Plugin模式被选中
else if (RadioButtonGoQuietPluginSS.IsChecked == true)
{
testDomain = TestDomainIsEmpty();
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "GoQuietPluginSS";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonGoQuietPluginSS.Content.ToString();
//传递域名
MainWindow.ReceiveConfigurationParameters[4] = TextBoxDomainSS.Text.ToString();
}
//SS+Cloak-Plugin模式被选中
else if (RadioButtonCloakPluginSS.IsChecked == true)
{
testDomain = TestDomainIsEmpty();
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "CloakPluginSS";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonCloakPluginSS.Content.ToString();
//传递域名
MainWindow.ReceiveConfigurationParameters[4] = TextBoxDomainSS.Text.ToString();
}
//传递服务端口
MainWindow.ReceiveConfigurationParameters[1] = TextBoxServerListenPortSS.Text.ToString();
//传递uuid密码
MainWindow.ReceiveConfigurationParameters[2] = TextBoxNewUUIDSS.Text.ToString();
//传递加密方式
MainWindow.ReceiveConfigurationParameters[3] = GetEncryptionMethodSS();
if (testDomain)
{
this.Close();
}
}
private void ButtondCancel_Click(object sender, RoutedEventArgs e) => Close();
#region
//无插件的界面
private void RadioButtonNonePluginSS_Checked(object sender, RoutedEventArgs e)
{
//隐藏Websocket Path
TextBlockWebSocketPathSS.Visibility = Visibility.Collapsed;
TextBoxWebSocketPathSS.Visibility = Visibility.Collapsed;
ButtonWebSocketPathSS.Visibility = Visibility.Collapsed;
//隐藏域名
TextBlockDomainSS.Visibility = Visibility.Collapsed;
TextBoxDomainSS.Visibility = Visibility.Collapsed;
//检测域名按钮
ButtonDomain.Visibility = Visibility.Collapsed;
//隐藏伪装网站
TextBlockMaskSites.Visibility = Visibility.Collapsed;
TextBoxMaskSites.Visibility = Visibility.Collapsed;
//初始化密码
TextBoxNewUUIDSS.Text = GenerateRandomUUID();
//初始化端口
TextBoxServerListenPortSS.Text = GenerateRandomPort().ToString();
//清除其他选项卡中的选项
UncheckLayouts((TabItem)TabControlTemplate.SelectedItem);
}
//使用域名启用TLS 无Websocket的界面
private void RadioButtonUseDomainTls_Checked(object sender, RoutedEventArgs e)
{
TextBoxServerListenPortSS.Text = "443";
//隐藏Websocket Path
TextBlockWebSocketPathSS.Visibility = Visibility.Collapsed;
TextBoxWebSocketPathSS.Visibility = Visibility.Collapsed;
ButtonWebSocketPathSS.Visibility = Visibility.Collapsed;
//显示域名
TextBlockDomainSS.Visibility = Visibility.Visible;
TextBoxDomainSS.Visibility = Visibility.Visible;
//检测域名按钮
ButtonDomain.Visibility = Visibility.Collapsed;
//隐藏伪装网站
TextBlockMaskSites.Visibility = Visibility.Collapsed;
TextBoxMaskSites.Visibility = Visibility.Collapsed;
//初始化密码
TextBoxNewUUIDSS.Text = GenerateRandomUUID();
//初始化端口
//TextBoxServerListenPortSS.Text = GenerateRandomPort().ToString();
//清除其他选项卡中的选项
UncheckLayouts((TabItem)TabControlTemplate.SelectedItem);
}
//使用V2ray-plugin 的Websocket over https (TLS)
private void RadioButtonUseDomainWebsocketTls_Checked(object sender, RoutedEventArgs e)
{
TextBoxServerListenPortSS.Text = "443";
//显示Websocket Path
TextBlockWebSocketPathSS.Visibility = Visibility.Visible;
TextBoxWebSocketPathSS.Visibility = Visibility.Visible;
ButtonWebSocketPathSS.Visibility = Visibility.Visible;
//显示域名
TextBlockDomainSS.Visibility = Visibility.Visible;
TextBoxDomainSS.Visibility = Visibility.Visible;
//检测域名按钮
ButtonDomain.Visibility = Visibility.Collapsed;
//隐藏伪装网站
TextBlockMaskSites.Visibility = Visibility.Collapsed;
TextBoxMaskSites.Visibility = Visibility.Collapsed;
//初始化密码
TextBoxNewUUIDSS.Text = GenerateRandomUUID();
//初始化端口
//TextBoxServerListenPortSS.Text = GenerateRandomPort().ToString();
//初始化Websocket Path
TextBoxWebSocketPathSS.Text = GenerateRandomPath();
//清除其他选项卡中的选项
UncheckLayouts((TabItem)TabControlTemplate.SelectedItem);
}
#endregion
//加密方法更改后的动作
private void ComboBoxEncryptionMethodInfo_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//传递加密方式
MainWindow.ReceiveConfigurationParameters[3] = GetEncryptionMethodSS();
}
//产生随机的uuid
private void ButtonNewUUID_Click(object sender, RoutedEventArgs e)
{
TextBoxNewUUIDSS.Text = GenerateRandomUUID();
}
//产生随机服务端口
private void ButtonServerListenPort_Click(object sender, RoutedEventArgs e)
{
TextBoxServerListenPortSS.Text = GenerateRandomPort().ToString();
}
//产生随机的Path
private void ButtonPath_Click(object sender, RoutedEventArgs e)
{
TextBoxWebSocketPathSS.Text = GenerateRandomPath();
}
#region
//产生随机的UUID
private string GenerateRandomUUID()
{
Guid uuid = Guid.NewGuid();
return uuid.ToString();
}
//产生随机端口
private int GenerateRandomPort()
{
Random random = new Random();
return random.Next(30001, 50000);
}
//读取加密方式
private string GetEncryptionMethodSS()
{
//string methodName;
//object methodSelected;
//methodSelected = ComboBoxEncryptionMethodInfo.SelectedValue;
//methodName = methodSelected.ToString();
//return methodName;
return ComboBoxEncryptionMethodInfo.SelectedValue.ToString();
}
//产生随机的Path
private string GenerateRandomPath()
{
Random random = new Random();
int randomSerialNum = random.Next(0, 4);
Guid uuid = Guid.NewGuid();
string[] pathArray = uuid.ToString().Split('-');
string path = pathArray[randomSerialNum];
return $"/{path}";
}
#endregion
//域名检测是否为空
private bool TestDomainIsEmpty()
{
if (string.IsNullOrEmpty(TextBoxDomainSS.Text.ToString()) == true)
{
//****** "域名不能为空,请检查相关参数设置!" ******
MessageBox.Show(Application.Current.FindResource("MessageBoxShow_DomainNotEmpty").ToString());
return false;
}
else
{
return true;
}
}
}
}