如何判断哪台计算机在网络共享上打开了文件?


21

环境:

Windows XP sp3,Windows 2003服务器

问题:

我们有数十台自助服务终端机,每台都有相同的登录名,它们偶尔会短暂共享一个文件。速率是几个锁并释放一分钟。

最近,我们经历了一个客户端专门锁定文件,然后不释放文件的情况。 

发生这种情况但几分钟或更长的时间后,我们可以关闭文件,这是无法接受的中断。

未释放的锁定问题在上个月发生了好几次。我一直在寻找负责锁定的信息亭设备,并在发生这种情况时迅速对其进行检测。

我们可以从服务器获得的信息似乎存在差距:

我们可以从各种工具中看到:-
打开和锁定了哪些文件。(许多方式)-
哪些登录具有打开或锁定的特定文件。(许多方式)
-特定的计算机通常打开了一个文件。(共享文件夹,会话mmc)

我们看不到的是,一台特定的计算机打开并锁定了一个特定的文件。

有人知道实现此目标的方法吗?

谢谢 -


1
并不是您要问的,而是一种替代方法是为每个系统创建一个单独的帐户。
布赖恩2010年

Answers:


10

看看这个小小的免费软件util(ShareWatch),我认为它将满足您的需求。

列出的功能之一:“显示连接到每个共享的用户和计算机,以及打开的文件。”

替代文字


1
谢谢您-我尝试了Sharewatch。在我的情况下-十几个具有相同登录名的客户端-将打开的文件和工作站合并到同一列表中。您无法确定哪个工作站已打开。此外,选择“属性”仅报告工作站已打开x个文件,而不是其文件名。选择文件的属性将提供类似的信息。
RobW'2

7

输入命令行(CMD),

然后输入:networkshare的 openfiles / query ip

并且可能需要用户名和密码。

您可以在此处获得有关openfiles的更多信息。


谢谢。Openfiles提供的输出与服务器控制台中的net session大致相同。它不提供打开文件的计算机名称。我在寻找文件->计算机连接,而不是文件->用户连接。
RobW 2010年

5

我相信您会想回想一下Sky100的帖子,因为他是正确的,不是在为您提供您所要求的内容,而是在为您提供解决问题所需的内容。您将需要通过“ openfile / query / v”(详细)命令引用锁定的ID号,因为它将为您提供所需的数据。在给定的列表中搜索文件名,数据将显示启用了读写功能的项,并提供特定的ID号。不,您可能无法找到哪个特定系统已锁定文件,但是使用提供的工具,您可以将该用户与文件断开连接。这是一步一步地简化我的讨论。

1)在具有管理员权限的文件服务器上,执行开始>运行> CMD [ENTER]

2)CD桌面[ENTER](很快就会看到。)

3)openfiles / query / v> file.txt [ENTER](这将在桌面上创建一个文件,其中包含服务器上所有已打开文件的列表。)

4)打开file.txt,然后搜索包含文件名和“读写”权限的行。

5)记下该行的ID号,然后返回到命令控制台。

6)openfiles / disconnect / ID [在此处输入ID号] [ENTER]

只要您在文件服务器上具有管理权限,它将使该系统与文件断开连接,并且假设您的系统是自动化的,则应允许一切按需进行。

参考:openfiles / query /?打开文件/断开连接/?

如果您需要适合您系统的脚本或编程应用程序,请随时发表评论,我将为您提供联系信息,非常低的价格以及技术。对我的应用程序的支持。


哈!我的问题是找到从中打开文件的计算机。您对此有任何想法吗?识别和关闭文件很简单,并且有很多方法可以设计这种结果。非常感谢您的答复,您的商业报价给了我一个清晨的笑声;-)
RobW 2010年

抱歉,我不知道openfiles进程不是解决方案。根据您的描述,似乎可以解决您需要进一步查看系统的问题,因为它不会关闭文件,而只是删除该锁定的设置。实际上,我为我的公司构建了该应用程序,并且能够自动运行该应用程序以避免此类麻烦。我想这是重点。要回答您的直接问题:是的,应该有一种方法可以审计那些系统对文件的访问。请参阅我的下一篇文章以获取更多详细信息。
Thomas

实际上,返回并重新阅读您的帖子...“发生这种情况时,我们可以关闭文件,但是要花几分钟或更长时间,这是无法接受的中断。” 解决方案无法正常工作的原因是因为您正在关闭文件。之前提供的我的Sky100解决方案和部分解决方案不会关闭文件,但是会更改对只读的访问权限。再次,我对openfiles不是您要寻找的解决方案感到困惑。在将其作为非解决方案注销之前,先试一下。如果您对程序员不感兴趣,请创建一个每隔几分钟运行一次的批处理文件。
托马斯

我将在下面为您的问题保留解决方案,以免浪费时间,以防万一我对情况的理解不彻底。
托马斯

嗯 抱歉,但我不认为您正在解决我的问题。我需要帮助确定哪台计算机将文件打开。我真的对确定计算机名称感兴趣。所有其余的虽然有趣,但并没有告诉我我所追求的有限。
RobW 2010年

2

您要解决的问题是您要解决的问题(即,将特定的客户端计算机(而非用户)映射到锁定文件),还是需要解决锁定问题?

如果后者会有所帮助,那么我将看两件事:

  • 检查客户端上安装的AV-我已经看到多个客户端AV导致共享上严重讨厌的异常锁定行为。

  • 通过将EnableOpLocks注册表值设置为0,尝试禁用机会锁定

    HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parameters EnableOplocks REG_DWORD 0或1默认值:1(启用)

