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协议,如果,采用的其他协议,需要修改代码
阅读全文
0 0
- Ping命令检测网站运行状态
- 长ping 命令,检测网络连接状态
- 定时检测网站运行状态
- ping命令加上时间标签,检测网络连接状态(最新方案)
- 如何用ping检测代理服务器状态?
- 系统状态检测命令
- 网站运行状态检测工具
- C#检测进程运行状态
- Tomcat 运行状态检测脚本
- 用Ping命令快速检测网络故障
- 用Ping命令快速检测网络故障
- Ping命令的网络检测技巧
- C#使用ping命令检查设备状态
- cmd运行不了ipconfig ,ping等等命令
- 给ping 加上时间标签,检测网络状态
- JAVA 检测网络是否为连通状态 ping
- C# ping网络IP 实现网络状态检测
- QProcess调用外部ping程序实现网络状态检测
- 拓扑排序模板
- CentOS 7更新时出现Multilib version problems
- 百度和高德地图接口取经纬度都有失效的时候,把两者结合起来用,才是解决之道。
- ASP.NET通过ajax调用后台方法
- gnuplot : 读取csv 文件, 画基金净值线
- Ping命令检测网站运行状态
- 认识java
- php常用算法
- 45.笔记go语言圣经——go语言变量
- 46.笔记go语言圣经——go运行时
- 数据库垂直拆分与水平拆分
- 47.笔记go——go连接Oracle
- 48.笔记go语言圣经——go图形化
- 《如何运行第一个C/C++语言程序》