Visual Basic.NET - Obtener eventos de una pc de mi Lan

 
Vista:
Imágen de perfil de Ignacio
Val: 84
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Obtener eventos de una pc de mi Lan

Publicado por Ignacio (43 intervenciones) el 04/11/2016 00:52:51
Hice un soft que permite leer y hacer backup de los eventos de windows, funciona perfectamente en el Host local, pero estoy buscando la variante de tomar también los eventos de una pc conectada a mi LAN.

El procedimiento que utilizo es :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
'Cantidad de eventos de la PC
remoteEventLogs = EventLog.GetEventLogs(System.Environment.MachineName)
 
oFSO = CreateObject("Scripting.FileSystemObject")
If Not oFSO.FolderExists(DestServer & folderName) Then
    'No existe la carpeta por la tanto la creo .
    System.IO.Directory.CreateDirectory(DestServer & folderName)
End If
objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate, (Backup, Security)}!\\" & strComputer & "\root\cimv2")
 
'This section goes out and gets the hostname this is run on for us.
colServices = objWMIService.ExecQuery("Select * from Win32_NTEventLogFile")
 
colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem", , 48)
 
Dim log As EventLog
Dim elemento As Integer = 1
Dim strHOSTNAME(remoteEventLogs.Count()) As String
 
'guardo en el arreglo los nombres de los eventos 
For Each log In remoteEventLogs
    strHOSTNAME(elemento) = log.Log
    elemento = elemento + 1
Next


Hasta aqui todo funciona perfecto, cuando se trata del propio host (System.Environment.MachineName), lo que quiciera hacer es tomar los eventos de una pc de mi red lan
pues cuando cambio System.Environment.MachineName por la string del nombre de la pc de mi lan me salta el error que intento realizar una operacion no valida, que no tengo los suficientes privilegios para acceder.
Me pudiera usted indicar como poder hacerlo. ?
Gracias por su tiempo .

Ignacio Valdes Sanchez.
Administrador de red y programador.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Andres Leonardo
Val: 20
Ha aumentado su posición en 4 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Obtener eventos de una pc de mi Lan

Publicado por Andres Leonardo (8 intervenciones) el 07/11/2016 20:42:56
con que usuario levantas la aplicacion en la PC donde recoges los datos podria ser que necesites otro tipo de accesos de ejecucion

Intneta administrar las pcs con esa misma cuenta para ver que te sale


SAludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de ignacio
Val: 84
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Obtener eventos de una pc de mi Lan

Publicado por ignacio (43 intervenciones) el 07/11/2016 22:01:20
La aplicacion la levanto en todas las pc con el user local, es por eso qie no tengo que darle credenciales y funciona, pero quiero hacer una 2da version para tomar los eventos de alguna PC en la red, se que debo darle credenciales administrativas para acceder a la pc por red antes del comando remoteEventLogs = EventLog.GetEventLogs("pc") para obtener la cantidad de eventos de ella, pero lo que no encuentro es como hacerlo y con que comando, es por eso que me da error de acceso denegado. Me sucede lo mismo cuando ejecuto la aplicacion como admin de la red.
Gracias por su respuesta Sr.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener eventos de una pc de mi Lan

Publicado por Nacho (56 intervenciones) el 08/11/2016 09:56:08
Para poder acceder a un ordenador A de una red desde otro B tienes que darle permiso al ordenador B desde el A. No tiene nada que ver con los permisos que tenga el B. Si quieres leer algo del ordenador de allá tienes que decirle que te deje acceder desde aquí.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de ignacio
Val: 84
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Obtener eventos de una pc de mi Lan

Publicado por ignacio (43 intervenciones) el 09/11/2016 17:54:28
Te entendi perfecto amigo, y tengo los privilegios para acceder desde la Pc "A" para la "B", incluso logre llegar a ella y obtener la cantidad de eventos de la PC "B", pero cuando voy hacer al backup de los mismos lo que me salva son los eventos de la PC "A", o sea, donde se esta corriendo la Aplicacion. Observa lo que hago para que tengas una idea o me digas que estoy haciendo
mal. Gracias por su ayuda.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
'Estoy corriendo la aplicacion desde la PC "A"
'**************************** Conexión a la máquina remota PC (B)
 
