Как узнать, на каком компьютере открыт файл в сетевой папке?

21

Среда:

Windows XP sp3, сервер Windows 2003

Проблема:

У нас есть несколько десятков киоск-машин, каждая из которых имеет одно и то же имя для входа, которые время от времени и на короткое время сохраняют файл в общем ресурсе. Скорость составляет несколько замков и выпускает за минуту.

Недавно мы столкнулись с тем, что один из клиентов блокировал файл исключительно, а затем не выпускал файл. 

Мы можем закрыть файл, когда это произойдет, но пройдет несколько минут или дольше, и это неприемлемое отключение.

Проблема с невыпущенной блокировкой возникала несколько раз за последний месяц. Я искал, какое устройство киоска отвечает за блокировку, и чтобы быстро обнаружить, когда это произойдет.

Кажется, есть пробел в информации, которую мы можем получить с сервера:

Мы можем видеть из различных инструментов:
-Какие файлы открыты и заблокированы. (много способов)
-Каким входом в систему указан или заблокирован конкретный файл. (много способов)
- на конкретном компьютере обычно открыт файл. (Общие папки, сессии mmc)

То, что мы не можем видеть, - то, что у определенного компьютера есть определенный файл, открытый и заблокированный.

Кто-нибудь знает способ добраться до этого?

Благодарность -

обкрадывать

RobW
источник
1
Не совсем то, что вы спрашиваете, но альтернативный подход заключается в создании отдельной учетной записи для каждой системы.
Брайан

Ответы:

10

Посмотрите на эту маленькую бесплатную утилиту ( ShareWatch ), я думаю, она сделает то, что вы ищете.

Одна из перечисленных функций: «Показывает пользователей и компьютеры, которые подключены к каждому общему ресурсу, а также какие файлы открыты».

альтернативный текст

techie007
источник
1
Спасибо за это - я попробовал Sharewatch. В моей ситуации - более десятка клиентов с одинаковыми именами входа - он объединяет открытые файлы и рабочие станции в один список. Вы не можете сказать, на какой рабочей станции он открыт. Кроме того, выбор «Свойства» просто сообщает, что на рабочей станции открыто x файлов, а не их имена. Выбор свойств для файла дает похожую информацию.
RobW
7

Введите командную строку (CMD),

затем введите: openfiles / ip запроса сетевого ресурса

И имя пользователя и пароль могут потребоваться.

Вы можете получить больше информации об openfiles здесь .

sky100
источник
Спасибо. Openfiles дает в основном тот же вывод, что и сетевой сеанс с консоли сервера. Он не дает имени компьютера, который открыл файл. Я ищу соединение с файлом -> компьютером, а не соединение с файлом -> пользователем.
RobW
5

Я полагаю, что вы захотите сослаться на пост Sky100, поскольку он прав, не в том, чтобы предоставить вам то, что вы просили, а в том, что вам нужно для решения вашей проблемы. Вам нужно будет сослаться на заблокированный идентификационный номер с помощью команды "openfile / query / v" (verbose), поскольку она предоставит вам необходимые данные. Ищите имя файла в указанном списке, данные покажут, для какого элемента разрешено чтение и запись, и вместе с ним предоставит конкретный идентификационный номер. Нет, вы не сможете найти, для какой конкретной системы заблокирован файл, но с помощью предоставленных инструментов вы можете отключить этого пользователя от файла. Вот шаг за шагом, чтобы упростить мои разговоры.

1) На файловом сервере с правами администратора выполните Пуск> Выполнить> CMD [ENTER]

2) Рабочий стол CD [ENTER] (скоро вы увидите, почему.)

3) openfiles / query / v> file.txt [ENTER] (это создаст файл на рабочем столе со списком всех открытых файлов на сервере.)

4) Откройте файл file.txt и найдите строку, содержащую как ваше имя файла, так и права на чтение + запись.

5) Запишите идентификационный номер в этой строке и вернитесь к командной консоли.

6) openfiles / отсоединить / ID [поставить номер ID здесь] [ENTER]

Пока у вас есть права администратора на файловом сервере, он будет отключать эту систему от файла, и, если ваша система автоматизирована, это позволит продолжать работу по мере необходимости.

Ссылки: openfiles / query /? открыть файлы / отключить /?

Если вам нужен скрипт или запрограммированное приложение, предназначенное для вашей системы, пожалуйста, не стесняйтесь комментировать, и я предоставлю контактную информацию, очень низкую цену вместе с технологией. поддержка по моему заявлению.

