diff --git a/Narvaling.Monitor.exe_config solo navegador.config b/Narvaling.Monitor.exe_config solo navegador.config new file mode 100644 index 0000000..04e5734 --- /dev/null +++ b/Narvaling.Monitor.exe_config solo navegador.config @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SoloEnLan.sln b/Narvaling.monitor.sln similarity index 86% rename from SoloEnLan.sln rename to Narvaling.monitor.sln index 0ad5762..e75f172 100644 --- a/SoloEnLan.sln +++ b/Narvaling.monitor.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.10.35013.160 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SoloEnLan", "SoloEnLan\SoloEnLan.csproj", "{E15ED562-973B-41AB-B45E-3F7944570CAA}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Narvaling.monitor", "SoloEnLan\Narvaling.monitor.csproj", "{E15ED562-973B-41AB-B45E-3F7944570CAA}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/SoloEnLan/App.config b/SoloEnLan/App.config index 28499cb..8130f2f 100644 --- a/SoloEnLan/App.config +++ b/SoloEnLan/App.config @@ -4,14 +4,24 @@ - + - + + + + + + + + + + + diff --git a/SoloEnLan/SoloEnLan.csproj b/SoloEnLan/Narvaling.monitor.csproj similarity index 94% rename from SoloEnLan/SoloEnLan.csproj rename to SoloEnLan/Narvaling.monitor.csproj index 6325951..3262b2b 100644 --- a/SoloEnLan/SoloEnLan.csproj +++ b/SoloEnLan/Narvaling.monitor.csproj @@ -7,7 +7,7 @@ {E15ED562-973B-41AB-B45E-3F7944570CAA} WinExe SoloEnLan - SoloEnLan + Narvaling.monitor v4.8 512 true @@ -52,6 +52,7 @@ + Component @@ -68,6 +69,7 @@ + @@ -81,11 +83,6 @@ Always - - - 7.1.3 - - diff --git a/SoloEnLan/SoloEnLan.csproj.user b/SoloEnLan/Narvaling.monitor.csproj.user similarity index 100% rename from SoloEnLan/SoloEnLan.csproj.user rename to SoloEnLan/Narvaling.monitor.csproj.user diff --git a/SoloEnLan/ProjectInstaller.Designer.cs b/SoloEnLan/ProjectInstaller.Designer.cs index 1685dfc..378884f 100644 --- a/SoloEnLan/ProjectInstaller.Designer.cs +++ b/SoloEnLan/ProjectInstaller.Designer.cs @@ -39,9 +39,9 @@ // // serviceInstaller1 // - this.serviceInstaller1.Description = "Control de seguridad en lan"; - this.serviceInstaller1.DisplayName = "SoloEnLan"; - this.serviceInstaller1.ServiceName = "SoloEnLan"; + this.serviceInstaller1.Description = "Monitor de procesos narvaling"; + this.serviceInstaller1.DisplayName = "Narvaling.monitor"; + this.serviceInstaller1.ServiceName = "Narvaling.monitor"; this.serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic; // // ProjectInstaller diff --git a/SoloEnLan/Service1.cs b/SoloEnLan/Service1.cs index f1bf7cc..325a91b 100644 --- a/SoloEnLan/Service1.cs +++ b/SoloEnLan/Service1.cs @@ -1,4 +1,4 @@ -using SoloEnLan.model; +using Narvaling.monitor.model; using System; using System.Collections.Generic; using System.ComponentModel; @@ -9,13 +9,15 @@ using System.ServiceProcess; using System.Text; using System.Threading.Tasks; using System.Diagnostics; -using SoloEnLan.service; +using Narvaling.monitor.service; namespace SoloEnLan { public partial class SoloEnLan : ServiceBase { monitor m; - private string nombreService = "SoloEnLan"; + monitorNavegacion mn; + + private string nombreService = "Narvaling.monitor"; public SoloEnLan() { InitializeComponent(); @@ -27,21 +29,25 @@ namespace SoloEnLan eventLog1.Source = nombreService; eventLog1.Log = "Application"; m =new monitor(); + mn= new monitorNavegacion(); } public void inicia() { m.start(); + mn.start(); } protected override void OnStart(string[] args) { logService.log("Se inicia " + nombreService); //eventLog1.WriteEntry("Se inicia " + nombreService); inicia(); + logService.log("Fin Inicio " + nombreService); } protected override void OnStop() { m.fin(); + mn.fin(); logService.log("Finaliza" + nombreService); } } diff --git a/SoloEnLan/model/monitor.cs b/SoloEnLan/model/monitor.cs index ab64eab..56846b2 100644 --- a/SoloEnLan/model/monitor.cs +++ b/SoloEnLan/model/monitor.cs @@ -1,4 +1,4 @@ -using SoloEnLan.service; +using Narvaling.monitor.service; using System; using System.Collections.Generic; using System.Configuration; @@ -6,9 +6,8 @@ using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; -using Windows.Web.UI; -namespace SoloEnLan.model +namespace Narvaling.monitor.model { public class monitor @@ -19,10 +18,15 @@ namespace SoloEnLan.model private int tiempoMensaje; public monitor() { - t = new Thread(runMonitor); - pirate = false; tiempoComprobacion = int.Parse(ConfigurationManager.AppSettings["tiempoComprovacionPrime"]); tiempoMensaje = int.Parse(ConfigurationManager.AppSettings["tiempoNotificacion"]); + if(tiempoComprobacion>0) + t = new Thread(runMonitor); + else + t = null; + + pirate = false; + } private static void runMonitor(object m) @@ -45,6 +49,8 @@ namespace SoloEnLan.model } private void run() { + string aa = IdService.GetMEI(); + aa = aa; while (!pirate) { DateTime currentDate = DateTime.Now; @@ -56,7 +62,18 @@ namespace SoloEnLan.model //Thread.Sleep(tiempoComprobacion*1000); //revisa lan logService.log("Se comprueba Autorización"); - if (!ConectaSRV()) + var res = ConectaSRV(); + + if(res==1) + { + logService.log("Pc autorizado"); + } + else if(res<0) + { + logService.log("Pc sin conexión"); + //se intentara mas adelante + } + else { logService.log("Pc sin autorizacion"); if (pirate) @@ -72,44 +89,44 @@ namespace SoloEnLan.model logService.log("Se apaga maquina"); shutdownService.apagaPc(); } + if(res<0) + int.Parse(ConfigurationManager.AppSettings["tiempoComprovacionPrime"]); else - { - logService.log("Pc autorizado"); - } - tiempoComprobacion = int.Parse(ConfigurationManager.AppSettings["tiempoComprovacion"]); + tiempoComprobacion = int.Parse(ConfigurationManager.AppSettings["tiempoComprovacion"]); } } - private bool ConectaSRV() + private int ConectaSRV() { for (int i = 0; i < 3; i++) { if (pirate) - return false; + return -1; //intenta a srv lan var res= conexionService.ConectLanSRV(); if( res<0) espera(5); else { - return res == 1; + return res; } } + for (int i = 0; i < 3; i++) { if (pirate) - return false; + return -1; //intenta a srv lan var res = conexionService.ConectExternSRV(); if (res < 0) espera(5); else { - return res == 1; + return res; } } - return false; + return -1; } @@ -117,7 +134,7 @@ namespace SoloEnLan.model public void start() { - if (!t.IsAlive) + if (t!=null &&!t.IsAlive) { pirate = false; t.Start(this); @@ -127,7 +144,8 @@ namespace SoloEnLan.model public void fin() { pirate = true; - t.Join(); + if(t != null) + t.Join(); } } diff --git a/SoloEnLan/model/monitorNavegacion.cs b/SoloEnLan/model/monitorNavegacion.cs new file mode 100644 index 0000000..8fe9d09 --- /dev/null +++ b/SoloEnLan/model/monitorNavegacion.cs @@ -0,0 +1,185 @@ +using Narvaling.monitor.service; +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Narvaling.monitor.model +{ + + public class monitorNavegacion + + { + private Thread t; + private bool pirate; + private int tiempoComprobacion; + private bool reiniciaNavegador; + public monitorNavegacion() + { + tiempoComprobacion = int.Parse(ConfigurationManager.AppSettings["tiempoComprovacionNavegador"]); + reiniciaNavegador = true; + if(tiempoComprobacion>0) + t = new Thread(runMonitorNavegador); + else + { + t = null; + } + pirate = false; + } + + private static void runMonitorNavegador(object m) + { + + ((monitorNavegacion)m).run(); + } + private void espera(int nseg) + { + DateTime currentDate = DateTime.Now; + //espera + while (!pirate) + { + Thread.Sleep(1000); + long elapsedTicks = DateTime.Now.Ticks- currentDate.Ticks; + TimeSpan elapsedSpan = new TimeSpan(elapsedTicks); + if (elapsedSpan.TotalSeconds > nseg) + return; + } + } + private void run() + { + logService.log("Se inicia monitor de navegador"); + while (!pirate) + { + DateTime currentDate = DateTime.Now; + //espera + espera(tiempoComprobacion); + if (pirate) + continue; + CompruebaNavegador(); + } + } + + private void CompruebaNavegador() + { + if(IsNavRun()) + { + reiniciaNavegador = true; + } + else if(reiniciaNavegador) + { + logService.log("Se ReiniciaNavegador"); + reiniciaNavegador = false; + reiniciaNav(); + } + } + private void reiniciaNav() + { + borraDatosNavegacion(); + copiaPaths(); + } + private bool IsNavRun() + { + var st = ConfigurationManager.AppSettings["NombreProcesosNavegador"]; + if (String.IsNullOrWhiteSpace(st)) + return false; + var procesos=st.Split(';'); + var res = false; + foreach(var p in procesos) + { + res = res || IsProceso(p); + if (res) + break; + } + + return res; + } + private bool IsProceso(string nombreProceso) + { + Process[] procesos = Process.GetProcessesByName(nombreProceso); + + return procesos.Length > 0; + } + private void borraDatosNavegacion() + { + var st = ConfigurationManager.AppSettings["CarpetasBorrarNavegacion"]; + if (String.IsNullOrWhiteSpace(st)) + return ; + var carpetas = st.Split(';'); + foreach (var c in carpetas) + borraPath(c); + } + private void borraPath(string path) + { + if(string.IsNullOrWhiteSpace(path)) + return ; + try + { + if (Directory.Exists(path)) + Directory.Delete(path, recursive: true); + if (File.Exists(path)) + File.Delete(path); + } + catch (Exception ex) + { + } + } + private void copiaPaths() + { + var st = ConfigurationManager.AppSettings["CarpetasCopiarNavegacion"]; + if (String.IsNullOrWhiteSpace(st)) + return; + var carpetas = st.Split(';'); + foreach (var c in carpetas) + { + if (string.IsNullOrWhiteSpace(c)) + continue; + var dat=c.Split('?'); + if (dat.Length == 2) + copiaDir(dat[0], dat[1]); + } + } + private void copiaDir(string origen, string destino) + { + Directory.CreateDirectory(destino); + + // Copiar archivos + foreach (string archivo in Directory.GetFiles(origen)) + { + string nombreArchivo = Path.GetFileName(archivo); + string destinoArchivo = Path.Combine(destino, nombreArchivo); + File.Copy(archivo, destinoArchivo, overwrite: true); // overwrite opcional + } + + // Copiar subdirectorios recursivamente + foreach (string subdir in Directory.GetDirectories(origen)) + { + string nombreSubdir = Path.GetFileName(subdir); + string destinoSubdir = Path.Combine(destino, nombreSubdir); + copiaDir(subdir, destinoSubdir); + } + } + public void start() + { + + if (t!=null && !t.IsAlive) + { + pirate = false; + t.Start(this); + } + + } + public void fin() + { + pirate = true; + if(t != null) + t.Join(); + } + } + + +} diff --git a/SoloEnLan/script/install.bat b/SoloEnLan/script/install.bat index b1592c0..3eda5a8 100644 --- a/SoloEnLan/script/install.bat +++ b/SoloEnLan/script/install.bat @@ -1,3 +1,6 @@ +mkdir "C:\Program Files\Narvaling.monitor" +xcopy "%~dp0..\*" "C:\Program Files\Narvaling.monitor" + cd c:\Windows\Microsoft.NET\Framework64\v4.0.30319 -installutil.exe "C:\Program Files\soloEnLan\soloEnLan.exe" +installutil.exe "C:\Program Files\Narvaling.monitor\Narvaling.monitor.exe" pause \ No newline at end of file diff --git a/SoloEnLan/script/unista.bat b/SoloEnLan/script/unista.bat index 8f4a317..90185d4 100644 --- a/SoloEnLan/script/unista.bat +++ b/SoloEnLan/script/unista.bat @@ -1,3 +1,3 @@ cd c:\Windows\Microsoft.NET\Framework64\v4.0.30319 -installutil /uninstall "C:\Program Files\soloEnLan\soloEnLan.exe" +installutil /uninstall "C:\Program Files\Narvaling.monitor\Narvaling.monitor.exe" pause \ No newline at end of file diff --git a/SoloEnLan/service/IdService.cs b/SoloEnLan/service/IdService.cs new file mode 100644 index 0000000..e9e5064 --- /dev/null +++ b/SoloEnLan/service/IdService.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Management; +using System.Text; +using System.Threading.Tasks; + +namespace Narvaling.monitor.service +{ + internal class IdService + { + private static string id=null; + private static string ObtenerCPUId() + { + string cpuInfo = String.Empty; + try + { + + System.Management.ManagementClass mgmt = new System.Management.ManagementClass("Win32_Processor"); + System.Management.ManagementObjectCollection objCol = mgmt.GetInstances(); + foreach (System.Management.ManagementObject obj in objCol) + { + if (cpuInfo == String.Empty) + { + cpuInfo = obj.Properties["ProcessorId"].Value.ToString(); + } + } + if (cpuInfo == String.Empty) + cpuInfo = "CPUID"; + + + } + catch (Exception exp) + { + cpuInfo = ""; + } + + return cpuInfo.Trim(); + + } + private static string ObtenerMotherBoardID() + { + string serial = "MBID"; + try + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard"); + ManagementObjectCollection moc = mos.Get(); + + foreach (ManagementObject mo in moc) + { + serial = (string)mo["SerialNumber"]; + } + } + catch (Exception exp) + { + + serial = ""; + } + + return serial.Trim(); + } + private static string MEI_CODE(int longitud) + { + string st = ObtenerCPUId() + ObtenerMotherBoardID(); + var resul = ""; + + char[] code = new char[longitud]; + + int minus = 'z'-'a'+1; + int num = '9' - '0'+1; + int mayus = 'Z' - 'A'+1; + int maxi = minus + num + mayus; + int pos = 0; + foreach (char c in st) + { + code[pos] = (char)(code[pos] ^ c); + pos=(pos+1) %longitud; + } + + int e; + foreach (char c in code) + { + e = c % maxi; + if (e < minus) + resul = resul + (char)('a' + (e)); + else if (e < minus + mayus) + resul = resul + (char)('A' + (e - minus)); + else + resul = resul + (char)('0' + (e - minus - mayus)); + } + + return resul; + + } + public static string GetMEI() + { + if (id == null) + id = MEI_CODE(16); + return id; + } + } +} diff --git a/SoloEnLan/service/NotificacionService.cs b/SoloEnLan/service/NotificacionService.cs index e1d200b..13333f7 100644 --- a/SoloEnLan/service/NotificacionService.cs +++ b/SoloEnLan/service/NotificacionService.cs @@ -1,5 +1,4 @@ -using Microsoft.Toolkit.Uwp.Notifications; -using System; +using System; using System.Collections.Generic; using System.Configuration; using System.Diagnostics; @@ -7,7 +6,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace SoloEnLan.service +namespace Narvaling.monitor.service { internal class NotificacionService { diff --git a/SoloEnLan/service/conexionService.cs b/SoloEnLan/service/conexionService.cs index 4b40865..7f0b985 100644 --- a/SoloEnLan/service/conexionService.cs +++ b/SoloEnLan/service/conexionService.cs @@ -10,7 +10,7 @@ using System.Security.Policy; using System.Text; using System.Threading.Tasks; -namespace SoloEnLan.service +namespace Narvaling.monitor.service { internal class conexionService { @@ -26,7 +26,7 @@ namespace SoloEnLan.service client.BaseAddress = new Uri(sURL); client.DefaultRequestHeaders.Accept.Clear(); var res = client.GetAsync( - "?nombre="+ nombre).Result; + "?nombre="+ nombre + "&mei=" + IdService.GetMEI()).Result; if (res.IsSuccessStatusCode) { @@ -64,9 +64,6 @@ namespace SoloEnLan.service var ex = e.ToString(); return -1; } - - - return -1; } public static int ConectExternSRV() @@ -81,9 +78,6 @@ namespace SoloEnLan.service var ex = e.ToString(); return -1; } - - - return -1; } } } diff --git a/SoloEnLan/service/logService.cs b/SoloEnLan/service/logService.cs index 2a77b41..fac1fd0 100644 --- a/SoloEnLan/service/logService.cs +++ b/SoloEnLan/service/logService.cs @@ -5,7 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace SoloEnLan.service +namespace Narvaling.monitor.service { internal class logService { diff --git a/SoloEnLan/service/shutdownService.cs b/SoloEnLan/service/shutdownService.cs index 1986ce0..14cd0af 100644 --- a/SoloEnLan/service/shutdownService.cs +++ b/SoloEnLan/service/shutdownService.cs @@ -5,7 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace SoloEnLan.service +namespace Narvaling.monitor.service { internal class shutdownService { diff --git a/SoloEnLanServer/autoriza.php b/SoloEnLanServer/autoriza.php index 07e4c6b..22792ff 100644 --- a/SoloEnLanServer/autoriza.php +++ b/SoloEnLanServer/autoriza.php @@ -6,12 +6,13 @@ if(isset($_GET)) { $res=$res_default; $sel=0; - $nombre=isset($_GET['nombre']) ? trim($_GET['nombre']): null; + $nombre=isset($_GET['nombre']) ? trim($_GET['nombre']): ''; + $mei=isset($_GET['mei']) ? trim($_GET['mei']): ''; //isset($_GET['nombre']) ? trim($_GET['nombre']): null; foreach ($denegados as $pc) { - if($pc==$nombre) + if($pc==$mei) { $res='NO'; $sel=1; break; @@ -22,7 +23,7 @@ if(isset($_GET)) { foreach ($permitidos as $pc) { - if($pc==$nombre) + if($pc==$mei) { $res='OK'; $sel=1; break; @@ -30,7 +31,7 @@ if(isset($_GET)) } } - $datos=date('Y-m-d H:i:s').';'.getUserIP().';'.$nombre.';'.$res. PHP_EOL; + $datos=date('Y-m-d H:i:s').';'.getUserIP().';'.$nombre.';'.$mei.';'.$res. PHP_EOL; $logfile = date('Y-m-d') . '.csv'; $file1 = fopen("log/" . $logfile, "a"); diff --git a/User Data(chrome).zip b/User Data(chrome).zip new file mode 100644 index 0000000..b757360 Binary files /dev/null and b/User Data(chrome).zip differ diff --git a/install.bat b/install.bat new file mode 100644 index 0000000..253f1cc --- /dev/null +++ b/install.bat @@ -0,0 +1,7 @@ +mkdir "C:\Program Files\Narvaling.monitor" +mkdir "C:\Program Files\Narvaling.monitor\UserData(chrome)" +xcopy "%~dp0..\*" "C:\Program Files\Narvaling.monitor" +xcopy "%~dp0..\UserData(chrome)" "C:\Program Files\Narvaling.monitor\UserData(chrome)" /E /I /H /Y +cd c:\Windows\Microsoft.NET\Framework64\v4.0.30319 +installutil.exe "C:\Program Files\Narvaling.monitor\Narvaling.monitor.exe" +pause \ No newline at end of file