Wie kann ich feststellen, auf welchem ​​Computer eine Datei auf einer Netzwerkfreigabe geöffnet ist?

21

Umgebung:

Windows XP SP3, Windows 2003 Server

Problem:

Wir haben mehrere Dutzend Kioskcomputer mit jeweils demselben Anmeldenamen, die gelegentlich und kurz eine Datei auf einer Freigabe speichern. Die Rate ist mehrere Sperren und gibt eine Minute frei.

In letzter Zeit hat einer der Clients eine Datei exklusiv gesperrt und die Datei dann nicht freigegeben. 

Wir können die Datei schließen, wenn dies passiert, aber es vergehen mehrere Minuten oder länger, und dies ist ein inakzeptabler Ausfall.

Das Problem mit der unveröffentlichten Sperre ist im letzten Monat mehrmals aufgetreten. Ich habe nach dem Kioskgerät gesucht, das für das Sperren verantwortlich ist, und um es schnell zu erkennen, wenn es passiert.

Es scheint eine Lücke in den Informationen zu geben, die wir vom Server erhalten können:

Wir können aus verschiedenen Tools sehen:
-Welche Dateien sind geöffnet und gesperrt. (viele Möglichkeiten)
-Welche Anmeldung hat eine bestimmte Datei geöffnet oder gesperrt. (viele Möglichkeiten) -
Auf einem bestimmten Computer ist im Allgemeinen eine Datei geöffnet. (Freigegebene Ordner, Sitzungen mmc)

Was wir nicht sehen können, ist, dass auf einem bestimmten Computer eine bestimmte Datei geöffnet und gesperrt ist.

Kennt jemand einen Weg dorthin?

Vielen Dank -

rauben

RobW
quelle
1
Nicht ganz das, wonach Sie fragen, aber ein alternativer Ansatz wäre, für jedes System ein separates Konto zu erstellen.
Bryan

Antworten:

10

Schauen Sie sich dieses kleine Freeware-Programm ( ShareWatch ) an. Ich denke, es wird das tun, wonach Sie suchen.

Eine der aufgelisteten Funktionen: "Zeigt die Benutzer und Computer an, die mit jeder Freigabe verbunden sind, und welche Dateien geöffnet sind."

Alt-Text

techie007
quelle
1
Danke dafür - ich habe es mit Sharewatch versucht. In meiner Situation - mehr als ein Dutzend Clients mit denselben Anmeldenamen - werden die geöffneten Dateien und Arbeitsstationen in derselben Liste zusammengefasst. Sie können nicht sagen, welche Workstation es geöffnet hat. Wenn Sie Eigenschaften auswählen, wird lediglich gemeldet, dass auf einer Arbeitsstation x Dateien geöffnet sind und nicht deren Dateinamen. Wenn Sie Eigenschaften für die Datei auswählen, erhalten Sie ähnliche Informationen.
RobW
7

Geben Sie die Befehlszeile (CMD) ein,

Geben Sie dann Folgendes ein: openfiles / query ip der Netzwerkfreigabe

Und der Benutzername und das Passwort können erforderlich sein.

Weitere Informationen zu Openfiles finden Sie hier .

sky100
quelle
Vielen Dank. Openfiles gibt im Wesentlichen dieselbe Ausgabe aus wie net session von der Serverkonsole. Der Computername, der die Datei geöffnet hat, wird nicht angegeben. Ich suche eine Datei-> Computerverbindung, keine Datei-> Benutzerverbindung.
RobW
5

Ich glaube, Sie werden auf Sky100's Post zurückgreifen wollen, da er korrekt ist, und Ihnen nicht das zur Verfügung stellen, was Sie gefragt haben, sondern das, was Sie zur Lösung Ihres Problems benötigen. Sie müssen die gesperrte ID-Nummer über den Befehl "openfile / query / v" (verbose) referenzieren, da er Ihnen die benötigten Daten liefert. Suchen Sie in der angegebenen Liste nach dem Dateinamen. Die Daten zeigen an, bei welchem ​​Element das Lesen und Schreiben aktiviert ist, und geben Sie eine bestimmte ID-Nummer an. Nein, Sie können möglicherweise nicht feststellen, auf welchem ​​bestimmten System die Datei gesperrt ist. Mit den bereitgestellten Tools können Sie diesen Benutzer jedoch von der Datei trennen. Hier ist eine Schritt-für-Schritt-Anleitung, um mein Geschwafel zu vereinfachen.

1) Führen Sie auf dem Dateiserver mit Administratorrechten Start> Ausführen> CMD [ENTER] aus.

