using System.Diagnostics;
namespace OnlineSalesAutoCrop.WS
{
///
///
///
public static class HeplerFunctions
{
///
///
///
/// Port used by Remote Desktop
/// Port used by AnyDesk
///
public static string GetRemoteIp(string adPort, string rdPort, out bool isAnyDesk)
{
isAnyDesk = false;
string remoteId = string.Empty;
adPort = string.IsNullOrEmpty(adPort) ? "7070" : adPort;
rdPort = string.IsNullOrEmpty(rdPort) ? "3389" : rdPort;
ProcessStartInfo startInfo = new(fileName: "netstat", arguments: "-n") { CreateNoWindow = true, UseShellExecute = false, RedirectStandardOutput = true };
using Process? process = Process.Start(startInfo: startInfo);
if (process != null)
{
string output = process.StandardOutput.ReadToEnd();
remoteId = ParseArpResult(output: output, portNo: adPort);
if (!string.IsNullOrEmpty(remoteId))
{
isAnyDesk = true;
}
else
{
remoteId = ParseArpResult(output: output, portNo: rdPort);
isAnyDesk = false;
}
}
return remoteId;
}
///
///
///
///
///
private static string ParseArpResult(string output, string portNo)
{
if (string.IsNullOrEmpty(output))
return string.Empty;
foreach (string line in output.Split(Environment.NewLine))
{
string[] tokens = line.Split(' ', StringSplitOptions.RemoveEmptyEntries);
if (tokens?.Length != 4)
continue;
if (!tokens[3].Equals("ESTABLISHED", comparisonType: StringComparison.OrdinalIgnoreCase))
continue;
string[] parts = tokens[1].Split(':');
if (parts.Length == 2 && portNo.Equals(parts[1]))
{
parts = tokens[2].Split(':');
if (parts.Length == 2)
{
return parts[0];
}
return string.Empty;
}
}
return string.Empty;
}
}
public class NoContentRequest
{
public int NoParameter { get; set; }
}
public class IpHostResponse
{
public int Status { get; set; }
public string HostName { get; set; } = string.Empty;
public string IpAddress { get; set; } = string.Empty;
public string RemoteHost { get; set; } = string.Empty;
public string MacAddress { get; set; } = string.Empty;
}
public class AppSettings
{
public required string StartIpBlock { get; set; }
public required string AnyDeskPort { get; set; }
public required string RemoteDesktopPort { get; set; }
}
}