这将在某种程度上降低性能,但不应破坏任何内容。

我很乐意看到有人实际上回答了您提出的问题-这是一个有趣的问题。


谢谢Helvick!禁用机会锁定是一种有趣的方法。我假设服务器?
RobW 2010年

是的,它在服务器上-这可以防止客户端请求机会锁定,以便客户端可以在本地缓存文件(的一部分)。
赫尔维克,2010年

禁用机会锁定导致的性能损失对于我们来说很可能是不可接受的。我们需要在我们的测试平台上研究一下。
RobW 2010年

这绝对是一个风险-我会对您的发现感兴趣。
赫尔维克,2010年

2

在尝试解决RobW的问题并提供替代解决方案时,我未能回答他的问题。

我相信您正在寻找的解决方案将是在该系统上设置审核策略,然后设置该文件以审核来自该特定用户的任何访问。执行此步骤的步骤可能会因网络设置而异,因此,我将向您介绍有关如何设置要审核的不同系统的Microsoft的technet链接。

http://technet.microsoft.com/zh-CN/library/cc787268(WS.10).aspx

设置完之后,请确保通过附加用户帐户作为审核员来设置希望监视的特定文件,您应该已经准备就绪。

将来只需检查您的安全事件日志,尽管它会列出每个系统(因为它们都使用相同的用户名),但是通过排序和查找当前对文件具有读写访问权限的系统应该不难。

将安全日志设置为每隔几天清除一次可能会很有用。

如果这不起作用,则可能需要根据访问文件的每个主机名而不是用户名来设置系统。我相信这可以通过Microsoft管理控制台实现。

再说一次,如果您需要编程,我不是商人,不愿意花一些小程序来负担您的钱。我提供优质的编程服务,甚至每个人都不会回避。希望这有助于您解决问题。


谢谢你 初次发行后不久,我对该目录进行了审核。该目录中有约150个活动的客户端(而不仅仅是服务亭)。由于问题是断断续续的,因此信噪比很大,我没有看到将特定计算机链接到文件事件的清晰方法。我再看一遍。我们已经就此进行了两次设计会议。桌上有几个主题,包括登录帐户。我仍然想知道哪台计算机正在打开文件:-)
RobW 2010年

1

如果可能,我还会将不同的用户分配到不同的信息亭-这可能有助于您分析其他日志...

如果不可能,则:可能的解决方案概述:一个解决方案可能是在信息亭上运行类似sysinternals processmonitor的工具,并在信息亭中使用适当的过滤器(针对相关文件)(不知道是否可以将其隐藏)。您可以使用一些命令行选项来将捕获的数据保存到文件中。

从各个信息亭中收集这些信息,将它们导入例如Excel中,然后查找尚未关闭的信息...


0

使用netstat命令确定此内容怎么办?

netstat -an | find ":445"

这应该为您提供所连接机器的IP地址。

如果要使用主机名而不是IP地址,请使用

netstat -a | find "microsoft-ds"

但是,这将花费较长的时间执行,尤其是在繁忙的文件服务器或域控制器上,因为它将执行很多主机查找。

另外,请记住,结果将显示入站,出站和空闲侦听端口。

入站连接将在左列显示:445,出站连接在右列显示。

如果不使用-n选项,则可以放心地忽略所有显示“ LISTENING”的结果,以及仅显示本地IP地址(例如0.0.0.0或127.0.0.1)或计算机拥有主机名的任何行。

例如:

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            *:*

此处唯一连接的主机是192.168.16.87。到192.168.16.24的连接已出站。所有其他连接都是本地连接。


嗯,只要重新阅读您的问题,并不能完全解决您的问题,因为它不会告诉您计算机打开了哪个文件。
布赖恩2010年

没问题。我很欣赏这个主意。
RobW 2010年

0

我记得Windows内有图形工具可以检查使用的共享和锁定文件。

它应该在“计算机管理”下的“系统工具”(〜译为法文...)中,名称为“共享文件夹”。


0

我知道这已经很老了,但是ADSI提供了WinNT://接口,该接口允许您访问LANMANSERVER服务并查询“共享文件夹” mmc管理单元中已经公开的属性。我目前正在研究将主机用户链接到打开文件的方法。


-1

如果是我,并且我可以访问同一子网中的linux机器...我可以在有问题的共享端口上对它们保持打开文件的框进行tcpdump。

如果没有Unix,您仍然可以使用tcpdump,但必须安装它。

从linux ...我会做这样的事情:tcpdump -ieth0 -s0 -X hostname port 1234 | grep -i“ nameoffile”

我知道大多数有效负载都是二进制的...但是,我敢打赌,它们用于协商访问文件身份验证的初始标头是纯文本格式。

这将向您显示连接到该框的每个远端主机,以及在其数据包数据中找到文件名的位置(如果未加密或为二进制)。

祝好运!但是根据我的经验,应该使用以下内容:

1)共享文件是个坏主意!尤其是带有远程系统的远程系统,如果断开连接或连接速度较慢,它们可能会使文件锁定。

2)访问共享文件将导致客户端之间的竞争状况。浪费宝贵的滴答时间。

3)如果必须使用共享文件...为每个远程站点创建不同的用户名,以便可以正确调试。

最佳方案...摆脱文件并合并到SQL或创建允许客户端访问文件或数据的Web服务。

++托德

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.