2) CD Desktop [ENTER] (Sie werden gleich sehen, warum.)

3) openfiles / query / v> file.txt [ENTER] (Dies erstellt eine Datei auf dem Desktop mit einer Liste aller auf dem Server geöffneten Dateien.)

4) Öffnen Sie die Datei file.txt und suchen Sie nach der Zeile, die sowohl Ihren Dateinamen als auch die Lese- und Schreibrechte enthält.

5) Notieren Sie sich die ID-Nummer in dieser Zeile und kehren Sie zu Ihrer Befehlskonsole zurück.

6) openfiles / disconnect / ID [ID Nummer hier eintragen] [ENTER]

Solange Sie über Administratorrechte auf dem Dateiserver verfügen, wird dieses System von der Datei getrennt, und vorausgesetzt, Ihr System ist automatisiert, sollte es den Dingen ermöglichen, sich bei Bedarf weiterzubewegen.

Referenzen: openfiles / query /? openfiles / disconnect /?

Wenn Sie ein Skript oder eine programmierte Anwendung benötigen, die auf Ihr System zugeschnitten ist, können Sie dies gerne kommentieren. Ich werde Ihnen dann Kontaktinformationen zu einem sehr günstigen Preis zusenden. Unterstützung bei meiner Bewerbung.

Thomas
quelle
Ha! Mein Problem war, den Computer zu finden, von dem die Datei geöffnet wurde. Haben Sie Ideen, wie das geht? Das Erkennen und Schließen der Datei ist einfach, und es gibt viele Möglichkeiten, dieses Ergebnis zu erzielen. Ich
freue
Ich entschuldige mich und wusste nicht, dass der OpenFiles-Prozess nicht die Lösung ist. Nach dem, was Sie beschrieben haben, scheint es, als hätte sich Ihre Notwendigkeit, sich das System genauer anzusehen, erledigt, da es die Datei nicht schließt, sondern nur diese gesperrte Einstellung entfernt. Tatsächlich habe ich die Anwendung für mein Unternehmen erstellt und sie kann automatisiert ausgeführt werden, um solche Komplikationen zu vermeiden. Ich denke, das ist jedoch nicht der springende Punkt. Um Ihre direkte Frage zu beantworten: Ja, es sollte eine Möglichkeit geben, diese Systeme auf ihren Zugriff auf diese Datei zu überprüfen. Weitere Details finden Sie in meinem nächsten Beitrag.
Thomas
Gehen Sie zurück und lesen Sie Ihren Beitrag erneut ... "Wir können die Datei schließen, wenn dies passiert, aber es vergehen mehrere Minuten oder länger, und dies ist ein inakzeptabler Ausfall." Der Grund, warum Ihre Lösung nicht funktioniert, ist das SCHLIESSEN der Datei. Die zuvor bereitgestellte und teilweise Sky100-Lösung schließt die Datei nicht, sondern ÄNDERT die Zugriffsrechte auf "Nur Lesen". Auch hier bin ich verwirrt darüber, wie openfiles NICHT die Lösung ist, nach der Sie suchen. Probieren Sie es aus, bevor Sie es als Nichtlösung abschreiben. Wenn Sie nicht an einem Programmierer interessiert sind, erstellen Sie eine Batch-Datei, die alle paar Minuten ausgeführt wird.
Thomas
Ich überlasse es Ihrer Frage, keine Zeit zu verschwenden, falls ich die Situation nicht genau verstehe.
Thomas
Mmmm. Entschuldigung, aber ich habe nicht das Gefühl, dass meine Frage von Ihnen beantwortet wird. Ich brauchte Hilfe beim Ermitteln, auf welchem Computer die Datei geöffnet war. Ich bin wirklich daran interessiert, den Computernamen zu bestimmen. Alles andere ist zwar interessant, sagt mir aber nicht, wonach ich suche.
RobW
2

Ist das Problem, das Sie lösen möchten, das von Ihnen angegebene (dh ordnen Sie den bestimmten Client-Computer (nicht den Benutzer) der gesperrten Datei zu), oder liegt ein zu lösendes Sperrproblem vor?

Wenn Letzteres helfen würde, würde ich zwei Dinge betrachten:

  • Überprüfen Sie das auf Ihren Clients installierte AV. Ich habe festgestellt, dass mehrere clientseitige AV ein ernsthaft unangenehmes anomolöses Sperrverhalten für Freigaben verursachen.

  • Deaktivieren Sie das opportunistische Sperren, indem Sie den Registrierungswert EnableOpLocks auf 0 setzen.

    HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parameters EnableOplocks REG_DWORD 0 oder 1 Standard: 1 (aktiviert)

