Jak stwierdzić, na jakim komputerze jest otwarty plik w udziale sieciowym?

21

Środowisko:

Windows XP sp3, serwer Windows 2003

Problem:

Mamy kilkadziesiąt maszyn kioskowych o tej samej nazwie logowania, które od czasu do czasu i krótko udostępniają plik. Stawka wynosi kilka blokad i zwalnia na minutę.

Ostatnio doświadczyliśmy, że jeden z klientów blokuje plik wyłącznie, a następnie go nie zwalnia. 

Możemy zamknąć plik, gdy tak się stanie, ale minie kilka minut lub więcej, a jest to niedopuszczalne wyłączenie.

Niepublikowany problem z blokadą występował kilka razy w ciągu ostatniego miesiąca. Szukałem, które urządzenie kiosku jest odpowiedzialne za blokowanie i szybko je wykryć, kiedy to nastąpi.

Wydaje się, że istnieje luka w informacjach, które możemy uzyskać z serwera:

Widzimy z różnych narzędzi: -
Jakie pliki są otwarte i zablokowane. (wiele sposobów)
-Jakie logowanie ma określony plik otwarty lub zablokowany. (wiele sposobów)
-To konkretny komputer zazwyczaj ma otwarty plik. (Udostępnione foldery, sesje mmc)

Nie możemy zobaczyć, że określony komputer ma otwarty i zablokowany określony plik.

Czy ktoś wie, jak się do tego dostać?

Dzięki -

Obrabować

RobW
źródło
1
Nie do końca o to pytasz, ale alternatywnym podejściem byłoby utworzenie osobnego konta dla każdego systemu.
Bryan

Odpowiedzi:

10

Sprawdź to małe bezpłatne oprogramowanie ( ShareWatch ), myślę, że zrobi to, czego szukasz.

Jedna z wymienionych funkcji: „Pokazuje użytkowników i komputery podłączone do każdego udziału, wraz z tym, jakie pliki są otwarte”.

alternatywny tekst

techie007
źródło
1
Dzięki za to - próbowałem Sharewatch. W mojej sytuacji - kilkunastu klientów o tych samych nazwach logowania - łączy otwarte pliki i stacje robocze w jedną listę. Nie możesz powiedzieć, która stacja robocza ma to otwarte. Ponadto wybranie Właściwości po prostu zgłasza, że ​​na stacji roboczej otwartych jest x plików, a nie ich nazwy. Wybór właściwości pliku daje podobne informacje.
RobW
7

Wpisz wiersz poleceń (CMD),

następnie wpisz: openfiles / query ip udziału sieciowego

Może być wymagana nazwa użytkownika i hasło.

Możesz uzyskać więcej informacji o plikach otwartych tutaj .

sky100
źródło
Dzięki. Openfiles daje w dużej mierze takie same wyniki jak sesja netto z konsoli serwera. Nie podaje nazwy komputera, który otworzył plik. Szukam pliku-> połączenia z komputerem, a nie pliku-> połączenia użytkownika.
RobW
5

Sądzę, że zechcesz powrócić do postu Sky100, ponieważ jest on poprawny, nie w celu zapewnienia ci tego, o co prosiłeś, ale w celu zapewnienia ci tego, czego potrzebujesz, aby rozwiązać problem. Konieczne będzie odwołanie się do zablokowanego numeru identyfikacyjnego za pomocą polecenia „openfile / query / v” (pełne), ponieważ dostarczy on potrzebnych danych. Wyszukaj nazwę pliku na podanej liście, dane pokażą, który element ma włączony odczyt i zapis, a wraz z nim podadzą określony numer identyfikacyjny. Nie, możesz nie być w stanie ustalić, który konkretny system ma zablokowany plik, ale dzięki dostarczonym narzędziom możesz odłączyć tego użytkownika od pliku. Oto krok po kroku, aby uprościć moje wędrówki.

1) Na serwerze plików z uprawnieniami administratora wykonaj Start> Uruchom> CMD [ENTER]

2) CD Desktop [ENTER] (Zobaczysz, dlaczego wkrótce.)

