远程网站监控
来源:互联网 发布:上海女人护肤品 知乎 编辑:程序博客网 时间:2024/05/21 09:49
/// <summary>
/// 网站监控后台
/// </summary>
public class WebsiteMonitoring : BackGroundBase
{
#region 变量定义
OAFLIBSystem oaflibSystem = new OAFLIBSystem ();
ParmArray errArray = new ParmArray();
string localHost = "", LongeMsg = "" , ShorteMsg = "" ;
#endregion
#region 线程启动
public void ThreadRun( TabPageBase tabPageBase , ThreadProvider threadProvider)
{
tabPageBase.WriteInfo (" 正在开始运行网站监控程序 ");
string strHostName = Dns .GetHostName (); //取得本机的主机名
IPHostEntry ipEntry = Dns .GetHostByName (strHostName ); //取得本机 IP
this. localHost = ipEntry. AddressList[0].ToString (); //假设本地主机为单网卡,取得第一个 IP
foreach ( IPAddress ipa in ipEntry. AddressList) //局域网中本机 IP
{
if ( ipa. ToString(). StartsWith( "172.26"))
{
this. localHost = ipa. ToString();
break;
}
}
ParmArray parmArray = new ParmArray();
parmArray. Add( "IPYN", "Y" );
DataSet ipds = oaflibSystem.GetIPMONITORPFds (parmArray );
if (! OperateUI. HaveData( ipds))
{
tabPageBase.WriteInfo (" 未设置需要进行检查的网站地址 ");
return;
}
foreach ( DataRow ipdr in ipds. Tables[0]. Rows)
{
string url = ipdr[ "IPADDRESS"].ToString ().Trim ();
string ip = ipdr[ "IPADDRESS"].ToString ().Trim () + ":" + ipdr["IPPORT" ].ToString ().Trim ();
string type = ipdr["IPTYPE" ].ToString ().Trim ().ToUpper ();
switch ( type)
{
case "IP":
if ( ToIpServer( ipdr, tabPageBase))
{
tabPageBase.WriteInfo (ip + " 连接成功");
}
else
{
tabPageBase.WriteError (ip + " 连接失败");
}
break;
case "HTTP":
case "HTTPS":
if ( ToUrlServer(ipdr , tabPageBase ))
{
tabPageBase.WriteInfo (url + " 连接成功");
}
else
{
tabPageBase.WriteError (url + " 连接失败");
}
break;
default:
if ( ToUrlServer(ipdr , tabPageBase ))
{
tabPageBase.WriteInfo (url + " 连接成功");
}
else
{
tabPageBase.WriteError (url + " 连接失败");
}
break;
}
}
}
#endregion
#region 网站 I P连接
private bool ToIpServer( DataRow dr, TabPageBase tabPageBase )
{
string ip = dr[ "IPADDRESS"].ToString ().Trim ();
int port = Convert. ToInt32( dr[ "IPPORT"].ToString ().Trim ());
int timeout = Convert. ToInt32( dr[ "IPOT"].ToString ().Trim ());
while ( true)
{
TcpClient tc = new TcpClient();
tc. SendTimeout = timeout /2;
tc. ReceiveTimeout = timeout /2;
bool isAlive;
try
{
IPAddress HostNameOrIp = IPAddress .Parse (ip );
tc. Connect( HostNameOrIp, port );
isAlive = true;
}
catch( Exception e)
{
LongeMsg = "原因:" + e ;
ShorteMsg = " 原因:" + e .Message ;
isAlive = false;
}
finally
{
tc. Close();
}
if ( errArray. IndexOf( ip) < 0)
{
errArray. Add( ip, 0);
}
if ( isAlive)
{
errArray. SetParmValue(ip, 0);
return true;
}
else
{
string toMail = dr["IPMAIL" ].ToString ().Trim ().Replace (";" , "," ).Replace (" ;", ",").Replace (" ,", ",");
string toPhone = dr["IPPHONE" ].ToString ().Trim ().Replace (";" , "," ).Replace (" ;", ",").Replace (" ,", ",");
#if DEBUG
toMail = "111@penavicoxm.com";
toPhone = "111";
#endif
string sendText = "连接IP:" + ip + " 端口:" + port;
if ( dr[ "IPREMARK"].ToString ().Trim () != "" )
{
sendText += "(" + dr["IPREMARK" ].ToString ().Trim () + ")" ;
}
sendText += "超时, 来自(" + this. localHost + ")";
tabPageBase.WriteError (sendText + "\n" + LongeMsg );
//超时 +1
errArray. SetParmValue(ip, Convert.ToInt16 (errArray .GetParmValue (ip ).ToString ().Trim ()) + 1);
//发送邮件
if (Convert.ToInt16 (errArray .GetParmValue (ip ).ToString ().Trim ()) >= 1)
{
try
{
PENSendMail mail = new PENSendMail("111@penavicoxm.com" , toMail , "" , "" , sendText , LongeMsg);
mail. send();
}
catch ( Exception ex)
{
tabPageBase.WriteError (" 给邮箱:" + toMail + "发送邮件失败, 原因:" + ex);
}
}
//发送短信
if (Convert.ToInt16 (errArray .GetParmValue (ip ).ToString ().Trim ()) >= 3)
{
string strErrMsg = "";
PENSMSSystem pensmsSystem = new PENSMSSystem ();
if (! pensmsSystem.SendMessage ("" , "SVRMON" , toPhone, sendText + "\n" + ShorteMsg , "MonService" , out strErrMsg ))
{
tabPageBase.WriteError (" 给手机:" + toPhone + "发送短信失败, 原因:" + strErrMsg);
}
errArray. SetParmValue(ip, 0);
return false;
}
}
}
}
#endregion
#region 网站 URL连接
private bool ToUrlServer(DataRow dr , TabPageBase tabPageBase )
{
string url = dr[ "IPADDRESS"].ToString ().Trim ();
int port = Convert. ToInt32( dr[ "IPPORT"].ToString ().Trim ());
int timeout = Convert. ToInt32( dr[ "IPOT"].ToString ().Trim ());
while ( true)
{
if ( errArray. IndexOf( url) < 0)
{
errArray. Add( url, 0);
}
try
{
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security .RemoteCertificateValidationCallback (CheckValidationResult );// 验证服务器证书回调自动验证
WebRequest myRequest = WebRequest. Create( url);
myRequest. Timeout = timeout;
WebResponse myResponse = myRequest .GetResponse ();
myResponse. Close();
errArray. SetParmValue(url, 0);
return true;
}
catch ( Exception e)
{
LongeMsg = "原因:" + e ;
ShorteMsg = " 原因:" + e .Message ;
string toMail = dr["IPMAIL" ].ToString ().Trim ().Replace (";" , "," ).Replace (" ;", ",").Replace (" ,", ",");
string toPhone = dr["IPPHONE" ].ToString ().Trim ().Replace (";" , "," ).Replace (" ;", ",").Replace (" ,", ",");
#if DEBUG
toMail = "111@penavicoxm.com,aa" ;
toPhone = "111,aa";
#endif
string sendText = "连接URL:" + url ;
if ( dr[ "IPREMARK"].ToString ().Trim () != "" )
{
sendText += "(" + dr["IPREMARK" ].ToString ().Trim () + ")" ;
}
sendText += "超时, 来自(" + this. localHost + ")";
tabPageBase.WriteError (sendText + "\n" + LongeMsg );
//超时 +1
errArray. SetParmValue(url, Convert.ToInt16 (errArray .GetParmValue (url ).ToString ().Trim ()) + 1);
//发送邮件
if (Convert.ToInt16 (errArray .GetParmValue (url ).ToString ().Trim ()) >= 1)
{
try
{
PENSendMail mail = new PENSendMail("111@penavicoxm.com" , toMail , "" , "" , sendText , LongeMsg);
mail. send();
}
catch ( Exception ex)
{
tabPageBase.WriteError (" 给邮箱:" + toMail + "发送邮件失败, 原因:" + ex);
}
}
//发送短信
if (Convert.ToInt16 (errArray .GetParmValue (url ).ToString ().Trim ()) >= 3)
{
string strErrMsg = "";
PENSMSSystem pensmsSystem = new PENSMSSystem ();
if (! pensmsSystem.SendMessage ("" , "SVRMON" , toPhone, sendText + "\n" + ShorteMsg , "MonService" , out strErrMsg ))
{
tabPageBase.WriteError (" 给手机:" + toPhone + "发送短信失败, 原因:" + strErrMsg);
}
errArray. SetParmValue(url, 0);
return false;
}
}
}
}
#endregion
#region 忽略证书校验
protected bool CheckValidationResult(object sender , X509Certificate certificate , X509Chain chain , SslPolicyErrors errors )
{ // 总是接受
return true;
}
#endregion
#region 写日志
private void writeLog( string msg)
{
string logFolder = AppDomain.CurrentDomain .BaseDirectory .ToString ().Trim () + "\\Log\\" ;
DateTime dateTime = DateTime. Now;
string logFilePath = logFolder + dateTime.ToString ("yyyyMMdd" ) + ".txt" ;
if (! Directory. Exists( logFolder))
{
Directory. CreateDirectory(logFolder );
}
StreamWriter sw = new StreamWriter (logFilePath , true );
string currentTime = dateTime .ToString ("yyyy-MM-dd HH:mm:ss-") + dateTime. Millisecond.ToString ().Trim ().PadLeft (3, '0' );
msg = "【" + currentTime + " 】 " + msg;
sw. WriteLine( msg);
sw. Flush();
sw. Close();
}
#endregion
}
0 0
- 远程网站监控
- 网站监控:监控宝
- 远程机房监控设计方案
- 监控远程线程代码
- 油井远程监控方案
- 【转】远程监控JVM
- 远程视频网络监控
- 一个远程监控问题
- VisualVM远程监控
- 远程监控JVM--VisualVM
- nagios远程监控
- bsnmp 监控远程主机
- jconsole 远程监控MBean
- Nagios监控远程主机
- visualVM 远程监控
- java远程监控
- 远程监控JVM--VisualVM
- jconsole远程监控
- MFC 双缓冲 绘图实例
- 离线轻量级大数据平台Spark之MLib机器学习库Word2Vec实例
- RMS (Rights Management Services)基于SDK2.1的二次开发环境搭建
- angular中的$provide和$inject方法使用理解
- 腾讯面试题——位图的应用
- 远程网站监控
- 洛谷 P1270 “访问”美术馆
- HDU-2586-How far away ?
- 滚动圆角卡顿--有效(不是唯一)
- SATA SAS SSD 硬盘介绍和评测
- linux php多版本
- 人力规划系统 v1.0 - 需求分析
- HDU-5510 Bazinga(KMP)
- jeesite 参数验证失败