Ping命令检测网站运行状态

来源:互联网 发布:knn算法matlab 编辑:程序博客网 时间:2024/05/22 00:21

Ping命令检测网站运行状态
最近,小编在项目中遇到一个问题,检测服务上网站的运行状况,其中,用到了Ping命令来测试

Ping的是什么?IP地址或者域名
DNS:正向解析,将域名转换成IP地址,域名解析协议
RDNS:反向解析,将IP地址转换成域名

主要包含三步
第一, 检测本地网络连接状态
第二, 检测与服务器的网络连接状态
第三, 检测服务器上网站的运行状态

代码如下

using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.NetworkInformation;using System.Text.RegularExpressions;using System.Web;using WebDetection.Model;namespace WebDetection{    public class DetectionWeb    {        #region 检测网站运行状态        /// <summary>        /// 检测网站运行状态        /// </summary>        /// <returns></returns>        public static bool CheckWeb()        {            // 获取xml文件            List<WebXMLmodel> list = OperateXML.readXML();            foreach (WebXMLmodel listItem in list)            {                // 获取检查网址                string WebUrl = listItem.weburl.Trim();                // 检查网站的格式                bool Format = FormatWebUrl(WebUrl);                if (Format == false)                {                    listItem.httpdescription = "网站的网址格式不正确!";                    listItem.Webstate = "失败";                    return true;                }                // 检查与服务器的连接状态                bool Result = PingWebUrl(WebUrl);                if (Result == false)                {                    listItem.httpdescription = "无法Ping通网站!";                    listItem.Webstate = "失败";                    return true;                }                // 检测网站的运行状态                string str = CheckWebStatus(WebUrl);                // http的状态码                string httpcode = str.Substring(0, 3);                // http的返回值                string httpresult = str.Substring(3);                // http状态码详情                string httpdescription = Checkhttpcode(httpcode);                // 循环遍历赋值                listItem.httpcode = httpcode;                listItem.httpresult = httpresult;                listItem.httpdescription = httpdescription;                // 网站访问是否成功                if (httpcode == "200")                {                    listItem.Webstate = "成功";                    listItem.ismail = "未发送";                }                else                {                    listItem.Webstate = "失败";                }                // 更新当前网站的状态                bool flag = OperateXML.writeXML(list);            }            return true;        }        #endregion        #region 检测当前网络状态        /// <summary>        /// 检测当前网络状态        /// </summary>        /// <returns></returns>        public static bool Ping()        {            bool PinhRight = false;            try            {                // Ping百度                Ping Ping = new Ping();                string WebUrl = "www.baidu.com";                PingReply ReCode = Ping.Send(WebUrl);                // Ping 成功!                if (ReCode.Status == IPStatus.Success)                {                    PinhRight = true;                }                return PinhRight;            }            catch            {                return PinhRight;            }        }        #endregion        #region 检查网址格式是否正确        /// <summary>        /// 检查网址格式是否正确        /// </summary>        /// <param name="WebUrl"></param>        /// <returns></returns>        public static bool FormatWebUrl(string WebUrl)        {            bool result = false;            if (WebUrl != null && WebUrl != "")            {                var strRegex = @"^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&$%\$#\=~])*$";                Regex re = new Regex(strRegex);                if (re.IsMatch(WebUrl))                {                    result = true;                }            }            return result;        }        #endregion        #region Ping网站网址        /// <summary>        /// Ping网站网址        /// </summary>        /// <param name="WebUrl"></param>        /// <returns></returns>        public static bool PingWebUrl(string WebUrl)        {            // 移除所有空白字符            WebUrl = WebUrl.Trim();            // 判断协议,http、https            string deal = WebUrl.ToLower().Substring(0, 5);            // 网址截止位置            int index;            // 需要Ping的网址            string PingWeb;            // https协议            if (deal == "https")            {                // 从第8位开始,搜索返回第一个"/"号出现的位置                // 默认下标从0开始                index = WebUrl.ToLower().IndexOf('/', 8);                if (index == -1)                {                    // 从第8位开始,包含第8位,取到结尾                    PingWeb = WebUrl.Substring(8);                }                else                {                    // 从第8位开始,取index-8个字符                    PingWeb = WebUrl.Substring(8, index-8);                }            }            else            {                 // http协议                // 从第7位开始,搜索返回第一个"/"号出现的位置                // 默认下标从0开始                index = WebUrl.ToLower().IndexOf('/', 7);                if (index == -1)                {                    // 从第8位开始,包含第7位,取到结尾                    // 默认下标从0开始                    PingWeb = WebUrl.Substring(7);                }                else                {                    // 从第7位开始,取index-7个字符                    PingWeb = WebUrl.Substring(7, index-7);                }            }            // Ping网址            bool PingResult = PingWebAddress(PingWeb);            return PingResult;        }        #endregion        #region 检测与服务器的网络连接状态        /// <summary>        /// 检测与服务器的网络连接状态        /// </summary>        /// <param name="WebUrl"></param>        /// <returns></returns>        public static bool PingWebAddress(string PingWebAddress)        {            bool PinhRight = false;            try            {                Ping Ping = new Ping();                PingReply ReCode = Ping.Send(PingWebAddress);                //Ping 成功!                if (ReCode.Status == IPStatus.Success)                {                    PinhRight = true;                }                return PinhRight;            }            catch            {                return PinhRight;            }        }        #endregion        #region 检测网站的状态        /// <summary>        /// 检测网站的状态        /// </summary>        /// <param name="url">网站URL</param>        /// <returns></returns>        public static string CheckWebStatus(string WebUrl)        {            // http的状态码,错误信息            int httpcode = 000;            string httpresult = null;            try            {                WebRequest request = WebRequest.Create(WebUrl);                request.Method = "HEAD";                request.Timeout = 1000;                HttpWebResponse response = (HttpWebResponse)request.GetResponse();                //StatusCode为枚举类型,200为正常                //其他输出为异常,需要转为int型,才会输出状态码                httpcode = Convert.ToInt32(response.StatusCode);                httpresult = response.StatusCode.ToString();                response.Close();            }            catch (WebException ex)            {                if (ex.Response != null)                {                    httpcode = Convert.ToInt32(((HttpWebResponse)ex.Response).StatusCode);                    httpresult = ((HttpWebResponse)ex.Response).StatusCode.ToString();                }                else                {                    httpcode = 000;                    httpresult = "网站不存在!";                }            }            return httpcode + httpresult;        }        #endregion        #region 检测网站的详细信息        /// <summary>        /// 检测网站的详细信息        /// </summary>        /// <param name="errorCode">错误代码</param>        /// <returns></returns>        public static string Checkhttpcode(string httpcode)        {            // 错误详情            string httpdescript = "";            int code = Convert.ToInt32(httpcode);            // 判断状态码            switch (code)            {                case 000:                    httpdescript = "网址不存在。";                    break;                case 100:                    httpdescript = "继续,请求者应当继续提出请求。";                    break;                case 101:                    httpdescript = "切换协议,请求者已要求服务器切换协议,服务器已确认并准备进行切换。";                    break;                case 200:                    httpdescript = "成功,服务器已成功处理了请求。";                    break;                case 201:                    httpdescript = "已创建,请求成功且服务器已创建了新的资源。";                    break;                case 202:                    httpdescript = "已接受,服务器已接受了请求,但尚未对其进行处理。";                    break;                case 203:                    httpdescript = "非授权信息,服务器已成功处理了请求,但返回了可能来自另一来源的信息。";                    break;                case 204:                    httpdescript = "无内容,服务器成功处理了请求,但未返回任何内容。";                    break;                case 205:                    httpdescript = "重置内容,服务器成功处理了请求,但未返回任何内容。";                    break;                case 206:                    httpdescript = "部分内容,服务器成功处理了部分 GET 请求。";                    break;                case 300:                    httpdescript = "多种选择,服务器根据请求可执行多种操作。";                    break;                case 301:                    httpdescript = "永久移动,请求的网页已被永久移动到新位置。";                    break;                case 302:                    httpdescript = "临时移动,服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。";                    break;                case 303:                    httpdescript = "查看其他位置,当请求者应对不同的位置进行单独的 GET 请求以检索响应时,服务器会返回此代码。";                    break;                case 304:                    httpdescript = "未修改,自从上次请求后,请求的网页未被修改过。";                    break;                case 305:                    httpdescript = "使用代理,请求者只能使用代理访问请求的网页。";                    break;                case 307:                    httpdescript = "临时重定向,服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。";                    break;                case 400:                    httpdescript = "错误请求,服务器不理解请求的语法。";                    break;                case 401:                    httpdescript = "身份验证错误,此页要求授权。";                    break;                case 403:                    httpdescript = "禁止,服务器拒绝请求。";                    break;                case 404:                    httpdescript = "未找到,服务器找不到请求的网页。";                    break;                case 405:                    httpdescript = "方法禁用,禁用请求中指定的方法。";                    break;                case 406:                    httpdescript = "不接受,无法使用请求的内容特性响应请求的网页。";                    break;                case 407:                    httpdescript = "需要代理授权,指定请求者必须授权使用代理。";                    break;                case 408:                    httpdescript = "请求超时,服务器等候请求时发生超时。";                    break;                case 409:                    httpdescript = "冲突,服务器在完成请求时发生冲突。";                    break;                case 410:                    httpdescript = "已删除,请求的资源永久删除后,服务器返回此响应。";                    break;                case 411:                    httpdescript = "需要有效长度,服务器不接受不含有效内容长度标头字段的请求。";                    break;                case 412:                    httpdescript = "未满足前提条件,服务器未满足请求者在请求中设置的其中一个前提条件。";                    break;                case 413:                    httpdescript = "请求实体过大,服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。";                    break;                case 414:                    httpdescript = "请求的 URI 过长,请求的 URI(通常为网址)过长,服务器无法处理。";                    break;                case 415:                    httpdescript = "不支持的媒体类型,请求的格式不受请求页面的支持。";                    break;                case 416:                    httpdescript = "请求范围不符合要求,如果页面无法提供请求的范围,则服务器会返回此状态码。";                    break;                case 417:                    httpdescript = "未满足期望值,服务器未满足”期望”请求标头字段的要求。";                    break;                case 500:                    httpdescript = "服务器内部错误,服务器遇到错误,无法完成请求。";                    break;                case 501:                    httpdescript = "尚未实施,服务器不具备完成请求的功能。";                    break;                case 502:                    httpdescript = "错误网关,服务器作为网关或代理,从上游服务器收到无效响应。";                    break;                case 503:                    httpdescript = "服务不可用,服务器目前无法使用(由于超载或停机维护)。";                    break;                case 504:                    httpdescript = "网关超时,服务器作为网关或代理,但是没有及时从上游服务器收到请求。";                    break;                case 505:                    httpdescript = "HTTP 版本不受支持,服务器不支持请求中所用的 HTTP 协议版本。";                    break;                default:                    httpdescript = "网页不存在!";                    break;            }            return httpdescript;        }        #endregion    }}

检测本地的网络连接状况,通过ping百度实现
检测本地与服务器的网络连接状况,通过ping服务器实现
检测服务器上网站的运行状态,通过网站http协议的状态码和返回值实现,这里只能适用于http和https协议,如果,采用的其他协议,需要修改代码

原创粉丝点击