3) openfiles / query / v> file.txt [ENTER] (Spowoduje to utworzenie pliku na pulpicie z listą wszystkich otwartych plików na serwerze).

4) Otwórz plik.txt i wyszukaj wiersz zawierający zarówno nazwę pliku, jak i uprawnienia do odczytu i zapisu.

5) Zanotuj numer identyfikacyjny w tej linii i wróć do konsoli poleceń.

6) openfiles / odłącz / ID [Wpisz tutaj numer identyfikacyjny] [ENTER]

Tak długo, jak masz uprawnienia administracyjne na serwerze plików, odłączy on ten system od pliku i przy założeniu, że twój system jest zautomatyzowany, powinno pozwolić, aby wszystko szło zgodnie z potrzebami.

Odniesienia: openfiles / query /? otwarte pliki / odłącz /

Jeśli potrzebujesz skryptu lub aplikacji zaprogramowanej dla twojego systemu, prosimy o komentarz, a ja podam informacje kontaktowe, bardzo niską cenę wraz z technologią. wsparcie mojej aplikacji.

Tomasz
źródło
Ha! Moim problemem było zlokalizowanie komputera, z którego plik został otwarty. Czy masz jakieś pomysły, jak to zrobić? Zidentyfikowanie i zamknięcie pliku jest proste i istnieje wiele sposobów na opracowanie tego wyniku. Doceniam odpowiedź, a twoja oferta handlowa
RobW
Przepraszam, nie wiedziałem, że proces otwierania plików nie był rozwiązaniem. Z tego, co opisałeś, wydaje się, że rozwiązałoby to potrzebę dalszego przyjrzenia się systemowi, ponieważ nie zamyka on pliku, a jedynie usuwa to zablokowane ustawienie. W rzeczywistości zbudowałem aplikację dla mojej firmy i można ją zautomatyzować tak, aby uruchamiała się co najmniej, aby uniknąć takich komplikacji. Myślę jednak, że to nie ma sensu. Aby odpowiedzieć na bezpośrednie pytanie: Tak, powinien istnieć sposób na skontrolowanie tych systemów pod kątem ich dostępu do tego pliku. Proszę zobaczyć mój następny post dla dalszych szczegółów.
Thomas
Właściwie wracając i ponownie czytając Twój post ... „Możemy to zrobić, gdy tak się stanie, ale minie kilka minut lub więcej, a to jest niedopuszczalna przerwa”. Twoje rozwiązanie nie działa, ponieważ ZAMKNASZ plik. Moje i częściowo rozwiązanie Sky100 dostarczone wcześniej nie zamyka pliku, ale ZMIENIA prawa dostępu do Tylko do odczytu. Znów jestem zdezorientowany, jak otwarte pliki NIE są rozwiązaniem, którego szukasz. Daj mu szansę przed spisaniem go jako nierozwiązania. Jeśli nie jesteś zainteresowany programistą, utwórz plik wsadowy, który będzie uruchamiany co kilka minut.
Thomas
Pozostawiam moje rozwiązanie poniższego pytania, aby nie marnować czasu na wypadek, gdyby moje zrozumienie sytuacji nie było dokładne.
Thomas
Mmmm Przepraszam, ale nie wydaje mi się, żebyś odpowiedział na moje pytanie. Potrzebowałem pomocy w ustaleniu, który komputer przytrzymał otwarty plik. Naprawdę jestem zainteresowany określeniem nazwy komputera. Cała reszta, choć interesująca, nie mówi mi o tym, o co mi chodzi.
RobW,
2

Czy problem, który próbujesz rozwiązać, o którym mówisz (tj. Zamapowanie określonego komputera klienckiego (nie użytkownika) na zablokowany plik), czy jest to problem z blokowaniem, który musisz rozwiązać?

Jeśli to ostatnie pomogłoby, przyjrzałbym się dwóm rzeczom:

  • Sprawdź AV, który jest zainstalowany na twoich klientach - widziałem, że wiele AV po stronie klienta powoduje bardzo nieprzyjemne anomoliczne zachowanie blokowania udziałów.

  • Spróbuj wyłączyć blokowanie oportunistyczne , ustawiając wartość rejestru EnableOpLocks na 0.

    HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parametry EnableOplocks REG_DWORD 0 lub 1 Domyślnie: 1 (włączone)

