feat: 添加获取端口代理工具命令行功能
This commit is contained in:
@@ -1,9 +1,113 @@
|
||||
namespace PortProxyTool.Cli;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace PortProxyTool.Cli;
|
||||
|
||||
internal static class Program
|
||||
{
|
||||
private static void Main(string[] args)
|
||||
{
|
||||
Console.WriteLine("Hello, World!");
|
||||
if (args.Length == 0)
|
||||
AnsiConsole.MarkupLine(
|
||||
$"[red]用法[/][gray]: [/][white]{Environment.ProcessPath ?? Environment.GetCommandLineArgs()[0]} [red]<命令>[/] [gray][[<参数>]][/][/]");
|
||||
else
|
||||
switch (args[0])
|
||||
{
|
||||
case "get":
|
||||
switch (args.Length)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
var portProxies = PortProxy.GetPortProxies();
|
||||
if (portProxies.Length == 0)
|
||||
{
|
||||
AnsiConsole.MarkupLine("[red]无端口代理[/]");
|
||||
}
|
||||
else
|
||||
{
|
||||
AnsiConsole.MarkupLine("[white]端口代理列表[/][gray]: [/]");
|
||||
for (var index = 0; index < portProxies.Length; index++)
|
||||
{
|
||||
var portProxy = portProxies[index];
|
||||
var type = portProxy.Type switch
|
||||
{
|
||||
PortProxyType.V4ToV4 => "[green]IPv4[/] [white]->[/] [green]IPv4[/]",
|
||||
PortProxyType.V4ToV6 => "[green]IPv4[/] [white]->[/] [blue]IPv6[/]",
|
||||
PortProxyType.V6ToV6 => "[blue]IPv6[/] [white]->[/] [blue]IPv6[/]",
|
||||
PortProxyType.V6ToV4 => "[blue]IPv6[/] [white]->[/] [green]IPv4[/]",
|
||||
_ => throw new ArgumentOutOfRangeException()
|
||||
};
|
||||
var targetPort = portProxy.TargetPort switch
|
||||
{
|
||||
null => "[red]未知[/]",
|
||||
_ => portProxy.TargetPort.ToString()
|
||||
};
|
||||
AnsiConsole.MarkupLine(
|
||||
$"[gray]{index + 1}.[/] {type} [gray]|[/] [white]{portProxy.ListenAddress}[/][gray]:[/][white]{portProxy.ListenPort}[/][gray] -> [/][white]{portProxy.TargetAddress ?? "[red]未知[/]"}[/][gray]:[/][white]{targetPort}[/]");
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
PortProxyType type;
|
||||
switch (args[1])
|
||||
{
|
||||
case "v4tov4":
|
||||
type = PortProxyType.V4ToV4;
|
||||
break;
|
||||
case "v4tov6":
|
||||
type = PortProxyType.V4ToV6;
|
||||
break;
|
||||
case "v6tov6":
|
||||
type = PortProxyType.V6ToV6;
|
||||
break;
|
||||
case "v6tov4":
|
||||
type = PortProxyType.V6ToV4;
|
||||
break;
|
||||
default:
|
||||
AnsiConsole.MarkupLine(
|
||||
"[red]参数错误[/][gray]:[/] [white]接受的参数为 v4tov4, v4tov6, v6tov6, v6tov4[/]");
|
||||
return;
|
||||
}
|
||||
|
||||
var portProxies = PortProxy.GetPortProxies().Where(x => x.Type == type).ToArray();
|
||||
if (portProxies.Length == 0)
|
||||
{
|
||||
AnsiConsole.MarkupLine("[red]无端口代理[/]");
|
||||
}
|
||||
else
|
||||
{
|
||||
var typeStr = type switch
|
||||
{
|
||||
PortProxyType.V4ToV4 => "[green]IPv4[/] [white]->[/] [green]IPv4[/]",
|
||||
PortProxyType.V4ToV6 => "[green]IPv4[/] [white]->[/] [blue]IPv6[/]",
|
||||
PortProxyType.V6ToV6 => "[blue]IPv6[/] [white]->[/] [blue]IPv6[/]",
|
||||
PortProxyType.V6ToV4 => "[blue]IPv6[/] [white]->[/] [green]IPv4[/]",
|
||||
_ => throw new ArgumentOutOfRangeException()
|
||||
};
|
||||
AnsiConsole.MarkupLine($"[white]{typeStr} 端口代理列表[/][gray]: [/]");
|
||||
for (var index = 0; index < portProxies.Length; index++)
|
||||
{
|
||||
var portProxy = portProxies[index];
|
||||
var targetPort = portProxy.TargetPort switch
|
||||
{
|
||||
null => "[red]未知[/]",
|
||||
_ => portProxy.TargetPort.ToString()
|
||||
};
|
||||
AnsiConsole.MarkupLine(
|
||||
$"[gray]{index + 1}.[/] {typeStr} [gray]|[/] [white]{portProxy.ListenAddress}[/][gray]:[/][white]{portProxy.ListenPort}[/][gray] -> [/][white]{portProxy.TargetAddress ?? "[red]未知[/]"}[/][gray]:[/][white]{targetPort}[/]");
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
AnsiConsole.MarkupLine("[red]用法错误[/]");
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user