Томас
источник
Ха! Моя проблема заключалась в том, чтобы найти компьютер, с которого был открыт файл. У вас есть идеи, как это сделать? Идентифицировать и закрыть файл просто, и есть много способов спроектировать этот результат. Я ценю ответ, и ваше коммерческое предложение
вызвало у
Мои извинения, я не знал, что процесс openfiles не был решением. Из того, что вы описали, кажется, что это решило бы вашу необходимость еще раз взглянуть на систему, поскольку она не закрывает файл, а просто удаляет этот заблокированный параметр. На самом деле, я создал приложение для своей компании, и оно может быть автоматизировано, чтобы запускать каждую минуту, чтобы избежать таких сложностей. Я думаю, что это не относится к делу, хотя. Чтобы ответить на ваш прямой вопрос: да, должен быть способ проверки этих систем на предмет их доступа к этому файлу. Пожалуйста, смотрите мой следующий пост для получения дополнительной информации.
Томас
На самом деле, возвращаясь и перечитывая ваш пост ... «Мы можем закрыть файл, когда это произойдет, но пройдет несколько минут или дольше, и это недопустимое отключение». Причина, по которой ваше решение не работает, заключается в том, что вы ЗАКРЫВАЕТЕ файл. Мое и частично решение Sky100, предоставленное ранее, не закрывает файл, но ИЗМЕНИЕТ права доступа только для чтения. Опять же, я запутался в том, что openfiles не является решением, которое вы ищете. Дайте ему шанс, прежде чем списывать его как решение. Если вам не интересен программист, создайте командный файл для запуска каждые несколько минут.
Томас
Я оставляю свое решение для вашего вопроса ниже, чтобы не терять время, если мое понимание ситуации не является исчерпывающим.
Томас
Мммм. Извиняюсь, но я не чувствую, что мой вопрос решается вами. Мне нужна была помощь, чтобы определить, на каком компьютере был открыт файл. Я действительно заинтересован в определении имени компьютера. Все остальное, хотя и интересно, не говорит мне конечную вещь, которую я ищу.
RobW
2

Является ли проблема, которую вы пытаетесь решить, той, которую вы указали (например, сопоставление определенного клиентского компьютера (не пользователя) с заблокированным файлом), или это проблема блокировки, которую вам необходимо решить?

Если последний поможет, то я бы посмотрел на две вещи:

  • Проверьте AV, установленный на ваших клиентах. Я видел, что множественные AV на клиентской стороне вызывают серьезную неприятную аномальную блокировку поведения на общих ресурсах.

  • Попробуйте отключить оппортунистическую блокировку , установив для параметра реестра EnableOpLocks значение 0.

    HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Параметры EnableOplocks REG_DWORD 0 или 1 По умолчанию: 1 (включено)

Это несколько снизит производительность, но ничего не должно сломать.

Хотелось бы, чтобы кто-то действительно ответил на ваш заданный вопрос - это интересная проблема.

Helvick
источник
Спасибо Хелвик! Отключение оппортунистической блокировки - интересный подход. Сервер я предполагаю?
RobW
Да, это на сервере - это предотвращает запросы клиентов на случайную блокировку, чтобы они могли локально кэшировать (части) файлы.
Хелвик
Снижение производительности при отключении оппортунистической блокировки, скорее всего, будет для нас неприемлемым. Нам нужно посмотреть на это на нашем стенде.
RobW
Это определенно риск с этим - мне было бы интересно, что вы найдете.
Хелвик
2

В моей попытке решить проблему RobW и предложить альтернативное решение, я не смог ответить на его вопрос.

Я считаю, что решение, которое вы ищете, заключается в настройке политик аудита в этой системе, а затем в настройке этого файла для аудита любого доступа от этого конкретного пользователя. Шаги для выполнения этого могут различаться в зависимости от настроек вашей сети, поэтому я собираюсь отослать вас к технической ссылке Microsoft по настройке различных систем для аудита.

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

После того, как вы это настроите, убедитесь, что выполнили настройку конкретного файла, который вы хотите отслеживать, подключив учетную запись пользователя в качестве аудитора, вы должны быть готовы к работе.

Просто проверьте ваши журналы событий безопасности в будущем, и, хотя в нем будут перечислены все системы (так как все они используют одно и то же имя пользователя), не составит труда разобраться и определить, какая система в настоящее время имеет доступ для чтения и записи к файлу.

Может быть полезно настроить журнал безопасности на очистку каждые несколько дней.

Если это не сработает, скорее всего, вам нужно будет настроить систему для каждого имени хоста, обращающегося к файлу, а не имени пользователя. Я считаю, что это стало возможным благодаря консоли управления Microsoft.

