我想用C#运行“ cmd”命令以获取计算机中所有打开的端口。
首先,我不知道为什么IPGlobalProperties
不显示所有打开的端口和套接字,例如udp
端口。
为了获取所有端口和套接字,我在C#中将netstat
命令与ProcessInfo
一起使用。
出于某些原因,我想多次运行我的应用程序。
当我首先运行该应用程序时,它可以快速运行并且可以。但是多次运行后,它运行缓慢。
例如,当我第五次运行它时,它会在几分钟后运行!
这是我的代码的一部分:
Port = 9999;
ProcessStartInfo ProcessInfo;
Process Process;
List<int> openPorts = new List<int>();
Repeat:
ProcessInfo = new ProcessStartInfo("cmd.exe", "/K " + "netstat -an | find " + "\"" + Port + "\"");
ProcessInfo.CreateNoWindow = true;
ProcessInfo.UseShellExecute = false;
ProcessInfo.RedirectStandardOutput = true;
Process = Process.Start(ProcessInfo);
StreamReader reader = Process.StandardOutput;
string result = reader.ReadLine();
Process.Kill();
Process.WaitForExit();
if (result.Contains(networkPort.ToString()))
{
openPorts.Add(networkPort);
Port++;
goto Repeat;
}
dosomething();
有人知道为什么吗?
我只想要计算机中所有打开的套接字和端口的列表。
使用C#本身或cmd无关紧要如何获得它,我只是希望它速度快。
我该怎么做?
答案 0 :(得分:0)
因此,这不会回答您的问题,但可能会引导您朝正确的方向发展。此代码将为您提供所有使用的端口:
static void Main(string[] args)
{
var props = IPGlobalProperties.GetIPGlobalProperties();
var conns = props.GetActiveTcpConnections();
foreach (var conn in conns)
{
Console.WriteLine((conn.LocalEndPoint.Port));
}
Console.ReadKey();
}