To nieco obniży wydajność, ale nie powinno niczego zepsuć.

Chciałbym, aby ktoś faktycznie odpowiedział na zadane pytanie - to interesujący problem.

Helvick
źródło
Dzięki, Helvick! Wyłączenie blokowania oportunistycznego jest interesującym podejściem. Serwer, który zakładam?
RobW
Tak, to jest na serwerze - to uniemożliwia klientom żądanie blokowania oportunistycznego, aby mogli lokalnie buforować (części) plików.
Helvick
Skuteczność polegająca na wyłączeniu blokowania oportunistycznego najprawdopodobniej byłaby dla nas nie do przyjęcia. Będziemy musieli na to spojrzeć w naszym testbed.
RobW
Jest to z pewnością ryzyko - byłbym zainteresowany tym, co znajdziesz.
Helvick
2

Podczas próby rozwiązania problemu RobW i zapewnienia alternatywnego rozwiązania nie udało mi się odpowiedzieć na jego pytanie.

Wierzę, że rozwiązaniem, którego szukasz, będzie skonfigurowanie zasad inspekcji w tym systemie, a następnie skonfigurowanie tego pliku do kontroli dostępu od tego konkretnego użytkownika. Kroki do wykonania tego mogą się różnić w zależności od konfiguracji sieci, dlatego odsyłam cię do łącza technet firmy Microsoft do konfigurowania różnych systemów do kontroli.

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

Po skonfigurowaniu tego, upewnieniu się, że wykonałeś konfigurację określonego pliku, który chcesz monitorować, dołączając konto użytkownika jako audytora, powinieneś być gotowy do pracy.

Po prostu sprawdź swoje dzienniki zdarzeń bezpieczeństwa w przyszłości i chociaż będzie zawierał listę każdego systemu (ponieważ wszystkie używają tej samej nazwy użytkownika), nie powinno być problemu z sortowaniem i zlokalizowaniem, który system ma obecnie dostęp do odczytu i zapisu do pliku.

Przydatne może być skonfigurowanie dziennika zabezpieczeń do czyszczenia co kilka dni.

Jeśli to nie zadziała, prawdopodobnie konieczne będzie skonfigurowanie systemu dla każdej nazwy hosta uzyskującej dostęp do pliku, a nie nazwy użytkownika. Wierzę, że jest to możliwe dzięki Microsoft Management Console.

Ponownie, jeśli potrzebujesz programowania, nie jestem biznesmenem zainteresowanym wzięciem dużych pieniędzy na jakiś mały program. Zapewniam wysokiej jakości programowanie w cenie, której nawet osoba nie unikałaby. Mam nadzieję, że pomoże Ci to rozwiązać problem.

Tomasz
źródło
Dzięki za to. Kontrolę w tym katalogu ustawiłem wkrótce po pierwszym wydaniu. W tym katalogu jest aktywnych ~ 150 klientów (a nie tylko kiosków). Ponieważ problem występuje sporadycznie, stosunek sygnału do szumu był ogromny i nie widziałem wyraźnego sposobu połączenia konkretnego komputera ze zdarzeniem pliku. Spojrzę na to jeszcze raz. W tym celu odbyliśmy już kilka spotkań projektowych. Kilka tematów znajduje się w tabeli, w tym konta logowania. Nadal chciałbym wiedzieć, który komputer trzyma plik otwarty :-)
RobW
1

Jeśli to możliwe, przypisuję różnych użytkowników do różnych kiosków - może to pomóc w analizie innych dzienników ...

Jeśli nie jest to możliwe: Zarys możliwego rozwiązania: Rozwiązaniem może być uruchomienie narzędzia takiego jak sysinternals procesmonitor z odpowiednim filtrem (do danego pliku) w kioskach (nie wiem, czy można go ukryć). Istnieje kilka opcji wiersza poleceń, w które można grać, aby zapisać przechwycone dane do pliku.

