当运行此代码并安装自定义证书时;localhost仍处于启用状态,但没有一个网站正常工作。我做错了什么?我已经要求ChatGPT查看代码,他们做了一些调整,但它仍然不能正常工作。这是我的代码:
using System;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;
using WebSocketSharp;
using WebSocketSharp.Server;
namespace WebSocketDecoder
{
public partial class Form1 : Form
{
private WebSocketServer _webSocketServer;
private const string ProxyServerAddress = "localhost:8443";
public Form1()
{
InitializeComponent();
StartWebSocketProxy();
EnableProxy();
}
private void StartWebSocketProxy()
{
try
{
_webSocketServer = new WebSocketServer(IPAddress.Any, 8443, true);
_webSocketServer.SslConfiguration.ServerCertificate = new X509Certificate2("cert.pfx", "yourpassword");
_webSocketServer.SslConfiguration.ClientCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
_webSocketServer.AddWebSocketService<ProxyBehavior>("/BlueBox/websocket");
_webSocketServer.Start();
LogMessage("WebSocket proxy server started on wss://localhost:8443/BlueBox/websocket");
}
catch (Exception ex)
{
LogMessage("Failed to start WebSocket proxy server: " + ex.Message);
}
}
private void EnableProxy()
{
try
{
RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);
if (registry != null)
{
registry.SetValue("ProxyEnable", 1);
registry.SetValue("ProxyServer", ProxyServerAddress);
LogMessage("Proxy enabled: " + ProxyServerAddress);
}
}
catch (Exception ex)
{
LogMessage("Failed to enable proxy: " + ex.Message);
}
}
private void DisableProxy()
{
try
{
RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);
if (registry != null)
{
registry.SetValue("ProxyEnable", 0);
LogMessage("Proxy disabled.");
}
}
catch (Exception ex)
{
LogMessage("Failed to disable proxy: " + ex.Message);
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
DisableProxy();
_webSocketServer.Stop();
LogMessage("WebSocket proxy server stopped.");
}
public TextBox DecodedOutputTextBox => txtDecodedOutput; // Expose the TextBox via a public property
private void LogMessage(string message)
{
if (txtDecodedOutput.InvokeRequired)
{
txtDecodedOutput.Invoke(new Action(() => LogMessage(message)));
}
else
{
txtDecodedOutput.AppendText(message + Environment.NewLine);
}
}
}
public class ProxyBehavior : WebSocketBehavior
{
private WebSocket _client;
protected override void OnOpen()
{
LogMessage("Connection opened with client.");
try
{
_client = new WebSocket("wss://prod-message1.wc.kixeye.com:8443/BlueBox/websocket");
_client.SslConfiguration.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
_client.OnOpen += (sender, e) => LogMessage("Connected to server.");
_client.OnMessage += (sender, e) =>
{
LogMessage("Message received from server.");
if (e.IsBinary)
{
var decodedMessage = ProcessDataByHeaderType(e.RawData);
LogMessage($"Decoded message: {decodedMessage}");
Program.MainForm.Invoke((MethodInvoker)(() => Program.MainForm.DecodedOutputTextBox.AppendText("Decoded message: " + decodedMessage + Environment.NewLine)));
Send(e.RawData); // Forward raw message to the browser
}
else
{
LogMessage("Received non-binary message from server.");
}
};
_client.OnError += (sender, e) => LogMessage("Error: " + e.Message);
_client.OnClose += (sender, e) => LogMessage("Disconnected from server.");
_client.Connect();
}
catch (Exception ex)
{
LogMessage("Failed to connect to server: " + ex.Message);
}
}
protected override void OnMessage(MessageEventArgs e)
{
LogMessage("Message received from client.");
try
{
_client.Send(e.RawData); // Forward message from browser to server
}
catch (Exception ex)
{
LogMessage("Failed to send message to server: " + ex.Message);
}
}
protected override void OnClose(CloseEventArgs e)
{
LogMessage("Connection closed.");
_client.Close();
}
private string ProcessDataByHeaderType(byte[] buffer)
{
if (buffer.Length == 0)
return "Empty data";
byte headerType = buffer[0];
LogMessage($"Processing data with header type {headerType}");
switch (headerType)
{
case 1:
return DecodeType1(buffer);
case 2:
return DecodeType2(buffer);
default:
return "Unknown header type";
}
}
private string DecodeType1(byte[] buffer)
{
if (buffer.Length < 3)
return "Invalid data for Type 1";
ushort header = BitConverter.ToUInt16(buffer, 1);
string payload = Encoding.UTF8.GetString(buffer, 3, buffer.Length - 3);
return $"Type 1 - Header: {header}, Payload: {payload}";
}
private string DecodeType2(byte[] buffer)
{
if (buffer.Length < 5)
return "Invalid data for Type 2";
int header = BitConverter.ToInt32(buffer, 1);
string payload = Encoding.UTF8.GetString(buffer, 5, buffer.Length - 5);
return $"Type 2 - Header: {header}, Payload: {payload}";
}
private void LogMessage(string message)
{
Program.MainForm.Invoke((MethodInvoker)(() => Program.MainForm.DecodedOutputTextBox.AppendText(message + Environment.NewLine)));
}
}
}
我没有任何线索,因为在Visual Studio中运行时没有发生实际错误。
我不知道,因为Visual Studio中有0个错误。