128 lines
4.2 KiB
C#
128 lines
4.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Configuration;
|
|
using System.Net;
|
|
using System.IO;
|
|
using System.Diagnostics;
|
|
using System.Threading;
|
|
|
|
namespace IPMonitor
|
|
{
|
|
class Program
|
|
{
|
|
public static String GetPublicIPAddress()
|
|
{
|
|
String address = "";
|
|
WebRequest request = WebRequest.Create("http://checkip.dyndns.org/");
|
|
using (WebResponse response = request.GetResponse())
|
|
using (StreamReader stream = new StreamReader(response.GetResponseStream()))
|
|
{
|
|
address = stream.ReadToEnd();
|
|
}
|
|
|
|
int first = address.IndexOf("Address: ") + 9;
|
|
int last = address.LastIndexOf("</body>");
|
|
address = address.Substring(first, last - first);
|
|
|
|
return address;
|
|
}
|
|
|
|
public static void UpdateIPAddress(String ipAddress)
|
|
{
|
|
|
|
|
|
String strPathFileName="ipaddress.txt";
|
|
if(!File.Exists(strPathFileName))
|
|
{
|
|
WriteFile(strPathFileName, ipAddress);
|
|
SendSMSEmail(String.Format("IPMonitor IPAddress {0}",ipAddress));
|
|
}
|
|
else
|
|
{
|
|
String currentIPAddress=ReadFile(strPathFileName);
|
|
if(null!=currentIPAddress && !currentIPAddress.Equals(ipAddress))
|
|
{
|
|
WriteFile(strPathFileName,ipAddress);
|
|
SendSMSEmail(String.Format("IPMonitor IPAddress {0}",ipAddress));
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void WriteFile(String strPathFileName,String ipAddress)
|
|
{
|
|
if(File.Exists(strPathFileName))File.Delete(strPathFileName);
|
|
FileStream fileStream=new FileStream(strPathFileName,FileMode.Create,FileAccess.Write,FileShare.Read);
|
|
StreamWriter streamWriter=new StreamWriter(fileStream);
|
|
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Creating address file:{0}",strPathFileName));
|
|
streamWriter.WriteLine(ipAddress);
|
|
streamWriter.Flush();
|
|
streamWriter.Close();
|
|
streamWriter.Dispose();
|
|
}
|
|
|
|
public static String ReadFile(String strPathFileName)
|
|
{
|
|
try
|
|
{
|
|
FileStream fileStream=new FileStream(strPathFileName,FileMode.Open,FileAccess.ReadWrite,FileShare.Read);
|
|
StreamReader streamReader=new StreamReader(fileStream);
|
|
String item=null;
|
|
item=streamReader.ReadLine();
|
|
streamReader.Close();
|
|
streamReader.Dispose();
|
|
return item;
|
|
}
|
|
catch(Exception exception)
|
|
{
|
|
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("[IPMonitor::ReadFile] Exception:{0}",exception.ToString()));
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public static void SendSMSEmail(string message)
|
|
{
|
|
String smsSMTPAddress = ConfigurationManager.AppSettings["sms_smtpaddress"];
|
|
String smsUserName = ConfigurationManager.AppSettings["sms_smsusername"];
|
|
String smsPassword = ConfigurationManager.AppSettings["sms_smspassword"];
|
|
String[] smsRecipients = ConfigurationManager.AppSettings["sms_smsrecipients"].Split(',');
|
|
SMSClient.SendSMSEmail(message, smsUserName, smsRecipients, smsSMTPAddress, smsUserName, smsPassword);
|
|
}
|
|
|
|
static void Main(string[] args)
|
|
{
|
|
int interval_ms = int.Parse(ConfigurationManager.AppSettings["poll_time_ms"]);
|
|
int notify_ms = int.Parse(ConfigurationManager.AppSettings["notify_time_ms"]);
|
|
|
|
try
|
|
{
|
|
MDTrace.LogLevel = LogLevel.DEBUG;
|
|
String strLogFile = "ipmonitor.log";
|
|
Utility.CopyFile(strLogFile,Utility.DateTimeToStringYYYYMMDDMMSSTT(DateTime.Now)+strLogFile);
|
|
Utility.DeleteFile(strLogFile);
|
|
Trace.Listeners.Add(new TextWriterTraceListener(strLogFile));
|
|
|
|
Profiler profiler=new Profiler();
|
|
profiler.Start();
|
|
while(true)
|
|
{
|
|
String ipAddress=GetPublicIPAddress();
|
|
UpdateIPAddress(ipAddress);
|
|
try{Thread.Sleep(interval_ms);}catch{;}
|
|
if(profiler.Split()>=notify_ms)
|
|
{
|
|
SendSMSEmail(String.Format("IPMonitor IPAddress {0}",ipAddress));
|
|
profiler.Start();
|
|
}
|
|
}
|
|
}
|
|
catch(Exception exception)
|
|
{
|
|
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("[IPMonitor] Exception:{0}",exception.ToString()));
|
|
}
|
|
}
|
|
}
|
|
}
|