zoukankan      html  css  js  c++  java
  • C# 获取windows下端口占用与进程名称

    void Main()
    {
        GetNetStatPorts().Dump();
    }
    
    // ===============================================
    // The Method That Parses The NetStat Output
    // And Returns A List Of Port Objects
    // ===============================================
    public static List<Port> GetNetStatPorts()
    {
        var Ports = new List<Port>();
    
        try
        {
            using (Process p = new Process())
            {
    
                ProcessStartInfo ps = new ProcessStartInfo();
                ps.Arguments = "-a -n -o";
                ps.FileName = "netstat.exe";
                ps.UseShellExecute = false;
                ps.WindowStyle = ProcessWindowStyle.Hidden;
                ps.RedirectStandardInput = true;
                ps.RedirectStandardOutput = true;
                ps.RedirectStandardError = true;
    
                p.StartInfo = ps;
                p.Start();
    
                StreamReader stdOutput = p.StandardOutput;
                StreamReader stdError = p.StandardError;
    
                string content = stdOutput.ReadToEnd() + stdError.ReadToEnd();
                string exitStatus = p.ExitCode.ToString();
    
                if (exitStatus != "0")
                {
                    // Command Errored. Handle Here If Need Be
                }
    
                //Get The Rows
                string[] rows = Regex.Split(content, "
    ");
                foreach (string row in rows)
                {
                    //Split it baby
                    string[] tokens = Regex.Split(row, "\s+");
                    if (tokens.Length > 4 && (tokens[1].Equals("UDP") || tokens[1].Equals("TCP")))
                    {
                        string localAddress = Regex.Replace(tokens[2], @"[(.*?)]", "1.1.1.1");
                        Ports.Add(new Port
                        {
                            protocol = localAddress.Contains("1.1.1.1") ? String.Format("{0}v6", tokens[1]) : String.Format("{0}v4", tokens[1]),
                            port_number = localAddress.Split(':')[1],
                            process_name = tokens[1] == "UDP" ? LookupProcess(Convert.ToInt16(tokens[4])) : LookupProcess(Convert.ToInt16(tokens[5]))
                        });
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        return Ports;
    }
    
    public static string LookupProcess(int pid)
    {
        string procName;
        try { procName = Process.GetProcessById(pid).ProcessName; }
        catch (Exception) { procName = "-"; }
        return procName;
    }
    
    // ===============================================
    // The Port Class We're Going To Create A List Of
    // ===============================================
    public class Port
    {
        public string name
        {
            get
            {
                return string.Format("{0} ({1} port {2})", this.process_name, this.protocol, this.port_number);
            }
            set { }
        }
        public string port_number { get; set; }
        public string process_name { get; set; }
        public string protocol { get; set; }
    }
    // Define other methods and classes here
  • 相关阅读:
    JDBC 连接 MySQL 数据库
    通过java类的反射机制获取类的属性类型
    反射机制实例化类,并获取类中的属性、方法、和构造器
    java8u162反射机制的一个BUG
    Java反射关于getDeclaredMethods()和getMethods()的区别
    Java反射
    30天C#基础巩固------了解委托,string练习
    30天C#基础巩固------读写流(StreamWrite/StreamReader)
    30天C#基础巩固------集合,File(文件操作 ),Encoding处理字符集
    30天C#基础巩固------面向鸭子编程,关于string和File的练习
  • 原文地址:https://www.cnblogs.com/nanfei/p/14108164.html
Copyright © 2011-2022 走看看