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