Dies verringert die Leistung etwas, sollte aber nichts beschädigen.

Ich würde gerne sehen, dass jemand Ihre gestellte Frage tatsächlich beantwortet - es ist ein interessantes Problem.

Helvick
quelle
Danke Helvick! Das Deaktivieren der opportunistischen Sperre ist ein interessanter Ansatz. Server nehme ich an?
RobW
Ja, es ist auf dem Server - dies verhindert, dass Clients opportunistische Sperren anfordern, damit sie (Teile von) Dateien lokal zwischenspeichern können.
Helvick
Die Leistungseinbußen durch das Deaktivieren des opportunistischen Sperrens wären für uns höchstwahrscheinlich inakzeptabel. Das müssen wir uns in unserem Testbett ansehen.
RobW
Das ist definitiv ein Risiko - ich würde mich interessieren, was Sie finden.
Helvick
2

Bei meinem Versuch, das Problem von RobW zu beheben und eine alternative Lösung bereitzustellen, konnte ich seine Frage nicht beantworten.

Ich glaube, die Lösung, nach der Sie suchen, besteht darin, Überwachungsrichtlinien auf diesem System einzurichten und diese Datei dann so einzurichten, dass jeder Zugriff von diesem bestimmten Benutzer überwacht wird. Die dazu erforderlichen Schritte können je nach Netzwerkeinrichtung variieren. Ich verweise Sie daher auf den Technet-Link von Microsoft, um zu erfahren, wie Sie verschiedene zu prüfende Systeme einrichten.

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

Nachdem Sie dies eingerichtet haben, müssen Sie sicherstellen, dass Sie die spezifische Datei, die Sie überwachen möchten, durch Anhängen des Benutzerkontos als Auditor einrichten. Dann sollten Sie bereit sein.

Überprüfen Sie einfach Ihre Sicherheitsereignisprotokolle in der Zukunft, und obwohl jedes System aufgelistet wird (da alle denselben Benutzernamen verwenden), sollte es nicht schwierig sein, zu sortieren und zu ermitteln, welches System derzeit Lese- und Schreibzugriff auf die Datei hat.

Es kann nützlich sein, das Sicherheitsprotokoll so einzurichten, dass es alle paar Tage gelöscht wird.

Wenn dies nicht funktioniert, müssen Sie das System wahrscheinlich für jeden Hostnamen einrichten, der auf die Datei zugreift, und nicht für den Benutzernamen. Ich glaube, dass dies über die Microsoft Management Console möglich ist.

Auch wenn Sie programmieren müssen, bin ich kein Geschäftsmann, der viel Geld für ein winziges Programm ausgeben möchte. Ich biete qualitativ hochwertige Programme zu einem Preis, vor dem sich auch ein Einzelner nicht scheuen würde. Ich hoffe, dies hilft Ihnen bei der Lösung Ihres Problems.

Thomas
quelle
Danke dafür. Ich habe die Überwachung für dieses Verzeichnis kurz nach der ersten Ausgabe festgelegt. In diesem Verzeichnis sind ca. 150 Clients (und nicht nur Kioske) aktiv. Da das Problem nur sporadisch auftritt, war das Signal-Rausch-Verhältnis sehr groß, und ich sah keine eindeutige Möglichkeit, einen bestimmten Computer mit einem Dateiereignis zu verknüpfen. Ich werde es mir noch einmal ansehen. Wir hatten bereits ein paar Designmeetings darüber. In der Tabelle sind mehrere Themen aufgeführt, einschließlich Anmeldekonten. Ich würde immer noch gerne wissen, auf welchem ​​Computer eine Datei geöffnet ist :-)
RobW
1

Wenn möglich, würde ich auch verschiedenen Kiosken unterschiedliche Benutzer zuweisen - dies könnte Ihnen bei der Analyse anderer Protokolle helfen ...

Wenn dies nicht möglich ist: Lösungsvorschlag: Eine Lösung könnte darin bestehen, ein Tool wie sysinternals processmonitor mit einem geeigneten Filter (für die betreffende Datei) auf den Kiosken auszuführen (Sie wissen nicht, ob Sie ihn ausblenden können). Es gibt einige Befehlszeilenoptionen, mit denen Sie die erfassten Daten in einer Datei speichern können.

