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、httpsstring 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协议,如果,采用的其他协议,需要修改代码

Ping命令检测网站运行状态相关推荐

  1. ping 计算机名判断机器是否在线,通过ping命令检测主机的存活性

    判断所有的业务系统中主机的存活性ping 问题描述:现在有一上线项目,用的环境为vsphere 虚拟化技术.由于不能随时判断各虚拟主机的存活性,保证业务系统的正常运行,现在需要编写一个脚本判断主机的存 ...

  2. Tool之ping:如何使用ping命令检测电脑网络故障图文教程

    Tool之ping:如何使用ping命令检测电脑网络故障图文教程 目录 如何使用ping命令检测电脑网络故障图文教程 1.首先点击开始→运行→输入cmd→进入命令提示符窗口 2.输入ping 127. ...

  3. 使用ping命令检测设备在线

    使用ping命令实时检测局域网设备是否在线 #include<stdio.h> #include <unistd.h> #include <stdlib.h> #i ...

  4. linux+ping网络脚本,使用ping命令检测整个网段IP的网络状态的shell脚本(图文)

    通过ping网段中的IP地址,根据返回的状态信息,判断主机的网络状态. 下面分享两个可以实现这个功能的shell脚本. 脚本1, 复制代码 代码示例: #!/bin/sh # Ping网段所有IP # ...

  5. Linux ping命令,检测网络是否连通

    Ping是Windows.Unix和Linux系统下的一个命令.ping也属于一个通信协议,是TCP/IP协议的一部分.利用"ping"命令可以检查网络是否连通,可以很好地帮助我们 ...

  6. Qt实现ping命令检测主机是否在线

    最近遇到这个需求,但是发现一个问题,主机可以使用TCP连接但是使用HTTP连接超时(ping超时),于是需要用QT实现ping命令. 网上看了一下,发现竟然没有实现!于是只能自己实现了! 首先需要说明 ...

  7. linux ping只显示一条,Linux ping命令,检测网络是否连通

    Ping是Windows.Unix和Linux系统下的一个命令.ping也属于一个通信协议,是TCP/IP协议的一部分.利用"ping"命令可以检查网络是否连通,可以很好地帮助我们 ...

  8. iphone7测试软件,iPhone7如何测试网速 ping命令测试网速方法介绍

    电脑设备测试网速的方法有很多,了解的小伙伴应该都知道那么几种.但是如果我们想要测试iPhone手机的网速,该怎么弄呢?这个估计就没有多少小伙伴知道了.下面小编来教一教大家怎么使用ping来测试网速. ...

  9. linux qt ping,Qt5.2中使用ping命令实现Ip扫描功能

    在实现类似于Free IP Scanner 2.1的Ip扫描器软件中,会用到ping命令.如果使用Qt编程实现,主要会用QThread.QProcess这两个类.关于这两个类的具体用法可以查阅Qt助手 ...

最新文章

  1. 阿里P8都留不住的程序员和他们的公众号!
  2. Class.newInstance()与new、Constructor.newInstance()的区别
  3. js 关键字 in 的使用方法
  4. UGUI_UI子节点在Canvas的2D坐标
  5. Nginx配置proxy_pass
  6. Android 分享功能大全
  7. linux gcc编译只能编译一条,请教一个gcc编译器的问题啊
  8. 标记区域 Region
  9. 移植opencv2.4.9到android过程记录
  10. 【渝粤题库】陕西师范大学209015公共经济学作业(高起本、专升本)
  11. Cesium:搭建运行环境
  12. ETL开发工具Kettle下载安装环境搭建及使用教程
  13. 【开发心得】微信网页应用授权登录
  14. 限流 Redis list 列表 Lpush rpop 实现令牌桶 – PHP 实例
  15. thinkphp5项目--个人博客(五)
  16. 打开一次outlook msg格式邮件后就不能再打开
  17. STA X(X为主存地址)指令发出的微操作命令
  18. 正方教务系统换数据库服务器,自己山寨正方教务系统数据库连接解密程序
  19. 编程实现linux中的who命令功能,Linux who命令简介及使用方法详解
  20. 命令行窗口对MySQL的基本使用

热门文章

  1. 【HDU 5184】 Brackets (卡特兰数)
  2. C#命令行编辑器csc.exe
  3. UVA 10594 Data Flow
  4. WinCE开发初探——开发环境
  5. STM32F103C8T6学习笔记_时钟
  6. android自带的nsd发现服务器,Android网络服务发现(NSD)协议的使用
  7. eui加载时间长_游戏加载时间越来越短了?背后藏着这些小心机
  8. 设计模式总结 (5)行为型模式续
  9. EOS 智能合约源代码解读 (1)总体说明
  10. EOS账户系统(7)权限评估