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