Sammeln Sie diese an den verschiedenen Kiosken, importieren Sie sie zB in Excel und suchen Sie die, die nicht geschlossen wurde ...

reiniero
quelle
0

Was ist mit dem Befehl netstat, um dies zu bestimmen?

netstat -an | find ":445"

Dies sollte Ihnen die IP-Adressen der angeschlossenen Maschinen anzeigen.

Wenn Sie die Hostnamen anstelle der IP-Adressen verwenden möchten, verwenden Sie

netstat -a | find "microsoft-ds"

Die Ausführung dauert jedoch länger, insbesondere auf ausgelasteten Dateiservern oder Domänencontrollern, da viele Hostsuchvorgänge erforderlich sind.

Bedenken Sie auch, dass die Ergebnisse eingehende, ausgehende und inaktive Abhörports anzeigen.

Bei eingehenden Verbindungen wird in der linken Spalte: 445 und bei ausgehenden Verbindungen in der rechten Spalte: 445 angezeigt.

Sie können alle Ergebnisse mit dem Status 'LISTENING' ignorieren sowie alle Zeilen, in denen nur lokale IP-Adressen (z. B. 0.0.0.0 oder 127.0.0.1) oder der Hostname des Computers angezeigt werden, wenn Sie die Option -n nicht verwenden.

Beispielsweise:

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

Der einzige hier verbundene Host ist 192.168.16.87. Die Verbindungen zu 192.168.16.24 sind ausgehend. Alle anderen Verbindungen sind lokale Verbindungen.

Bryan
quelle
Hmmm, lies deine Frage einfach noch einmal durch und sie löst dein Problem nicht ganz, da sie dir nicht sagt, welche Datei der Computer geöffnet hat.
Bryan
Kein Problem. Ich schätze die Idee.
RobW
0

Ich erinnere mich, dass es in Windows ein grafisches Tool gab, mit dem verwendete Freigaben und gesperrte Dateien überprüft werden konnten.

Es sollte sich in den "System-Tools" unter "Computerverwaltung" (~ übersetzt aus dem Französischen ...) unter dem Namen "freigegebene Ordner" befinden.

petrus
quelle
0

Ich weiß, dass dies sehr alt ist, aber ADSI bietet die WinNT: // - Schnittstelle, mit der Sie auf den LANMANSERVER-Dienst zugreifen und Eigenschaften abfragen können, die bereits im MMC-Snapin "Freigegebene Ordner" verfügbar sind. Ich recherchiere derzeit nach einer Möglichkeit, einen Host und einen Benutzer mit einer offenen Datei zu verknüpfen .

mbrownnyc
quelle
-1

Wenn ich es wäre und ich Zugriff auf einen Linux-Computer im selben Subnetz hätte ... würde ich einen tcpdump auf dem fraglichen Share-Port an der Box ausführen, auf der die Datei geöffnet ist.

Wenn Sie nicht über Unix verfügen, können Sie tcpdump weiterhin verwenden, müssen es jedoch installieren.

von Linux ... Ich würde so etwas tun: tcpdump -ieth0 -s0 -X Hostname Port 1234 | grep -i "nameoffile"

Ich weiß, dass der größte Teil der Nutzlast binär ist ... Allerdings würde ich gut wetten, dass der anfängliche Header für die Aushandlung der Authentifizierung für den Zugriff auf die Datei im Klartext vorliegt.

Dies zeigt Ihnen jeden entfernten Host, der eine Verbindung zu dieser Box herstellt, und wo sich der Dateiname in den Paketdaten befindet (falls nicht verschlüsselt oder binär).

Viel Glück! Nach meiner Erfahrung sollte jedoch Folgendes verwendet werden:

1) Geteilte Dateien sind eine schlechte Idee! Insbesondere mit Remote-Systemen, bei denen eine Datei gesperrt bleibt, wenn die Verbindung unterbrochen wird oder langsame Verbindungen bestehen.

2) Der Zugriff auf die gemeinsam genutzte Datei führt zu einer Wettlaufsituation zwischen den Clients. Vergeuden Sie wertvolle Tick-Zeit.

3) Wenn Sie eine gemeinsam genutzte Datei verwenden MÜSSEN ... Erstellen Sie unterschiedliche Benutzernamen für jede entfernte Site, damit Sie das Debuggen ordnungsgemäß durchführen können.

Bestes Szenario: Entfernen Sie die Datei und führen Sie sie in SQL ein oder erstellen Sie einen Webservice, mit dem die Clients auf die Datei oder die Daten zugreifen können.

++ Todd

Todd
quelle