Files
IPMonitor/Program.cs
2024-03-13 18:23:27 -04:00

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()));
}
}
}
}