Zbierz je z różnych kiosków, zaimportuj do np. Excela i poszukaj tego, który nie został zamknięty ...

reiniero
źródło
0

Co z użyciem polecenia netstat do ustalenia tego?

netstat -an | find ":445"

To powinno dać ci adresy IP podłączonych urządzeń.

Jeśli chcesz nazwy hostów zamiast adresów IP, użyj

netstat -a | find "microsoft-ds"

jednak wykonanie tego potrwa dłużej, szczególnie na zajętych serwerach plików lub kontrolerach domen, ponieważ będzie wymagało wielu wyszukiwań hosta.

Pamiętaj też, że wyniki pokażą przychodzące, wychodzące i bezczynne porty nasłuchu.

Połączenia przychodzące pokażą: 445 w lewej kolumnie, połączenia wychodzące pokażą w prawej kolumnie.

Możesz bezpiecznie zignorować wszystkie wyniki z napisem „LISTENING”, a także wszystkie wiersze, które pokazują tylko lokalne adresy IP (np. 0.0.0.0 lub 127.0.0.1) lub własną nazwę hosta komputera, jeśli nie używasz opcji -n.

Na przykład:

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

Jedynym podłączonym tu hostem jest 192.168.16.87. Połączenia z 192.168.16.24 są wychodzące. Wszystkie pozostałe połączenia są połączeniami lokalnymi.

Bryan
źródło
Hmmm, po prostu przeczytaj ponownie swoje pytanie, a to nie rozwiązuje twojego problemu, ponieważ nie mówi ci, jaki plik jest otwarty na komputerze.
Bryan
Nie ma problemu. Doceniam ten pomysł.
RobW
0

Pamiętam, że w systemie Windows było narzędzie graficzne do sprawdzania używanych udziałów i zablokowanych plików.

Powinien znajdować się w „narzędziach systemowych” pod „Zarządzanie komputerem” (~ przetłumaczone z francuskiego ...), pod nazwą „foldery współdzielone”.

petrus
źródło
0

Wiem, że jest to bardzo stare, ale ADSI zapewnia interfejs WinNT: //, który umożliwia dostęp do usługi LANMANSERVER i zapytania o właściwości już ujawnione w przystawce mmc „Foldery współdzielone”. Obecnie szukam sposobu na połączenie hosta i użytkownika z otwartym plikiem.

mbrownnyc
źródło
-1

Gdybym to był ja i miałbym dostęp do komputera z linuksem w tej samej podsieci ... Zrobiłbym tcpdump na odpowiednim porcie udostępniania do skrzynki, w której trzymają otwarty plik.

Jeśli nie masz Uniksa, nadal możesz używać tcpdump, ale musisz go zainstalować.

z linux ... Zrobiłbym coś takiego: tcpdump -ieth0 -s0 -X nazwa hosta port 1234 | grep -i "nameoffile"

Wiem, że większość danych ma charakter binarny ... Założę się jednak, że początkowy nagłówek do negocjacji uwierzytelnienia w celu uzyskania dostępu do pliku jest jawny.

Spowoduje to wyświetlenie każdego odległego hosta, który łączy się z tym polem i gdzie znajduje się nazwa pliku w danych pakietu (jeśli nie są zaszyfrowane lub binarnie).

Powodzenia! Ale z mojego doświadczenia wynika, że ​​należy stosować:

1) Udostępnione pliki to zły pomysł! Zwłaszcza w / zdalnych systemach, które mogą pozostawić plik zablokowany, jeśli zerwą połączenie lub będą miały wolne połączenia.

2) Dostęp do udostępnionego pliku spowoduje wyścig między klientami. Marnowanie cennego czasu kleszcza.

3) Jeśli MUSISZ użyć udostępnionego pliku ... Utwórz różne nazwy użytkowników dla każdej zdalnej witryny, aby móc poprawnie debugować.

Najlepszy scenariusz ... pozbyć się pliku i scalić z SQL lub stworzyć serwis internetowy, który umożliwia klientom dostęp do pliku lub danych.

++ Todd

Todd
źródło