C#實現得到本機IP以及網關地址


  最近在寫一個局域網控制軟件,需要得到本機IP以及網關地址。Google搜了一些,並沒有個很好的辦法,於是自己摸索寫下了這個方法。如果覺得有些地方欠妥的話,希望能夠回帖指正。謝謝!

  

        /// <summary>
        /// 得到本機IP
        /// </summary>
        private string GetLocalIP() 
        {
            //本機IP地址
            string strLocalIP = "";
            //得到計算機名
            string strPcName = Dns.GetHostName();
            //得到本機IP地址數組
            IPHostEntry ipEntry = Dns.GetHostEntry(strPcName);
            //遍歷數組
            foreach(var IPadd in ipEntry.AddressList)
            {
                //判斷當前字符串是否為正確IP地址
                if (IsRightIP(IPadd.ToString())) 
                {
                    //得到本地IP地址
                    strLocalIP = IPadd.ToString();
                    //結束循環
                    break;
                }
            }

            //返回本地IP地址
            return strLocalIP;
        }

  

        //得到網關地址
        private string GetGateway() 
        { 
            //網關地址
            string strGateway = "";
            //獲取所有網卡
            NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
            //遍歷數組
            foreach (var netWork in nics)
            {
                //單個網卡的IP對象
                IPInterfaceProperties ip = netWork.GetIPProperties();
                //獲取該IP對象的網關
                GatewayIPAddressInformationCollection gateways = ip.GatewayAddresses;
                foreach(var gateWay in gateways)
                {
                    //如果能夠Ping通網關
                    if(IsPingIP(gateWay.Address.ToString()))
                    {
                        //得到網關地址
                        strGateway = gateWay.Address.ToString();
                        //跳出循環
                        break;
                    }
                }

                //如果已經得到網關地址
                if (strGateway.Length > 0) 
                {
                    //跳出循環
                    break;
                }
            }

            //返回網關地址
            return strGateway;
        }

  

        /// <summary>
        /// 判斷是否為正確的IP地址
        /// </summary>
        /// <param name="strIPadd">需要判斷的字符串</param>
        /// <returns>true = 是 false = 否</returns>
        public static bool IsRightIP(string strIPadd) 
        {
            //利用正則表達式判斷字符串是否符合IPv4格式
            if (Regex.IsMatch(strIPadd, "[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}"))
            {
                //根據小數點分拆字符串
                string[] ips = strIPadd.Split('.');
                if (ips.Length == 4 || ips.Length == 6)
                {
                    //如果符合IPv4規則
                    if (System.Int32.Parse(ips[0]) < 256 && System.Int32.Parse(ips[1]) < 256 & System.Int32.Parse(ips[2]) < 256 & System.Int32.Parse(ips[3]) < 256)
                        //正確
                        return true;
                    //如果不符合
                    else
                        //錯誤
                        return false;
                }
                else
                    //錯誤
                    return false;
            }
            else
                //錯誤
                return false;
        }

  

        /// <summary>
        /// 嘗試Ping指定IP是否能夠Ping通
        /// </summary>
        /// <param name="strIP">指定IP</param>
        /// <returns>true 是 false 否</returns>
        public static bool IsPingIP(string strIP) 
        {
            try
            {
                //創建Ping對象
                Ping ping = new Ping();
                //接受Ping返回值
                PingReply reply = ping.Send(strIP, 1000);
                //Ping通
                return true;
            }
            catch 
            {
                //Ping失敗
                return false;
            }
        }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM