发布一款域名监控小工具——Domain(IP)Watcher
2011-11-15 00:36
239 查看
域名是否正常,网站是否可以正常访问是很头痛的问题,怎样简单地监控域名是否可以正常访问呢,这里发布一款域名监控小工具:Domain(IP)Watcher
功能:
监控给定的域名,一旦域名连续30秒(这是默认值,可以在源码中修改)无法Ping通,立刻发邮件到指定邮箱,并发短信给站长
效果图:
正常情况
异常情况
邮件
短信
原理:
用后台线程循环每隔5秒钟Ping结定的域名,如果连接5次Ping不通则发送邮件到给定邮箱。发短信是通过其他途径实现的,现在最常用的有两种方式:
一是利用QQ邮箱的手机绑定功能实现收到邮件短信提示
二是用www.ifttt.com提供的gmail跟sms服务实现收到邮件发短信提示
本工具用的是第一种。
主要程序:
主要是后台线程ping域名的应用,界面上显示记录的是一个richtextbox控件,其他几个就不说了,代码如下:
窗体后台程序:
工具下载地址:
http://files.cnblogs.com/artwl/Domain(IP)Watcher.zip(至少要安装.net Framework 2.0)
功能:
监控给定的域名,一旦域名连续30秒(这是默认值,可以在源码中修改)无法Ping通,立刻发邮件到指定邮箱,并发短信给站长
效果图:
正常情况
异常情况
邮件
短信
原理:
用后台线程循环每隔5秒钟Ping结定的域名,如果连接5次Ping不通则发送邮件到给定邮箱。发短信是通过其他途径实现的,现在最常用的有两种方式:
一是利用QQ邮箱的手机绑定功能实现收到邮件短信提示
二是用www.ifttt.com提供的gmail跟sms服务实现收到邮件发短信提示
本工具用的是第一种。
主要程序:
主要是后台线程ping域名的应用,界面上显示记录的是一个richtextbox控件,其他几个就不说了,代码如下:
窗体后台程序:
public partial class FormMain : Form, IFormWorkThread { private delegate void ControlDelegate(string record); private WorkThread wtObj; ControlDelegate cdObj; public FormMain() { InitializeComponent(); cdObj = SetRecord; } private void FormMain_Load(object sender, EventArgs e) { } private void btnBegin_Click(object sender, EventArgs e) { if (txtDomain.Text.Trim() == "") { MessageBox.Show("Domain(IP) can not be empty!"); return; } if (txtEmail.Text.Trim() == "") { MessageBox.Show("Email address can not be empty!"); return; } Regex regex = new Regex(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"); if (!regex.IsMatch(txtEmail.Text.Trim())) { MessageBox.Show("Email address error!"); return; } wtObj = new WorkThread(this, 0, 3, txtDomain.Text.Trim(), txtEmail.Text.Trim()); wtObj.StartShowResult(); } private void SetRecord(string record) { rtxtRecord.AppendText(record); if (rtxtRecord.Lines.Length > 5 * 60 * 24 * 7) { rtxtRecord.Clear(); } } public void ShowResult(string record) { if (rtxtRecord.InvokeRequired) { Invoke(cdObj, record); } else { SetRecord(record); } } private void btnEnd_Click(object sender, EventArgs e) { if (wtObj != null) { wtObj.EndShowResult(); } } private void FormMain_FormClosing(object sender, FormClosingEventArgs e) { if (wtObj != null) { wtObj.EndShowResult(); } } private void tslblName_Click(object sender, EventArgs e) { OpenMyBlog(); } private void OpenMyBlog() { var Info = new System.Diagnostics.ProcessStartInfo("http://artwl.cnblogs.com"); System.Diagnostics.Process.Start(Info); } }
IFormWorkThread接口:
public interface IFormWorkThread { void ShowResult(string record); }
WorkThread代码:
public class WorkThread { private IFormWorkThread _formWorkThread; private Thread thread; private int count = 0, maxcount = 5; private string domain = ""; private string emailaddress = ""; public WorkThread(IFormWorkThread formWorkThread,int count,int maxcount,string domain,string email) { this.count = count; this.maxcount = maxcount; this.domain = domain; this.emailaddress = email; _formWorkThread = formWorkThread; } private string Ping(string domainname) { Ping ping = new Ping(); PingReply pr = ping.Send(domainname); if (pr.Status == IPStatus.Success) { count = count > 0 ? count - 1 : 0; } else { count++; if (count > maxcount) { EmailHelp.SendEmail(emailaddress, string.Format("【 {0} 】不能访问啦!",domainname), string.Format("【 {0} 】不能访问啦!<br/><br/>【时间】{1}<br/><br/>【Ping】当前ping的结果为:{2}", domainname,DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), pr.Status), true); count = 0; } } return "【Time】:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\t【Domain】:" + domainname + "\t【Status】:" + pr.Status.ToString() + "\t【RoundtripTime】:" + pr.RoundtripTime.ToString() + "\n"; } public void Deal() { while (true) { Thread.Sleep(5000); string result = Ping(domain); _formWorkThread.ShowResult(result); } } public void StartShowResult() { thread = new Thread(new ThreadStart(Deal)); thread.Name = "TimeThread"; thread.Start(); } public void EndShowResult() { thread.Abort(); } }
发邮件代码:
public class EmailHelp { public static void SendEmail(string[] emailAddress, string subject, string body, bool ishtml) { MailMessage msg = new MailMessage(); foreach (string o in emailAddress) { msg.To.Add(o); } msg.Subject = subject;//邮件标题 msg.Body = body;//邮件内容 msg.IsBodyHtml = ishtml;//是否是HTML邮件 Thread sendemail = new Thread(SendReplyEmail); sendemail.Start(msg); } public static void SendEmail(string to, string subject, string body, bool ishtml) { SendEmail(new string[] { to }, subject, body, ishtml); } private static void SendEmail(MailMessage mailMessage) { mailMessage.From = new MailAddress("emailaddress", "网站检测邮件", System.Text.Encoding.UTF8); mailMessage.SubjectEncoding = System.Text.Encoding.UTF8;//邮件标题编码 mailMessage.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码 mailMessage.Priority = MailPriority.Normal;//邮件优先级 SmtpClient client = new SmtpClient(); //注册的邮箱和密码 client.Credentials = new System.Net.NetworkCredential("emailaddress", "password"); client.Port = 25; client.Host = "smtp.qq.com"; client.EnableSsl = false; try { client.Send(mailMessage); } catch (System.Net.Mail.SmtpException ex) { //log.Error(ex.Message); } } private static void SendReplyEmail(object model) { SendEmail((MailMessage)model); } }
注:发邮件的代码中emailaddress跟password要换成你自己的邮件地址跟密码。另外下载的exe文件为保证可用,我用的邮箱地址跟密码没有去掉,请大家也不要反编译后查看(这只是一个coding时的测试邮箱,没什么价值,赚不到钱的)。
工具下载地址:
http://files.cnblogs.com/artwl/Domain(IP)Watcher.zip(至少要安装.net Framework 2.0)
相关文章推荐
- (最新)IIS Express发布网站,实现IP,域名访问站点
- Domain120.com-专业域名搜索查询工具升级
- 一款监控网络状态的好工具- Smokeping
- 查询同一个ip对应多个域名的工具
- CYQ.IISLogViewer 一款IIS 日志分析工具 V1.0 发布[提供源码]
- 发布代码小助手V1.0——一款在博客上发布格式化代码的辅助工具
- CYQ.IISLogViewer 一款IIS 日志分析工具 V1.0 发布[提供源码]
- Monitorix 2.6.0 发布,系统监控工具
- 推荐一款IP切换工具
- 黑蛋批量IP查域名工具 V1.0
- TCP-IP详解卷1-14:DNS(Domain Name System):域名系统
- DBA+工具4:国内唯一零负载Oracle专业监控工具PeOny发布 - ORACLE
- Filemonitor 2.2.0 发布,文件监控工具
- 一款很实用的Memcache监控工具
- 发布一个网页监控小工具
- 域名IP查寻的小工具
- 发布 监控视频回放工具 适用于 vbox协议的视频服务器
- 谷歌发布了一款AI工具 可以帮助基因组数据解读 | 速递
- VBS 从指定 DNS 获取给定域名(Domain)的 IP 地址