Initial Commit
This commit is contained in:
14
App.config
Normal file
14
App.config
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<appSettings>
|
||||
<add key="poll_time_ms" value="300000"/>
|
||||
<add key="notify_time_ms" value="4320000"/>
|
||||
<add key="sms_smtpaddress" value="smtp.gmail.com"/>
|
||||
<add key="sms_smsusername" value="skessler1964@gmail.com"/>
|
||||
<add key="sms_smspassword" value="xjfo isnf gmyi zovr"/>
|
||||
<add key="sms_smsrecipients" value="skessler1964sms@gmail.com"/>
|
||||
</appSettings>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/>
|
||||
</startup>
|
||||
</configuration>
|
||||
65
IPMonitor.csproj
Normal file
65
IPMonitor.csproj
Normal file
@@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{45646B53-1805-4678-AC93-20F87BE46A95}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>IPMonitor</RootNamespace>
|
||||
<AssemblyName>IPMonitor</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Configuration" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="MDTrace.cs" />
|
||||
<Compile Include="Network.cs" />
|
||||
<Compile Include="Profiler.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="SMSClient.cs" />
|
||||
<Compile Include="Utility.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
22
IPMonitor.sln
Normal file
22
IPMonitor.sln
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2013
|
||||
VisualStudioVersion = 12.0.21005.1
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IPMonitor", "IPMonitor.csproj", "{45646B53-1805-4678-AC93-20F87BE46A95}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{45646B53-1805-4678-AC93-20F87BE46A95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{45646B53-1805-4678-AC93-20F87BE46A95}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{45646B53-1805-4678-AC93-20F87BE46A95}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{45646B53-1805-4678-AC93-20F87BE46A95}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
BIN
IPMonitor.v12.suo
Normal file
BIN
IPMonitor.v12.suo
Normal file
Binary file not shown.
158
MDTrace.cs
Normal file
158
MDTrace.cs
Normal file
@@ -0,0 +1,158 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Threading;
|
||||
using System.Text;
|
||||
using System.Reflection;
|
||||
using System.Runtime.Remoting.Messaging;
|
||||
|
||||
// Filename: MarketDataTrace.cs
|
||||
// Author:Sean Kessler
|
||||
// Date:11/2005
|
||||
|
||||
namespace IPMonitor
|
||||
{
|
||||
public enum LogLevel : uint
|
||||
{
|
||||
NONE=0x0000,
|
||||
INFO=0x0002,
|
||||
DEBUG=0x0004,
|
||||
VERBOSE=0x0008
|
||||
};
|
||||
/// <summary>MarketDataTrace - Utility for .</summary>
|
||||
public class MDTrace
|
||||
{
|
||||
private static LogLevel logLevel=LogLevel.DEBUG;
|
||||
|
||||
/// <summary>MarketDataTrace - Private constructor prevents instantiation.</summary>
|
||||
/// <returns>none</returns>
|
||||
private MDTrace()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>LogLevel - Get/Set Log level.</summary>
|
||||
/// <param name="logLevel">The log level.</param>
|
||||
/// <returns>LogLevel</returns>
|
||||
public static LogLevel LogLevel
|
||||
{
|
||||
get{return logLevel;}
|
||||
set{logLevel=value;}
|
||||
}
|
||||
/// <summary>WriteLine - Writes a line of text to trace log.</summary>
|
||||
/// <param name="message">string content of message to write.</param>
|
||||
/// <returns>void</returns>
|
||||
// [Conditional("TRACE")]
|
||||
public static void Write(LogLevel logLevel,string message)
|
||||
{
|
||||
if(MDTrace.logLevel<logLevel)return;
|
||||
Trace.Write(GetCallerIP()+GetThreadRep()+GetLogLevelRep()+"["+DateTime.Now.ToString()+"]"+GetMethodInfo()+message);
|
||||
Console.Write(message);
|
||||
Flush();
|
||||
}
|
||||
|
||||
/// <summary>WriteLine - Writes a line of text to trace log.</summary>
|
||||
/// <param name="message">string content of message to write.</param>
|
||||
/// <returns>void</returns>
|
||||
// [Conditional("TRACE")]
|
||||
public static void WriteLine(string message)
|
||||
{
|
||||
WriteLine(LogLevel.DEBUG,GetCallerIP()+GetThreadRep()+GetLogLevelRep()+"["+DateTime.Now.ToString()+"]"+" "+GetMethodInfo()+message);
|
||||
Console.WriteLine(message);
|
||||
}
|
||||
/// <summary>WriteLine - Writes a line of text to trace log.</summary>
|
||||
/// <param name="message">string content of message to write.</param>
|
||||
/// <returns>void</returns>
|
||||
// [Conditional("TRACE")]
|
||||
public static void WriteLine(LogLevel logLevel,Exception exception)
|
||||
{
|
||||
if(MDTrace.logLevel<logLevel)return;
|
||||
Trace.WriteLine(GetCallerIP()+GetThreadRep()+GetLogLevelRep()+"["+DateTime.Now.ToString()+"]"+" "+GetMethodInfo()+exception.ToString());
|
||||
Console.WriteLine(exception);
|
||||
Flush();
|
||||
}
|
||||
/// <summary>WriteLine - Writes a line of text to trace log.</summary>
|
||||
/// <param name="message">string content of message to write.</param>
|
||||
/// <returns>void</returns>
|
||||
// [Conditional("TRACE")]
|
||||
public static void WriteLine(LogLevel logLevel,string message)
|
||||
{
|
||||
if(MDTrace.logLevel<logLevel)return;
|
||||
Trace.WriteLine(GetCallerIP()+GetThreadRep()+GetLogLevelRep()+"["+DateTime.Now.ToString()+"]"+" "+GetMethodInfo()+message);
|
||||
Console.WriteLine(message);
|
||||
Flush();
|
||||
}
|
||||
/// <summary>Indent - set trace log indentation.</summary>
|
||||
/// <returns>void</returns>
|
||||
// [Conditional("TRACE")]
|
||||
public static void Indent()
|
||||
{
|
||||
Trace.Indent();
|
||||
}
|
||||
/// <summary>Unindent - set trace log indentation back.</summary>
|
||||
/// <returns>void</returns>
|
||||
// [Conditional("TRACE")]
|
||||
public static void Unindent()
|
||||
{
|
||||
Trace.Unindent();
|
||||
}
|
||||
/// <summary>Flush - Flush trace log buffers to disk.</summary>
|
||||
/// <returns>void</returns>
|
||||
// [Conditional("TRACE")]
|
||||
public static void Flush()
|
||||
{
|
||||
Trace.Flush();
|
||||
}
|
||||
/// <summary>GetLogLevel - Return current log level.</summary>
|
||||
/// <returns>LogLevel</returns>
|
||||
public static LogLevel GetLogLevel(String strLogLevel)
|
||||
{
|
||||
if(strLogLevel.Equals("debug"))return LogLevel.DEBUG;
|
||||
else if(strLogLevel.Equals("verbose"))return LogLevel.VERBOSE;
|
||||
else if(strLogLevel.Equals("info"))return LogLevel.INFO;
|
||||
else return LogLevel.NONE;
|
||||
}
|
||||
|
||||
/// <summary>GetLogLevel - Return current log level.</summary>
|
||||
/// <returns>LogLevel</returns>
|
||||
private static string GetLogLevelRep()
|
||||
{
|
||||
if (MDTrace.logLevel == LogLevel.DEBUG) return "[TRACE.DEBUG]";
|
||||
else if (MDTrace.logLevel == LogLevel.VERBOSE) return "[TRACE.VERBOSE]";
|
||||
else if (MDTrace.logLevel == LogLevel.INFO) return "[TRACE.INFO]";
|
||||
else return "[TRACE.NONE]";
|
||||
}
|
||||
/// <summary>GetThreadRep - Return threading information.</summary>
|
||||
/// <returns>LogLevel</returns>
|
||||
private static string GetThreadRep()
|
||||
{
|
||||
return "[Thread="+Thread.CurrentThread.GetHashCode()+"]";
|
||||
}
|
||||
/// <summary>GetMethodInfo - Returns information about the calling method 2 frames up.</summary>
|
||||
/// <returns>String</returns>
|
||||
private static String GetMethodInfo()
|
||||
{
|
||||
StringBuilder sb=new StringBuilder();
|
||||
StackFrame frame=new StackFrame(2,true);
|
||||
MethodBase methodBase=frame.GetMethod();
|
||||
ParameterInfo[] parameters=methodBase.GetParameters();
|
||||
sb.Append("[").Append(methodBase.DeclaringType.FullName).Append("::").Append(methodBase.Name).Append("(");
|
||||
for(int index=0;index<parameters.Length;index++)
|
||||
{
|
||||
ParameterInfo parameter=(ParameterInfo)parameters[index];
|
||||
sb.Append(parameter.Name);
|
||||
if(!(index==parameters.Length-1))sb.Append(",");
|
||||
}
|
||||
sb.Append(")]");
|
||||
return sb.ToString();
|
||||
}
|
||||
/// <summary>GetCallerIP - Returns the calling methods IP address.</summary>
|
||||
/// <returns>String</returns>
|
||||
private static String GetCallerIP()
|
||||
{
|
||||
String hostName=(String)CallContext.GetData("HostName");
|
||||
String hostAddress=(String)CallContext.GetData("HostAddress");
|
||||
if(null!=hostName)hostName=hostName.Split('.')[0];
|
||||
if(null==hostName && null==hostAddress)return "[LOCAL]";
|
||||
return "["+hostAddress+"->"+hostName+"]";
|
||||
}
|
||||
}
|
||||
}
|
||||
94
Network.cs
Normal file
94
Network.cs
Normal file
@@ -0,0 +1,94 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace IPMonitor
|
||||
{
|
||||
public class NetworkStatus
|
||||
{
|
||||
private NetworkStatus()
|
||||
{
|
||||
}
|
||||
/// <summary>
|
||||
/// Indicates whether any network connection is available
|
||||
/// Filter connections below a specified speed, as well as virtual network cards.
|
||||
/// </summary>
|
||||
/// <returns>
|
||||
/// <c>true</c> if a network connection is available; otherwise, <c>false</c>.
|
||||
/// </returns>
|
||||
public static bool IsNetworkAvailable()
|
||||
{
|
||||
return IsNetworkAvailable(0);
|
||||
}
|
||||
public static bool IsInternetConnected()
|
||||
{
|
||||
try
|
||||
{
|
||||
Ping myPing = new Ping();
|
||||
String host = "google.com";
|
||||
byte[] buffer = new byte[32];
|
||||
int timeout = 1000;
|
||||
PingOptions pingOptions = new PingOptions();
|
||||
PingReply reply = myPing.Send(host, timeout, buffer, pingOptions);
|
||||
if (reply.Status == IPStatus.Success)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (reply.Status == IPStatus.TimedOut)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Indicates whether any network connection is available.
|
||||
/// Filter connections below a specified speed, as well as virtual network cards.
|
||||
/// </summary>
|
||||
/// <param name="minimumSpeed">The minimum speed required. Passing 0 will not filter connection using speed.</param>
|
||||
/// <returns>
|
||||
/// <c>true</c> if a network connection is available; otherwise, <c>false</c>.
|
||||
/// </returns>
|
||||
public static bool IsNetworkAvailable(long minimumSpeed)
|
||||
{
|
||||
if (!NetworkInterface.GetIsNetworkAvailable())
|
||||
return false;
|
||||
|
||||
foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
|
||||
{
|
||||
// discard because of standard reasons
|
||||
if ((ni.OperationalStatus != OperationalStatus.Up) ||
|
||||
(ni.NetworkInterfaceType == NetworkInterfaceType.Loopback) ||
|
||||
(ni.NetworkInterfaceType == NetworkInterfaceType.Tunnel))
|
||||
continue;
|
||||
|
||||
// this allow to filter modems, serial, etc.
|
||||
// I use 10000000 as a minimum speed for most cases
|
||||
if (ni.Speed < minimumSpeed)
|
||||
continue;
|
||||
|
||||
// discard virtual cards (virtual box, virtual pc, etc.)
|
||||
if ((ni.Description.IndexOf("virtual", StringComparison.OrdinalIgnoreCase) >= 0) ||
|
||||
(ni.Name.IndexOf("virtual", StringComparison.OrdinalIgnoreCase) >= 0))
|
||||
continue;
|
||||
|
||||
// discard "Microsoft Loopback Adapter", it will not show as NetworkInterfaceType.Loopback but as Ethernet Card.
|
||||
if (ni.Description.Equals("Microsoft Loopback Adapter", StringComparison.OrdinalIgnoreCase))
|
||||
continue;
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
47
Profiler.cs
Normal file
47
Profiler.cs
Normal file
@@ -0,0 +1,47 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Collections;
|
||||
using System.Text;
|
||||
|
||||
// Filename: Profiler.cs
|
||||
// Author:Sean Kessler
|
||||
|
||||
namespace IPMonitor
|
||||
{
|
||||
/// <summary>Profiler - Profiler utility class</summary>
|
||||
public class Profiler
|
||||
{
|
||||
[DllImport("kernel32.dll")]
|
||||
static extern uint GetTickCount();
|
||||
private uint elapsedTime;
|
||||
private uint totalTime;
|
||||
|
||||
public Profiler()
|
||||
{
|
||||
totalTime = GetTickCount();
|
||||
Start();
|
||||
}
|
||||
public void Reset()
|
||||
{
|
||||
totalTime = GetTickCount();
|
||||
Start();
|
||||
}
|
||||
public void Start()
|
||||
{
|
||||
elapsedTime = GetTickCount();
|
||||
}
|
||||
public uint Split()
|
||||
{
|
||||
return GetTickCount() - elapsedTime;
|
||||
}
|
||||
public uint Stop()
|
||||
{
|
||||
return elapsedTime = GetTickCount() - elapsedTime;
|
||||
}
|
||||
public uint End()
|
||||
{
|
||||
return totalTime = GetTickCount() - totalTime;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
127
Program.cs
Normal file
127
Program.cs
Normal file
@@ -0,0 +1,127 @@
|
||||
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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
36
Properties/AssemblyInfo.cs
Normal file
36
Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("IPMonitor")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("IPMonitor")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2024")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("7c9aa068-2aeb-4b6e-81e1-e5e34fd0e8a8")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
93
SMSClient.cs
Normal file
93
SMSClient.cs
Normal file
@@ -0,0 +1,93 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net.Mail;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace IPMonitor
|
||||
{
|
||||
public class SMSClient
|
||||
{
|
||||
private SMSClient()
|
||||
{
|
||||
}
|
||||
|
||||
// <add key="sms_smtpaddress" value="smtp.gmail.com"/>
|
||||
// <add key="sms_smsusername" value="skessler1964@gmail.com"/>
|
||||
// <add key="sms_smspassword" value="hebo cfmi qpjf oyii"/>
|
||||
// <add key="sms_smsrecipients" value="6315252496@vtext.com"/>
|
||||
public static void SendSMSEmail(string message, String from, String[] recipients,String smtpAddress,String userName,String password,int port=587)
|
||||
{
|
||||
String subject = string.Format("{0} {1}", message, DateTime.Now);
|
||||
|
||||
try
|
||||
{
|
||||
if (!NetworkStatus.IsInternetConnected())
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,"The internet is not connected. Cannot send SMSEmail.");
|
||||
return;
|
||||
}
|
||||
MailMessage mailMessage = new MailMessage();
|
||||
mailMessage.From = new MailAddress(from);
|
||||
mailMessage.Body = message;
|
||||
mailMessage.Subject = subject;
|
||||
mailMessage.IsBodyHtml = false;
|
||||
foreach (String recipient in recipients)
|
||||
{
|
||||
mailMessage.To.Add(new MailAddress(recipient));
|
||||
}
|
||||
SmtpClient smtpClient = new SmtpClient(smtpAddress,port); // smtp.gmail.com
|
||||
smtpClient.UseDefaultCredentials = false;
|
||||
smtpClient.Credentials = new System.Net.NetworkCredential(userName,password); // skessler1964@gmail.com MN5191306B
|
||||
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
|
||||
smtpClient.EnableSsl = true;
|
||||
|
||||
smtpClient.Send(mailMessage);
|
||||
smtpClient.Dispose();
|
||||
}
|
||||
catch (System.Exception exception)
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,exception.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
public static void SendEmail(string message, String from, String[] recipients,String smtpAddress,String userName,String password,int port=587)
|
||||
{
|
||||
String subject = string.Format("{0} {1}", message, DateTime.Now);
|
||||
|
||||
try
|
||||
{
|
||||
if (!NetworkStatus.IsInternetConnected())
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,"The internet is not connected. Cannot send Email.");
|
||||
return;
|
||||
}
|
||||
MailMessage mailMessage = new MailMessage();
|
||||
mailMessage.From = new MailAddress(from);
|
||||
mailMessage.Body = message;
|
||||
mailMessage.Subject = subject;
|
||||
mailMessage.IsBodyHtml = false;
|
||||
foreach (String recipient in recipients)
|
||||
{
|
||||
mailMessage.To.Add(new MailAddress(recipient));
|
||||
}
|
||||
SmtpClient smtpClient = new SmtpClient(smtpAddress,port); // smtp.gmail.com
|
||||
smtpClient.UseDefaultCredentials = false;
|
||||
smtpClient.Credentials = new System.Net.NetworkCredential(userName,password); // skessler1964@gmail.com MN5191306B
|
||||
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
|
||||
smtpClient.EnableSsl = true;
|
||||
|
||||
smtpClient.Send(mailMessage);
|
||||
smtpClient.Dispose();
|
||||
}
|
||||
catch (System.Exception exception)
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,exception.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
627
Utility.cs
Normal file
627
Utility.cs
Normal file
@@ -0,0 +1,627 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.IO.Compression;
|
||||
using System.IO;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.Win32;
|
||||
using System.Diagnostics;
|
||||
using System.Security.Principal;
|
||||
using System.Threading;
|
||||
using ThreadState=System.Threading.ThreadState;
|
||||
|
||||
namespace IPMonitor
|
||||
{
|
||||
public class Utility
|
||||
{
|
||||
private static DateTime epoch = DateTime.Parse("01-01-0001");
|
||||
private static TimeSpan oneDay=new TimeSpan(1,0,0,0);
|
||||
|
||||
|
||||
public static String ThreadStateToString(Thread thread)
|
||||
{
|
||||
switch(thread.ThreadState)
|
||||
{
|
||||
case ThreadState.Running :
|
||||
return "Running";
|
||||
case ThreadState.StopRequested :
|
||||
return "StopRequested";
|
||||
case ThreadState.SuspendRequested :
|
||||
return "SuspendRequested";
|
||||
case ThreadState.Background :
|
||||
return "Background";
|
||||
case ThreadState.Unstarted :
|
||||
return "Unstarted";
|
||||
case ThreadState.Stopped :
|
||||
return "Stopped";
|
||||
case ThreadState.WaitSleepJoin :
|
||||
return "WaitSleepJoin";
|
||||
case ThreadState.Suspended :
|
||||
return "Suspended";
|
||||
case ThreadState.AbortRequested :
|
||||
return "AbortRequested";
|
||||
case ThreadState.Aborted :
|
||||
return "Aborted";
|
||||
default :
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
public static long DateToUnixDate(DateTime dateTime)
|
||||
{
|
||||
DateTime javascriptEpoch=DateTime.Parse("01-01-1970 00:00:00");
|
||||
DateTime eod=new DateTime(dateTime.Year,dateTime.Month,dateTime.Day,23,0,0); // request end of day
|
||||
TimeSpan ts=eod-javascriptEpoch;
|
||||
long longDate=(long)ts.TotalSeconds;
|
||||
return longDate;
|
||||
}
|
||||
public static DateTime UnixDateToDate(long yahooDate)
|
||||
{
|
||||
DateTime javascriptEpoch=DateTime.Parse("01-01-1970 00:00:00");
|
||||
TimeSpan timespan=TimeSpan.FromSeconds((double)yahooDate);
|
||||
DateTime date=javascriptEpoch+timespan;
|
||||
return date;
|
||||
}
|
||||
public static void RemoveLogFiles(String strFolder=null)
|
||||
{
|
||||
if(null==strFolder)strFolder=Directory.GetCurrentDirectory();
|
||||
String[] logFiles=Directory.GetFiles(strFolder);
|
||||
if(null==logFiles || 0==logFiles.Length)return;
|
||||
logFiles=logFiles.Where(x => x.EndsWith(".log",StringComparison.InvariantCultureIgnoreCase)).ToArray<String>();
|
||||
if(null==logFiles || 0==logFiles.Length)return;
|
||||
foreach(String logFile in logFiles)
|
||||
{
|
||||
try
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Removing {0}",logFile));
|
||||
File.Delete(logFile);
|
||||
}
|
||||
catch(Exception){;}
|
||||
}
|
||||
}
|
||||
public static String Pad(string str, char filler, int length)
|
||||
{
|
||||
int stringLength = str.Length;
|
||||
if (stringLength >= length) return str;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
while (stringLength < length)
|
||||
{
|
||||
sb.Append(filler);
|
||||
stringLength++;
|
||||
}
|
||||
return sb.ToString() + str;
|
||||
}
|
||||
public static bool Is64Bit()
|
||||
{
|
||||
if(IntPtr.Size.Equals(8))return true;
|
||||
return false;
|
||||
}
|
||||
public static bool IsAdministrator()
|
||||
{
|
||||
return (new WindowsPrincipal(WindowsIdentity.GetCurrent())).IsInRole(WindowsBuiltInRole.Administrator);
|
||||
}
|
||||
public static String RemoveHtml(String strItem)
|
||||
{
|
||||
if(null==strItem)return null;
|
||||
String[] codes = { "'","»" };
|
||||
if(null==strItem)return strItem;
|
||||
foreach (String code in codes)
|
||||
{
|
||||
strItem = strItem.Replace(code,"'");
|
||||
}
|
||||
strItem=strItem.Replace("&","&");
|
||||
strItem=strItem.Replace("‘","'");
|
||||
strItem=strItem.Replace("’","'");
|
||||
strItem=strItem.Replace("—","-");
|
||||
strItem=strItem.Replace("“",@"""");
|
||||
strItem=strItem.Replace("“",@"""");
|
||||
strItem=strItem.Replace("”",@"""");
|
||||
strItem=strItem.Replace("”",@"""");
|
||||
strItem=strItem.Replace("–","-");
|
||||
return strItem;
|
||||
}
|
||||
public static String RemoveDivs(String strItem)
|
||||
{
|
||||
StringBuilder sb=new StringBuilder();
|
||||
bool inDiv=false;
|
||||
if(null==strItem)return strItem;
|
||||
for(int index=0;index<strItem.Length;index++)
|
||||
{
|
||||
char ch=strItem[index];
|
||||
if(ch.Equals('<'))inDiv=true;
|
||||
else if(ch.Equals('>'))inDiv=false;
|
||||
else if(!inDiv)sb.Append(ch);
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
public static int CharToNum(char ch)
|
||||
{
|
||||
return (int)ch-48;
|
||||
}
|
||||
public static String RemoveCC(String item)
|
||||
{
|
||||
StringBuilder sb=new StringBuilder();
|
||||
foreach(char ch in item)
|
||||
{
|
||||
if(!Char.IsControl(ch)) sb.Append(ch);
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
public static Stream StreamFromString(string s)
|
||||
{
|
||||
var stream=new MemoryStream();
|
||||
var writer=new StreamWriter(stream);
|
||||
writer.Write(s);
|
||||
writer.Flush();
|
||||
stream.Position=0;
|
||||
return stream;
|
||||
}
|
||||
public static String RemoveQuotes(String strItem)
|
||||
{
|
||||
if (String.IsNullOrEmpty(strItem)) return null;
|
||||
if(strItem.StartsWith("\""))strItem=strItem.Substring(1);
|
||||
if(strItem.EndsWith("\""))strItem=strItem.Substring(0,strItem.Length-1);
|
||||
return strItem;
|
||||
}
|
||||
public static String BetweenString(String strItem, String strBegin, String strEnd)
|
||||
{
|
||||
if (null == strItem) return null;
|
||||
int index=-1;
|
||||
if(null==strBegin)index=0;
|
||||
else index = strItem.IndexOf(strBegin);
|
||||
if (-1 == index) return null;
|
||||
String str = null;
|
||||
if(null!=strBegin)str=strItem.Substring(index + strBegin.Length);
|
||||
else str=strItem;
|
||||
if(null==strEnd)return str;
|
||||
index = str.IndexOf(strEnd);
|
||||
if (-1 == index) return null;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int strIndex = 0; strIndex < str.Length; strIndex++)
|
||||
{
|
||||
if (index == strIndex) break;
|
||||
sb.Append(str[strIndex]);
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
public static String RemoveAfter(String strItem, char charItem)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int index = 0; index < strItem.Length; index++)
|
||||
{
|
||||
char ch = strItem[index];
|
||||
if (ch.Equals(charItem)) break;
|
||||
sb.Append(ch);
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
public static bool OutOfRange(double value)
|
||||
{
|
||||
return value > 100000000000000000000.00 || value< -99999999999999999999.99;
|
||||
}
|
||||
public static String RemoveControlChars(String strItem)
|
||||
{
|
||||
StringBuilder sb=new StringBuilder();
|
||||
for(int index=0;index<strItem.Length;index++)
|
||||
{
|
||||
char ch=strItem[index];
|
||||
if(!char.IsControl(ch))sb.Append(ch);
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
public static String GetPath(String strPathFileName)
|
||||
{
|
||||
int index=strPathFileName.LastIndexOf('\\');
|
||||
if (-1 == index) return null;
|
||||
String strPath = strPathFileName.Substring(0, index);
|
||||
return strPath;
|
||||
}
|
||||
public static String KeepBefore(String strItem,String strKeepBefore)
|
||||
{
|
||||
int startPos=strItem.IndexOf(strKeepBefore);
|
||||
if(-1==startPos)return null;
|
||||
return strItem.Substring(0,startPos);
|
||||
}
|
||||
public static String KeepAfter(String strItem,String strKeepAfter)
|
||||
{
|
||||
int startPos=strItem.IndexOf(strKeepAfter);
|
||||
if(-1==startPos)return null;
|
||||
return strItem.Substring(startPos+strKeepAfter.Length);
|
||||
}
|
||||
public static String KeepAfterLast(String strItem,String strKeepAfter)
|
||||
{
|
||||
if(null==strItem)return null;
|
||||
int startPos=strItem.LastIndexOf(strKeepAfter);
|
||||
if(-1==startPos)return null;
|
||||
return strItem.Substring(startPos+strKeepAfter.Length);
|
||||
}
|
||||
public static String Find(String strItem,String search,char delimeter)
|
||||
{
|
||||
if(null==strItem)return null;
|
||||
bool foundDelimeter=false;
|
||||
StringBuilder sb=new StringBuilder();
|
||||
int startPos=strItem.LastIndexOf(search);
|
||||
if(-1==startPos)return null;
|
||||
startPos+=search.Length;
|
||||
for(;startPos<strItem.Length;startPos++)
|
||||
{
|
||||
char ch=strItem[startPos];
|
||||
if(ch.Equals(delimeter))
|
||||
{
|
||||
foundDelimeter=true;
|
||||
break;
|
||||
}
|
||||
sb.Append(ch);
|
||||
}
|
||||
if(!foundDelimeter)return null;
|
||||
return sb.ToString();
|
||||
}
|
||||
public static String FindFirst(String strItem,String search,char delimeter)
|
||||
{
|
||||
if(null==strItem)return null;
|
||||
bool foundDelimeter=false;
|
||||
StringBuilder sb=new StringBuilder();
|
||||
int startPos=strItem.IndexOf(search);
|
||||
if(-1==startPos)return null;
|
||||
startPos+=search.Length;
|
||||
for(;startPos<strItem.Length;startPos++)
|
||||
{
|
||||
char ch=strItem[startPos];
|
||||
if(ch.Equals(delimeter))
|
||||
{
|
||||
foundDelimeter=true;
|
||||
break;
|
||||
}
|
||||
sb.Append(ch);
|
||||
}
|
||||
if(!foundDelimeter)return null;
|
||||
return sb.ToString();
|
||||
}
|
||||
public static String AddQuotes(String item)
|
||||
{
|
||||
return "\"" + item + "\"";
|
||||
}
|
||||
public static long DateToLong(DateTime date)
|
||||
{
|
||||
int year = date.Year;
|
||||
int month = date.Month;
|
||||
int day = date.Day;
|
||||
return (year * 10000) + (month * 100) + day;
|
||||
}
|
||||
public static DateTime LongToDate(long longDate)
|
||||
{
|
||||
int year = (int)(longDate / 10000);
|
||||
int month = ((int)longDate / 100) - year * 100;
|
||||
int day = (int)(longDate - ((int)(longDate / 100)) * 100);
|
||||
return new DateTime(year, month, day);
|
||||
}
|
||||
public static String DayOfWeekToString(DayOfWeek dayOfWeek)
|
||||
{
|
||||
switch(dayOfWeek)
|
||||
{
|
||||
case System.DayOfWeek.Monday: return "Monday";
|
||||
case System.DayOfWeek.Tuesday: return "Tuesday";
|
||||
case System.DayOfWeek.Wednesday: return "Wednesday";
|
||||
case System.DayOfWeek.Thursday: return "Thursday";
|
||||
case System.DayOfWeek.Friday: return "Friday";
|
||||
case System.DayOfWeek.Saturday: return "Saturday";
|
||||
case System.DayOfWeek.Sunday: return "Sunday";
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
public static String DateTimeToStringMMMM(DateTime dateTime)
|
||||
{
|
||||
if (Utility.IsEpoch(dateTime)) return "";
|
||||
return dateTime.ToString("MMMM");
|
||||
}
|
||||
public static String DateTimeToStringMMM(DateTime dateTime)
|
||||
{
|
||||
if (Utility.IsEpoch(dateTime)) return "";
|
||||
return dateTime.ToString("MMM");
|
||||
}
|
||||
public static String DateTimeToStringHHMMSS(DateTime dateTime)
|
||||
{
|
||||
if (Utility.IsEpoch(dateTime)) return "";
|
||||
return dateTime.ToString("HH:mm:ss");
|
||||
}
|
||||
public static String DateTimeToStringMMSDDSYYYY(DateTime dateTime)
|
||||
{
|
||||
if (Utility.IsEpoch(dateTime)) return "";
|
||||
return dateTime.ToString("MM/dd/yyyy");
|
||||
}
|
||||
public static String DateTimeToStringMMSDDSYYYYHHMMSS(DateTime dateTime)
|
||||
{
|
||||
if (Utility.IsEpoch(dateTime)) return "";
|
||||
return dateTime.ToString("MM/dd/yyyy hh:mm:ss");
|
||||
}
|
||||
public static String DateTimeToStringMMHDDHYYYY(DateTime dateTime)
|
||||
{
|
||||
if (Utility.IsEpoch(dateTime)) return "";
|
||||
return dateTime.ToString("MM-dd-yyyy");
|
||||
}
|
||||
public static String DateTimeToStringYYYYHMMHDD(DateTime dateTime)
|
||||
{
|
||||
if (Utility.IsEpoch(dateTime)) return "";
|
||||
return dateTime.ToString("yyyy-MM-dd");
|
||||
}
|
||||
public static String DateTimeToStringYYYYHMMHDDHHMMSS(DateTime dateTime)
|
||||
{
|
||||
if (Utility.IsEpoch(dateTime)) return "";
|
||||
return dateTime.ToString("yyyy-MM-dd hh:mm:ss");
|
||||
}
|
||||
public static String DateTimeToStringYYYYHMMHDDHHMMSSTT(DateTime dateTime)
|
||||
{
|
||||
if(Utility.IsEpoch(dateTime)) return "";
|
||||
return dateTime.ToString("yyyy-MM-dd hh:mm:ss tt");
|
||||
}
|
||||
public static String DateTimeToStringYYYYMMDDMMSSTT(DateTime dateTime)
|
||||
{
|
||||
if(Utility.IsEpoch(dateTime)) return "";
|
||||
return dateTime.ToString("yyyyMMddhhmmsstt");
|
||||
}
|
||||
public static String DateTimeToStringYYYYMMDD(DateTime dateTime)
|
||||
{
|
||||
if (Utility.IsEpoch(dateTime)) return "";
|
||||
return dateTime.ToString("yyyyMMdd");
|
||||
}
|
||||
public static String AsteriskForString(String str)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
int length = str.Length;
|
||||
for (int index = 0; index < length; index++) sb.Append("*");
|
||||
return sb.ToString();
|
||||
}
|
||||
public static String FormatNumber(double number)
|
||||
{
|
||||
StringBuilder sb=new StringBuilder();
|
||||
if (double.NaN.Equals(number))sb.Append("N/A");
|
||||
else sb.Append(String.Format("{0:0.000}", number));
|
||||
return sb.ToString();
|
||||
}
|
||||
public static String FormatNumber(double number,int places,bool commas=false)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
StringBuilder formatString=new StringBuilder();
|
||||
if (commas&&Math.Abs(number)>=1000.00) formatString.Append("{0:0,0.");
|
||||
else formatString.Append("{0:0.");
|
||||
for(int index=0;index<places;index++)formatString.Append("0");
|
||||
formatString.Append("}");
|
||||
if (double.NaN.Equals(number)) sb.Append("N/A");
|
||||
else sb.Append(String.Format(formatString.ToString(), number));
|
||||
return sb.ToString();
|
||||
}
|
||||
public static String FormatCurrency(double number)
|
||||
{
|
||||
StringBuilder sb=new StringBuilder();
|
||||
if (double.NaN.Equals(number))sb.Append("N/A");
|
||||
else sb.Append(String.Format("{0:C}", number));
|
||||
return sb.ToString();
|
||||
}
|
||||
public static String FormatCurrency(double number,int decimals)
|
||||
{
|
||||
StringBuilder sb=new StringBuilder();
|
||||
String currencyFormat="{0:C"+decimals+"}";
|
||||
if (double.NaN.Equals(number))sb.Append("N/A");
|
||||
else sb.Append(String.Format(currencyFormat, number));
|
||||
return sb.ToString();
|
||||
}
|
||||
public static String FormatPercent(double number)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (double.NaN.Equals(number)) sb.Append("N/A");
|
||||
else sb.Append(String.Format("{0:P}", number));
|
||||
return sb.ToString();
|
||||
}
|
||||
public static String FormatPercent(double number,int places)
|
||||
{
|
||||
StringBuilder sb=new StringBuilder();
|
||||
String formatString="{0:P"+places+"}";
|
||||
if(double.NaN.Equals(number)) sb.Append("N/A");
|
||||
else sb.Append(String.Format(formatString,number));
|
||||
return sb.ToString();
|
||||
}
|
||||
public static String ConformDate(String strDate)
|
||||
{
|
||||
String[] elements=strDate.Split(' ');
|
||||
if(elements.Length<3)return strDate;
|
||||
return elements[0]+" "+elements[1]+" "+elements[2];
|
||||
}
|
||||
public static DateTime ParseDate(String strDate)
|
||||
{
|
||||
System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("en-US");
|
||||
String[] formats=new[] { "yyyy-MM-dd hh:mm:ss tt","dddd, MMMM dd","MMM dd yyyy","yyyy-MM","ddd, MMM. d","ddd, MMM. dd","yyyy/MM/dd","M-d-yyyy","dd-MM-yyyy","MM-dd-yyyy","M.d.yyyy","dd.MM.yyyy","MM.dd.yyyy","yyyyMMdd" }.Union(cultureInfo.DateTimeFormat.GetAllDateTimePatterns()).ToArray();
|
||||
strDate = strDate.Trim();
|
||||
DateTime dateTime=DateTime.ParseExact(strDate, formats, new System.Globalization.CultureInfo("en-US"), DateTimeStyles.AssumeLocal);
|
||||
return dateTime;
|
||||
}
|
||||
public static double ParsePercent(String strPercent)
|
||||
{
|
||||
if (null == strPercent) return double.NaN;
|
||||
strPercent = strPercent.Replace("%", null);
|
||||
try { return double.Parse(strPercent)/100.00; }
|
||||
catch (Exception) { return double.NaN; }
|
||||
}
|
||||
public static String FormatCurrencyWithQuotes(double number)
|
||||
{
|
||||
return AddQuotes(FormatCurrency(number));
|
||||
}
|
||||
public static String FormatDates(DateTime d1, DateTime d2)
|
||||
{
|
||||
StringBuilder sb=new StringBuilder();
|
||||
sb.Append(Utility.DateTimeToStringMMSDDSYYYY(d1)).Append("-");
|
||||
sb.Append(Utility.DateTimeToStringMMSDDSYYYY(d2));
|
||||
return sb.ToString();
|
||||
}
|
||||
public static String TrimToSpace(String strString)
|
||||
{
|
||||
if (null == strString) return strString;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int index = 0; index < strString.Length; index++)
|
||||
{
|
||||
char ch=strString[index];
|
||||
if (' '.Equals(ch)) break;
|
||||
sb.Append(ch);
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
public static String BooleanToYesNoString(bool booleanValue)
|
||||
{
|
||||
return booleanValue ? "Yes" : "No";
|
||||
}
|
||||
public static bool IsEpoch(DateTime dateTime)
|
||||
{
|
||||
return dateTime.Equals(epoch);
|
||||
}
|
||||
public static DateTime Epoch
|
||||
{
|
||||
get { return epoch; }
|
||||
}
|
||||
public static TimeSpan OneDay
|
||||
{
|
||||
get{return oneDay;}
|
||||
}
|
||||
public static String ListToString(List<String> list,char separator=',')
|
||||
{
|
||||
StringBuilder sb=new StringBuilder();
|
||||
if (null == list || 0 == list.Count) return null;
|
||||
for(int index=0;index<list.Count;index++)
|
||||
{
|
||||
sb.Append(list[index]);
|
||||
if(index<list.Count-1)sb.Append(separator);
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
public static List<String> ToList(String items,char separator=',')
|
||||
{
|
||||
List<String> list = items.Split(separator).ToList<String>();
|
||||
list=(from String str in list where !String.IsNullOrEmpty(str) select str.Trim()).ToList<String>();
|
||||
return list;
|
||||
}
|
||||
public static String FromList(List<String> items,String postFix=",")
|
||||
{
|
||||
StringBuilder sb=new StringBuilder();
|
||||
for(int index=0;index<items.Count;index++)
|
||||
{
|
||||
sb.Append(items[index]);
|
||||
if(index<items.Count-1)sb.Append(postFix);
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
public static byte[] Compress(String strString)
|
||||
{
|
||||
MemoryStream outputStream = null;
|
||||
GZipStream compressionStream = null;
|
||||
try
|
||||
{
|
||||
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(strString);
|
||||
outputStream = new MemoryStream();
|
||||
compressionStream = new GZipStream(outputStream, CompressionMode.Compress, true);
|
||||
compressionStream.Write(bytes, 0, bytes.Length);
|
||||
compressionStream.Close();
|
||||
compressionStream = null;
|
||||
byte[] outputBytes = outputStream.ToArray();
|
||||
outputStream.Close();
|
||||
outputStream = null;
|
||||
return outputBytes;
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,exception);
|
||||
return null;
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (null != compressionStream)
|
||||
{
|
||||
compressionStream.Close();
|
||||
compressionStream = null;
|
||||
}
|
||||
if (null != outputStream)
|
||||
{
|
||||
outputStream.Close();
|
||||
outputStream = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
public static String Decompress(byte[] compressedBytes)
|
||||
{
|
||||
MemoryStream compressedStream = new MemoryStream(compressedBytes);
|
||||
GZipStream decompressionStream = new GZipStream(compressedStream, CompressionMode.Decompress,true);
|
||||
MemoryStream outputStream=new MemoryStream();
|
||||
try
|
||||
{
|
||||
byte[] decompressedBytesBuffer = new byte[4096];
|
||||
int count = 0;
|
||||
while (true)
|
||||
{
|
||||
count = decompressionStream.Read(decompressedBytesBuffer, 0, decompressedBytesBuffer.Length);
|
||||
if (count > 0) outputStream.Write(decompressedBytesBuffer, 0, count);
|
||||
else break;
|
||||
}
|
||||
decompressionStream.Close();
|
||||
compressedStream.Close();
|
||||
String strDecompressed = System.Text.Encoding.UTF8.GetString(outputStream.ToArray());
|
||||
outputStream.Close();
|
||||
outputStream = null;
|
||||
compressedStream = null;
|
||||
decompressionStream = null;
|
||||
return strDecompressed;
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,exception);
|
||||
return null;
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (null != outputStream)
|
||||
{
|
||||
outputStream.Close();
|
||||
outputStream = null;
|
||||
}
|
||||
if (null != decompressionStream)
|
||||
{
|
||||
decompressionStream.Close();
|
||||
decompressionStream = null;
|
||||
}
|
||||
if (null != compressedStream)
|
||||
{
|
||||
compressedStream.Close();
|
||||
compressedStream = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
public static void LaunchBrowserSearch(String searchTerm)
|
||||
{
|
||||
Process.Start("https://www.google.com/search?q="+Uri.EscapeDataString(searchTerm)+"/");
|
||||
}
|
||||
public static bool IsZeroOrNaN(double value)
|
||||
{
|
||||
return IsNaN(value)||IsZero(value);
|
||||
}
|
||||
private static bool IsZero(double value)
|
||||
{
|
||||
if(value==0.00)return true;
|
||||
return false;
|
||||
}
|
||||
private static bool IsNaN(double value)
|
||||
{
|
||||
return double.IsNaN(value);
|
||||
}
|
||||
public static bool DeleteFile(String pathFileName)
|
||||
{
|
||||
if(!File.Exists(pathFileName))return false;
|
||||
try{File.Delete(pathFileName);}catch(Exception){return false;}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool CopyFile(String pathSrcFileName,String pathDstFileName)
|
||||
{
|
||||
if(!File.Exists(pathSrcFileName))return false;
|
||||
try{File.Copy(pathSrcFileName,pathDstFileName);}catch(Exception){return false;}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
bin/Debug/IPMonitor.exe
Normal file
BIN
bin/Debug/IPMonitor.exe
Normal file
Binary file not shown.
14
bin/Debug/IPMonitor.exe.config
Normal file
14
bin/Debug/IPMonitor.exe.config
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<appSettings>
|
||||
<add key="poll_time_ms" value="300000"/>
|
||||
<add key="notify_time_ms" value="4320000"/>
|
||||
<add key="sms_smtpaddress" value="smtp.gmail.com"/>
|
||||
<add key="sms_smsusername" value="skessler1964@gmail.com"/>
|
||||
<add key="sms_smspassword" value="xjfo isnf gmyi zovr"/>
|
||||
<add key="sms_smsrecipients" value="skessler1964sms@gmail.com"/>
|
||||
</appSettings>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/>
|
||||
</startup>
|
||||
</configuration>
|
||||
BIN
bin/Debug/IPMonitor.pdb
Normal file
BIN
bin/Debug/IPMonitor.pdb
Normal file
Binary file not shown.
BIN
bin/Debug/IPMonitor.vshost.exe
Normal file
BIN
bin/Debug/IPMonitor.vshost.exe
Normal file
Binary file not shown.
14
bin/Debug/IPMonitor.vshost.exe.config
Normal file
14
bin/Debug/IPMonitor.vshost.exe.config
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<appSettings>
|
||||
<add key="poll_time_ms" value="300000"/>
|
||||
<add key="notify_time_ms" value="4320000"/>
|
||||
<add key="sms_smtpaddress" value="smtp.gmail.com"/>
|
||||
<add key="sms_smsusername" value="skessler1964@gmail.com"/>
|
||||
<add key="sms_smspassword" value="xjfo isnf gmyi zovr"/>
|
||||
<add key="sms_smsrecipients" value="skessler1964sms@gmail.com"/>
|
||||
</appSettings>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/>
|
||||
</startup>
|
||||
</configuration>
|
||||
11
bin/Debug/IPMonitor.vshost.exe.manifest
Normal file
11
bin/Debug/IPMonitor.vshost.exe.manifest
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
|
||||
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
|
||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
|
||||
<security>
|
||||
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
|
||||
</requestedPrivileges>
|
||||
</security>
|
||||
</trustInfo>
|
||||
</assembly>
|
||||
1
bin/Debug/ipaddress.txt
Normal file
1
bin/Debug/ipaddress.txt
Normal file
@@ -0,0 +1 @@
|
||||
67.191.114.201
|
||||
1
bin/Debug/ipmonitor.log
Normal file
1
bin/Debug/ipmonitor.log
Normal file
@@ -0,0 +1 @@
|
||||
[LOCAL][Thread=9][TRACE.DEBUG][3/13/2024 04:32:56 PM] [IPMonitor.Program::WriteFile(strPathFileName,ipAddress)]Creating address file:ipaddress.txt
|
||||
1
bin/Release/20240313061456PMipmonitor.log
Normal file
1
bin/Release/20240313061456PMipmonitor.log
Normal file
@@ -0,0 +1 @@
|
||||
[LOCAL][Thread=1][TRACE.DEBUG][3/13/2024 6:10:56 PM] [IPMonitor.Program::WriteFile(strPathFileName,ipAddress)]Creating address file:ipaddress.txt
|
||||
BIN
bin/Release/IPMonitor.exe
Normal file
BIN
bin/Release/IPMonitor.exe
Normal file
Binary file not shown.
14
bin/Release/IPMonitor.exe.config
Normal file
14
bin/Release/IPMonitor.exe.config
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<appSettings>
|
||||
<add key="poll_time_ms" value="300000"/>
|
||||
<add key="notify_time_ms" value="4320000"/>
|
||||
<add key="sms_smtpaddress" value="smtp.gmail.com"/>
|
||||
<add key="sms_smsusername" value="skessler1964@gmail.com"/>
|
||||
<add key="sms_smspassword" value="xjfo isnf gmyi zovr"/>
|
||||
<add key="sms_smsrecipients" value="skessler1964sms@gmail.com"/>
|
||||
</appSettings>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/>
|
||||
</startup>
|
||||
</configuration>
|
||||
BIN
bin/Release/IPMonitor.pdb
Normal file
BIN
bin/Release/IPMonitor.pdb
Normal file
Binary file not shown.
BIN
bin/Release/IPMonitor.vshost.exe
Normal file
BIN
bin/Release/IPMonitor.vshost.exe
Normal file
Binary file not shown.
13
bin/Release/IPMonitor.vshost.exe.config
Normal file
13
bin/Release/IPMonitor.vshost.exe.config
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<appSettings>
|
||||
<add key="poll_time_ms" value="300000"/>
|
||||
<add key="sms_smtpaddress" value="smtp.gmail.com"/>
|
||||
<add key="sms_smsusername" value="skessler1964@gmail.com"/>
|
||||
<add key="sms_smspassword" value="xjfo isnf gmyi zovr"/>
|
||||
<add key="sms_smsrecipients" value="skessler1964sms@gmail.com"/>
|
||||
</appSettings>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/>
|
||||
</startup>
|
||||
</configuration>
|
||||
11
bin/Release/IPMonitor.vshost.exe.manifest
Normal file
11
bin/Release/IPMonitor.vshost.exe.manifest
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
|
||||
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
|
||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
|
||||
<security>
|
||||
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
|
||||
</requestedPrivileges>
|
||||
</security>
|
||||
</trustInfo>
|
||||
</assembly>
|
||||
1
bin/Release/ipaddress.txt
Normal file
1
bin/Release/ipaddress.txt
Normal file
@@ -0,0 +1 @@
|
||||
67.191.114.201
|
||||
1
bin/Release/ipmonitor.log
Normal file
1
bin/Release/ipmonitor.log
Normal file
@@ -0,0 +1 @@
|
||||
[LOCAL][Thread=1][TRACE.DEBUG][3/13/2024 6:14:56 PM] [IPMonitor.Program::WriteFile(strPathFileName,ipAddress)]Creating address file:ipaddress.txt
|
||||
BIN
obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
Normal file
BIN
obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
Normal file
Binary file not shown.
9
obj/Debug/IPMonitor.csproj.FileListAbsolute.txt
Normal file
9
obj/Debug/IPMonitor.csproj.FileListAbsolute.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
C:\Visual Studio\IPMonitor\bin\Debug\IPMonitor.exe.config
|
||||
C:\Visual Studio\IPMonitor\bin\Debug\IPMonitor.exe
|
||||
C:\Visual Studio\IPMonitor\bin\Debug\IPMonitor.pdb
|
||||
C:\Visual Studio\IPMonitor\obj\Debug\IPMonitor.csprojResolveAssemblyReference.cache
|
||||
C:\Visual Studio\IPMonitor\obj\Debug\IPMonitor.exe
|
||||
C:\Visual Studio\IPMonitor\obj\Debug\IPMonitor.pdb
|
||||
C:\boneyard\IPMonitor\bin\Debug\IPMonitor.exe.config
|
||||
C:\boneyard\IPMonitor\obj\Debug\IPMonitor.exe
|
||||
C:\boneyard\IPMonitor\obj\Debug\IPMonitor.pdb
|
||||
BIN
obj/Debug/IPMonitor.csprojResolveAssemblyReference.cache
Normal file
BIN
obj/Debug/IPMonitor.csprojResolveAssemblyReference.cache
Normal file
Binary file not shown.
BIN
obj/Debug/IPMonitor.exe
Normal file
BIN
obj/Debug/IPMonitor.exe
Normal file
Binary file not shown.
BIN
obj/Debug/IPMonitor.pdb
Normal file
BIN
obj/Debug/IPMonitor.pdb
Normal file
Binary file not shown.
Reference in New Issue
Block a user