C#获取Windows进程监听的TCP/UDP端口实例

1、在Windows下用CMD netstat命令可以获得当前进程监听端口号的信息,如netstat -ano可以看到IP、port、状态和监听的PID。
那么可以执行CMD这个进程得到监听的端口号信息,C#代码如下:

复制代码 代码如下:

//进程id

            int pid = ProcInfo.ProcessID;

           

            //存放进程使用的端口号链表

            List ports = new List();

 

            Process pro = new Process();

            pro.StartInfo.FileName = "cmd.exe";

            pro.StartInfo.UseShellExecute = false;

            pro.StartInfo.RedirectStandardInput = true;

            pro.StartInfo.RedirectStandardOutput = true;

            pro.StartInfo.RedirectStandardError = true;

            pro.StartInfo.CreateNoWindow = true;

            pro.Start();

            pro.StandardInput.WriteLine("netstat -ano");

            pro.StandardInput.WriteLine("exit");

            Regex reg = new Regex("\\s+", RegexOptions.Compiled);

            string line = null;

            ports.Clear();

            while ((line = pro.StandardOutput.ReadLine()) != null)

            {

                line = line.Trim();

                if (line.StartsWith("TCP", StringComparison.OrdinalIgnoreCase))

                {

                    line = reg.Replace(line, ",");

                    string[] arr = line.Split(',');

                    if (arr[4] == pid.ToString())

                    {

                        string soc = arr[1];

                        int pos = soc.LastIndexOf(':');

                        int pot = int.Parse(soc.Substring(pos + 1));

                        ports.Add(pot);

                    }

                }

                else if (line.StartsWith("UDP", StringComparison.OrdinalIgnoreCase))

                {

                    line = reg.Replace(line, ",");

                    string[] arr = line.Split(',');

                    if (arr[3] == pid.ToString())

                    {

                        string soc = arr[1];

                        int pos = soc.LastIndexOf(':');

                        int pot = int.Parse(soc.Substring(pos + 1));

                        ports.Add(pot);

                    }

                }

            }

            pro.Close();

你可能感兴趣的:(C#获取Windows进程监听的TCP/UDP端口实例)