Опять же, если вам нужно программирование, я не бизнесмен, заинтересованный в том, чтобы брать кучу ваших денег на какую-то крошечную программу. Я предоставляю качественное программирование по цене, от которой даже человек не будет уклоняться. Я надеюсь, что это поможет вам в решении вашей проблемы.

Томас
источник
Спасибо за это. Я установил аудит для этого каталога вскоре после первой проблемы. У нас в этом каталоге около 150 клиентов (и не только киосков). Поскольку проблема носит прерывистый характер, отношение сигнал / шум было огромным, и я не видел четкого способа привязки конкретного компьютера к событию файла. Я посмотрю на это снова. У нас уже было несколько дизайнерских встреч по этому поводу. На столе несколько тем, включая учетные записи. Я все еще хотел бы знать, на каком компьютере открыт файл :-)
RobW
1

Я бы также назначил разных пользователей для разных киосков, если это возможно - это может помочь вам в анализе других журналов ...

Если это невозможно: план возможного решения: решение может состоять в том, чтобы запустить на киосках такой инструмент, как sysinternals processmonitor с соответствующим фильтром (для рассматриваемого файла) (не знаю, сможете ли вы его скрыть). Есть некоторые параметры командной строки, которые вы можете использовать, чтобы сохранить захваченные данные в файл.

Соберите их из различных киосков, импортируйте их, например, в Excel и найдите тот, который не был закрыт ...

reiniero
источник
0

Как насчет использования команды netstat для определения этого?

netstat -an | find ":445"

Это должно дать вам IP-адреса подключенных машин.

Если вы хотите, чтобы имена хостов, а не IP-адреса, используйте

netstat -a | find "microsoft-ds"

однако это займет больше времени, особенно на загруженных файловых серверах или контроллерах домена, так как для этого потребуется выполнить много операций поиска на хосте.

Также имейте в виду, что в результатах будут показаны входящие, исходящие и незанятые порты прослушивания.

Входящие соединения покажут: 445 в левом столбце, исходящие - в правом столбце.

Вы можете спокойно игнорировать любые результаты, в которых указано «LISTENING», а также любые строки, которые показывают только локальные IP-адреса (например, 0.0.0.0 или 127.0.0.1) или имя компьютера, если вы не используете опцию -n.

Например:

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 являются исходящими. Все остальные соединения являются локальными.

Bryan
источник
Хммм, просто перечитайте свой вопрос, и он не совсем решит вашу проблему, так как он не говорит вам, какой файл открыт у компьютера.
Брайан
Нет проблем. Я ценю эту идею.
RobW
0

Я помню, что в окнах был графический инструмент для проверки используемых общих ресурсов и заблокированных файлов.

Это должно быть в «системных инструментах» в разделе «Управление компьютером» (перевод с французского ...), под названием «общие папки».

Петрус
источник
0

Я знаю, что это очень старая версия, но ADSI предоставляет интерфейс WinNT: //, который позволяет получить доступ к службе LANMANSERVER и запросить свойства, уже представленные в оснастке mmc «Общие папки». В настоящее время я изучаю способ связать хост и пользователя с открытым файлом.

mbrownnyc
источник
-1

Если бы это был я, и у меня был доступ к машине linux в той же подсети ... Я бы сделал tcpdump на рассматриваемом порте общего доступа для коробки, на которой они держат открытый файл.

Если у вас нет unix, вы все равно можете использовать tcpdump, но вы должны установить его.

из Linux ... я бы сделал что-то вроде этого: tcpdump -ieth0 -s0 -X имя хоста порт 1234 | grep -i "nameoffile"

Я знаю, что большая часть полезных данных является бинарной ... Однако я бы поспорил, что первоначальный заголовок для согласования аутентификации для доступа к файлу будет открытым текстом.

Это покажет вам каждый хост на дальнем конце, который подключается к этому блоку и где имя файла находится в данных пакета (если не зашифровано или в двоичном формате).

Удачи! Но из моего опыта следует использовать следующее:

1) Общие файлы - плохая идея! Особенно с удаленными системами, которые могут оставить файл заблокированным, если они разрывают соединение или имеют медленные соединения.

2) Доступ к общему файлу вызовет состояние гонки между клиентами. Тратить драгоценное время.

3) Если вы ДОЛЖНЫ использовать общий файл ... Создайте разные имена пользователей для каждого удаленного сайта, чтобы вы могли правильно отлаживать.

Лучший сценарий ... избавиться от файла и объединиться с SQL или создать веб-сервис, который позволяет клиентам получить доступ к файлу или данным.

++ Todd

Тодд
источник