查看端口连接状态

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.ServiceModel.Description;
using System.Text;
using System.Threading.Tasks;

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            var portList = new List<int>();
            portList.Add(3389);
            portList.Add(5900);
            portList.Add(1500);

            var portDic = GetConnectionsStatus(portList);

            foreach (var kvp in portDic)
            {
                Console.WriteLine("如下端口已经建立连接, 连接信息为:port = {0}, remote = {1}", kvp.Key, GetHostNameByIp(kvp.Value.Address.ToString()));
            }  
          
            Console.WriteLine();
            Console.ReadLine();
        }

        public static Dictionary<int, IPEndPoint> GetConnectionsStatus(List<int> portList)
        {
            var myDictionary = new Dictionary<int, IPEndPoint>();

            var properties = IPGlobalProperties.GetIPGlobalProperties();
            var connections = properties.GetActiveTcpConnections();
            string ip = GetLocalIp();

            foreach (var t in connections)
            {
                if (t.State == TcpState.Established
                  && t.LocalEndPoint.Address.ToString() == ip
                && portList.Contains(t.LocalEndPoint.Port))
                {
                    myDictionary.Add(t.LocalEndPoint.Port, t.RemoteEndPoint);
                }
            }
            return myDictionary;
        }

        static string GetLocalIp()
        {
            string hostname = Dns.GetHostName();//得到本机名   
            IPHostEntry localhost = Dns.GetHostByName(hostname);//只得到IPv4的地址   
            //IPHostEntry localhost = Dns.GetHostEntry(hostname);//IPv4和IPV6地址
            IPAddress localaddr = localhost.AddressList[0];
            return localaddr.ToString();
        }

        public static string GetHostNameByIp(string ip)
        {
            ip = ip.Trim();
            if (ip == string.Empty)
                return string.Empty;
            try
            {
                // 是否 Ping 的通
                //if (this.Ping(ip))
               // {
                    System.Net.IPHostEntry host = System.Net.Dns.GetHostEntry(ip);
                    return host.HostName;
              // }
                //else
                 //   return string.Empty;
            }
            catch (Exception)
            {
                return string.Empty;
            }
        }
    }
}

 

posted on 2015-01-20 13:19  harrell  阅读(409)  评论(0编辑  收藏  举报