返回顶部

收藏

Windows下通过C#获取下指定进程监听的TCP/UDP端口号

更多

Windows下通过C#获取下指定进程监听的TCP/UDP端口号 作者:阿凡卢 出处:http://www.cnblogs.com/luxiaoxun/ 1、在Windows下用CMD netstat命令可以获得当前进程监听端口号的信息,如netstat -ano可以看到IP、port、状态和监听的PID。

那么可以执行CMD这个进程得到监听的端口号信息,C#代码如下:```csharp //进程id

        int pid = ProcInfo.ProcessID;

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

        List<int> ports = new List<int>();

        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#

收藏

0人收藏

支持

0

反对

0

发表评论