Dim colServices As Object
 
Dim objSWbemLocator As Object = CreateObject("WbemScripting.SWbemLocator")
 
Dim objWmiService As Object
 
       objWmiService = objSWbemLocator.ConnectServer("PC B", "root\cimv2", "User Admin", "Password", "MS_409", "ntlmdomain:" + "Dominio")
 
 
 
colServices = objWmiService.ExecQuery("Select * from Win32_NTEventLogFile")
 
Try
    remoteEventLogs = EventLog.GetEventLogs("PC B")
Catch ex As Exception
    MsgBox(ex.ToString())
End Try
 
Dim strHOSTNAME(remoteEventLogs.Count()) As String
Dim elemento As Integer = 1
Dim log As EventLog
 
'guardo en el arreglo los nombres de los eventos 
For Each log In remoteEventLogs
    strHOSTNAME(elemento) = log.Log
    elemento = elemento + 1
Next
Dim errBackupLog As String
elemento = 2
Dim ss As String
 
'Creo los eventos
 
 
Dim hEventLog As IntPtr
Dim lretv As Integer
hEventLog = OpenEventLog(vbNullString, strHOSTNAME(elemento))
If hEventLog = IntPtr.Zero Then
    System.Diagnostics.Debug.Write("OpenEvent Log Failed")
    Exit Sub
End If
 
lretv = BackupEventLog(hEventLog, "c:\Carpeta Backup" & strHOSTNAME(elemento) & ".evt")
If lretv = 0 Then
    Debug.Write("BackupEventLog Failed")
    Exit Sub
End If
 
 
For Each objLogfile In colServices
    ss = "c:\Carpeta Backup" & strHOSTNAME(elemento) & ".evt"
    errBackupLog = objLogfile.BackupEventLog(ss)
    If errBackupLog <> 0 Then
        MsgBox("El backup del registro " & strHOSTNAME(elemento) & " no pudo ser creado.")
    Else
        elemento = elemento + 1
    End If
Next
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener eventos de una pc de mi Lan

Publicado por Nacho (56 intervenciones) el 11/11/2016 12:12:38
Esos errores se ven debuggeando.

Entiendo que después de llamar a remoteEventLogs = EventLog.GetEventLogs("PC B") tienes en remoteEventLogs los logs correctos. Debuggea lo siguiente a ver dónde aparecen los eventos que no son, que viendo sólo el código en complicado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener eventos de una pc de mi Lan

Publicado por ignacio (1 intervención) el 17/11/2016 17:53:14
Correcto amigo, debugie y es como dices en remoteEventLogs tengo los nombres correctos de los eventos de la PC B, ahora , cuando llego a hEventLog = OpenEventLog(vbNullString, strHOSTNAME(elemento)) que supuestamente debe abrirmelos me tomaba los de la pc local (PC A), segun estuve leyendo si en OpenEventLog le doy un valor null (vbNullString) toma los de la Local, debo darle el camino "\\PC B" pero ahi me da error, esto me tiene loco, pero fue de gran ayuda lo que me indicaste, gracias, tienes otra sujerencia a ver porque me salta el error?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener eventos de una pc de mi Lan

Publicado por Nacho (56 intervenciones) el 18/11/2016 10:33:12
Pero, cuando ya tienes ls eventos en remoteEventLogs usando .net framework, ¿para qué llamas OpenEventLog, que es una función del api de Windows?

.Net framework no es más que una encapsulaciín del api de Windows. Con el api se pueden hacer cosas que con .net no, pero si puedes hacerlas con .net y ya las has hecho...

Los eventos ya están en remoteEventLogs, por lo que dices, y para acceder a ellos no tienes más que hacer algo como foreach(EventLog log in remoteEventLogs) y en log.Log está el log.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de ignacio
Val: 84
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Obtener eventos de una pc de mi Lan

Publicado por ignacio (43 intervenciones) el 21/11/2016 17:13:00
Muy valiosa tu explicación, muchas gracias colega, tomando tu criterio y con algunos cambios pude lograrlo. gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar