¿Cómo saber qué computadora tiene un archivo abierto en un recurso compartido de red?


21

Medio ambiente:

Windows XP sp3, servidor Windows 2003

Problema:

Tenemos varias docenas de máquinas de quiosco, cada una con el mismo nombre de inicio de sesión, que ocasionalmente y brevemente un archivo en un recurso compartido. La tasa es de varias cerraduras y libera un minuto.

Recientemente, hemos experimentado que uno de los clientes bloquea un archivo exclusivamente y luego no lo libera. 

Podemos cerrar el archivo cuando esto sucede, pero transcurren varios minutos o más, y esta es una interrupción inaceptable.

El problema de bloqueo inédito ha sucedido varias veces en el último mes. He estado buscando qué dispositivo de quiosco es responsable del bloqueo y para detectarlo rápidamente cuando ocurre.

Parece que hay un vacío en la información que podemos obtener del servidor:

Podemos ver desde varias herramientas:
-Qué archivos están abiertos y bloqueados. (muchas formas)
-Qué inicio de sesión tiene un archivo específico abierto o bloqueado. (muchas formas)
-Que una computadora en particular generalmente tiene un archivo abierto. (Carpetas compartidas, sesiones mmc)

Lo que no podemos ver es que una computadora específica tiene un archivo específico abierto y bloqueado.

Alguien sabe de una manera de llegar a esto?

Gracias -

Robar


1
No es exactamente lo que está preguntando, pero un enfoque alternativo sería crear una cuenta separada para cada sistema.
Bryan

Respuestas:


10

Echa un vistazo a esta pequeña utilidad gratuita ( ShareWatch ), creo que hará lo que estás buscando.

Una de las características enumeradas: "Muestra los usuarios y las computadoras que están conectados a cada recurso compartido, junto con los archivos que están abiertos".

texto alternativo


1
Gracias por esto, probé Sharewatch. En mi situación, más de una docena de clientes con los mismos nombres de inicio de sesión, combina los archivos abiertos y las estaciones de trabajo en la misma lista. No puede decir qué estación de trabajo lo tiene abierto. Además, seleccionar Propiedades simplemente informa que una estación de trabajo tiene x archivos abiertos, y no sus nombres de archivo. Al seleccionar Propiedades para el archivo se obtiene información similar.
RobW

7

Ingrese la línea de comando (CMD),

luego escriba: openfiles / query ip del network share

Y el nombre de usuario y la contraseña pueden ser necesarios.

Puede obtener más información de archivos abiertos aquí .


Gracias. Openfiles ofrece en gran medida el mismo resultado que la sesión de red desde la consola del servidor. No da el nombre de la computadora que abrió el archivo. Estoy buscando una conexión de archivo-> computadora, no una conexión de archivo-> usuario.
RobW

5

Creo que querrá volver a consultar la publicación de Sky100 porque él es correcto, no para proporcionarle lo que solicitó, sino para proporcionarle lo que necesita para resolver su problema. Deberá hacer referencia al número de ID bloqueado mediante el comando "openfile / query / v" (detallado) ya que le proporcionará los datos que necesita. Busque el nombre del archivo dentro de la lista dada, los datos mostrarán qué elemento tiene habilitada la lectura y escritura, y junto con él proporcionará un número de identificación específico. No, es posible que no pueda encontrar qué sistema específico tiene el archivo bloqueado, pero con las herramientas proporcionadas, puede desconectar a ese usuario del archivo. Aquí hay un paso a paso para simplificar mis divagaciones.

1) En el servidor de archivos con derechos de administrador, haga Inicio> Ejecutar> CMD [ENTER]

2) CD Desktop [ENTER] (pronto verá por qué).

3) openfiles / query / v> file.txt [ENTER] (Esto creará un archivo en el escritorio con una lista de todos los archivos abiertos en el servidor).

4) Abra el archivo.txt y busque la línea que contiene su nombre de archivo y los permisos de lectura + escritura.

5) Anote el número de identificación en esa línea y regrese a su consola de comandos.

6) abrir archivos / desconectar / ID [Ponga el número de identificación aquí] [ENTER]

Siempre que tenga derechos administrativos en el servidor de archivos, desconectará ese sistema del archivo y suponiendo que su sistema esté automatizado, debería permitir que las cosas sigan avanzando según sea necesario.

Referencias: archivos abiertos / consulta /? archivos abiertos / desconectar /?

Si necesita un script o una aplicación programada para su sistema, no dude en comentar y le proporcionaré información de contacto, un precio muy bajo junto con tecnología. Soporte en mi solicitud.


¡Decir ah! Mi problema fue localizar la computadora desde la que se abrió el archivo. ¿Tienes alguna idea sobre cómo hacer eso? Identificar y cerrar el archivo es simple, y hay muchas maneras de diseñar este resultado. Agradezco la respuesta, y su oferta comercial me dio una risita temprano en la mañana ;-)
RobW

Mis disculpas, no sabía que el proceso de archivos abiertos no era la solución. Por lo que describió, parece que habría resuelto su necesidad de echar un vistazo al sistema, ya que no cierra el archivo, sino que solo elimina esa configuración bloqueada. De hecho, construí la aplicación para mi empresa y puede automatizarse para ejecutarse cada poco para evitar tales complicaciones. Sin embargo, supongo que eso no viene al caso. Para responder a su pregunta directa: Sí, debería haber una forma de auditar esos sistemas para su acceso a ese archivo. Por favor vea mi próxima publicación para más detalles.
Thomas

En realidad, volviendo y releyendo su publicación ... "Podemos cerrar el archivo cuando esto suceda, pero transcurren varios minutos o más, y esta es una interrupción inaceptable". La razón por la que su solución no funciona es porque CIERRA el archivo. La solución de My y parcialmente Sky100 proporcionada anteriormente no cierra el archivo, pero CAMBIA los derechos de acceso a Solo lectura. Una vez más, estoy confundido acerca de cómo los archivos abiertos NO ES la solución que estás buscando. Pruébalo antes de descartarlo como una no solución. Si no está interesado en un programador, cree un archivo por lotes para ejecutar cada pocos minutos.
Thomas

Dejo mi solución a su pregunta a continuación para no perder el tiempo en caso de que mi comprensión de la situación no sea exhaustiva.
Thomas

Mmmm Disculpas, pero no creo que mi pregunta sea abordada por usted. Necesitaba ayuda para determinar qué computadora mantenía abierto el archivo. Estoy realmente interesado en determinar el nombre de la computadora. Todo lo demás, aunque interesante, no me dice lo finito que busco.
RobW

2

¿El problema que está tratando de resolver es el que usted indica (es decir, asignar el equipo cliente específico (no el usuario) al archivo bloqueado) o es que hay un problema de bloqueo que debe resolver?

Si esto último ayudara, hay dos cosas que miraría:

  • Verifique el AV que está instalado en sus clientes: he visto que varios AV del lado del cliente causan un comportamiento de bloqueo anomólico muy desagradable en los recursos compartidos.

  • Intente deshabilitar el bloqueo oportunista estableciendo el valor del registro EnableOpLocks en 0.

    HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parameters EnableOplocks REG_DWORD 0 o 1 Valor predeterminado: 1 (habilitado)

Esto reducirá un poco el rendimiento, pero no debería romper nada.

Sin embargo, me encantaría ver a alguien responder realmente a su pregunta planteada: es un problema interesante.


Gracias helvick Deshabilitar el bloqueo oportunista es un enfoque interesante. Servidor supongo?
RobW

Sí, está en el servidor: esto evita que los clientes soliciten un bloqueo oportunista para que puedan almacenar en caché localmente (partes de) archivos.
Helvick

El impacto en el rendimiento de deshabilitar el bloqueo oportunista probablemente sería inaceptable para nosotros. Tendremos que ver esto en nuestro banco de pruebas.
RobW

Eso definitivamente es un riesgo con esto: me interesaría lo que encuentres.
Helvick

2

En mi intento de solucionar el problema de RobW y proporcionar una solución alternativa, no respondí a su pregunta.

Creo que la solución que está buscando será configurar políticas de auditoría en ese sistema y luego configurar ese archivo para auditar cualquier acceso de ese usuario en particular. Los pasos para realizar esto pueden variar según la configuración de su red, por lo que lo referiré al enlace technet de microsoft sobre cómo configurar diferentes sistemas para auditar.

http://technet.microsoft.com/en-us/library/cc787268(WS.10).aspx

Después de configurar eso, asegurándose de continuar con la configuración del archivo específico que desea monitorear adjuntando la cuenta de usuario como Auditor, debe estar listo para comenzar.

Simplemente verifique sus registros de eventos de seguridad en el futuro y aunque enumerará cada sistema (ya que todos usan el mismo nombre de usuario), no debería ser difícil clasificar y localizar qué sistema tiene actualmente acceso de lectura y escritura al archivo.

Puede ser útil configurar el registro de seguridad para borrar cada pocos días.

Si esto no funciona, es probable que deba configurar el sistema por cada nombre de host que acceda al archivo, en lugar del nombre de usuario. Creo que esto es posible a través de Microsoft Management Console.

Nuevamente, si necesita programación, no soy un hombre de negocios interesado en tomar un montón de su dinero para un pequeño programa. Proporciono programación de calidad a un precio que incluso un individuo no rehuiría. Espero que esto te ayude a resolver tu problema.


Gracias por esto. Configuré la auditoría en ese directorio poco después del problema inicial. Tenemos ~ 150 clientes (y no solo quioscos) activos en ese directorio. Como el problema es intermitente, la relación señal / ruido era enorme, y no vi una forma clara de vincular una computadora en particular a un evento de archivo. Veré esto de nuevo. Ya hemos tenido un par de reuniones de diseño sobre esto. Varios temas están sobre la mesa, incluidas las cuentas de inicio de sesión. Todavía me gustaría saber qué computadora tiene un archivo abierto :-)
RobW

1

Si fuera posible, también asignaría diferentes usuarios a diferentes quioscos; podría ayudarlo a analizar otros registros ...

Si eso no es posible: Esquema de la posible solución: una solución podría ser ejecutar una herramienta como sysinternals processmonitor con un filtro adecuado (para el archivo en cuestión) en los quioscos (no sé si puede ocultarlo). Hay algunas opciones de línea de comandos con las que puedes jugar que guardan los datos capturados en el archivo.

Reúna estos de los diversos quioscos, impórtelos en, por ejemplo, Excel y busque el que no estaba cerrado ...


0

¿Qué pasa con el uso del comando netstat para determinar esto?

netstat -an | find ":445"

Esto debería proporcionarle las direcciones IP de las máquinas conectadas.

Si desea los nombres de host en lugar de las direcciones IP, use

netstat -a | find "microsoft-ds"

sin embargo, esto tardará más en ejecutarse, especialmente en servidores de archivos ocupados o controladores de dominio, ya que tendrá que realizar muchas búsquedas de host.

Además, tenga en cuenta que los resultados mostrarán puertos de escucha entrantes, salientes e inactivos.

Las conexiones entrantes mostrarán: 445 en la columna izquierda, saliente lo mostrará en la columna derecha.

Puede ignorar con seguridad cualquier resultado que indique 'ESCUCHAR' y también cualquier línea que muestre solo direcciones IP locales (por ejemplo, 0.0.0.0 o 127.0.0.1) o el nombre de host del propio equipo si no usa la opción -n.

Por ejemplo:

Z:\>netstat -an | find ":445"
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
  TCP    127.0.0.1:445          127.0.0.1:41764        ESTABLISHED
  TCP    127.0.0.1:445          127.0.0.1:41767        ESTABLISHED
  TCP    127.0.0.1:41764        127.0.0.1:445          ESTABLISHED
  TCP    127.0.0.1:41767        127.0.0.1:445          ESTABLISHED
  TCP    192.168.16.17:445      192.168.16.87:1098     ESTABLISHED
  TCP    192.168.16.17:18055    192.168.16.24:445      ESTABLISHED
  TCP    192.168.16.17:20678    192.168.16.24:445      ESTABLISHED
  UDP    0.0.0.0:445            *:*

El único host conectado aquí es 192.168.16.87. Las conexiones a 192.168.16.24 son salientes. Todas las demás conexiones son conexiones locales.


Hmmm, solo vuelve a leer tu pregunta y no resolverá tu problema, ya que no te dice qué archivo ha abierto la computadora.
Bryan

No hay problema. Agradezco la idea.
RobW

0

Recuerdo que había una herramienta gráfica dentro de Windows para verificar los recursos compartidos usados ​​y los archivos bloqueados.

Debe estar en las "herramientas del sistema" en "Administración de computadoras" (~ traducido del francés ...), bajo el nombre de "carpetas compartidas".


0

Sé que esto es muy antiguo, pero ADSI proporciona la interfaz WinNT: //, que le permite acceder al servicio LANMANSERVER y consultar las propiedades ya expuestas en el complemento mmc "Carpetas compartidas". Actualmente estoy investigando una forma de vincular un host y un usuario a un archivo abierto.


-1

Si fuera yo y tuviera acceso a una máquina Linux en la misma subred ... Haría un tcpdump en el puerto compartido en cuestión en el cuadro en el que mantienen abierto el archivo.

Si no tiene Unix, aún puede usar tcpdump pero debe instalarlo.

de Linux ... Haría algo como esto: tcpdump -ieth0 -s0 -X hostname port 1234 | grep -i "nameoffile"

Sé que la mayor parte de la carga útil es binaria ... Sin embargo, apostaría un buen dinero a que el encabezado inicial para negociar la autenticación para acceder al archivo está en texto claro.

Esto le mostrará cada host remoto que se conecta a ese cuadro y dónde se encuentra el nombre de archivo dentro de sus paquetes de datos (si no está encriptado o en binario).

¡Buena suerte! Pero desde mi experiencia, se debe usar lo siguiente:

1) ¡Los archivos compartidos son una mala idea! Especialmente con sistemas remotos que podrían dejar un archivo bloqueado si pierden la conexión o tienen conexiones lentas.

2) El acceso al archivo compartido causará una condición de carrera entre clientes. Perder valioso tiempo de tic.

3) Si DEBE usar un archivo compartido ... Cree diferentes nombres de usuario para cada sitio remoto para que pueda depurarlo correctamente.

El mejor escenario ... deshacerse del archivo y combinarlo en SQL o crear un servicio web que permita a los clientes acceder al archivo o los datos.

++ Todd

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.