Окружающая среда:
Windows XP sp3, Windows 2003 сервер
Проблема:
У нас есть несколько десятков киосков, каждая с одним и тем же именем для входа, которые время от времени и на короткое время создают файл в общей папке. Скорость составляет несколько блокировок и отпусков в минуту.
Недавно мы столкнулись с тем, что один из клиентов блокирует файл исключительно, а затем не освобождает его.
Мы можем закрыть файл, когда это произойдет, но пройдет несколько минут или дольше, и это неприемлемый сбой.
Проблема с невыпущенной блокировкой возникала несколько раз за последний месяц. Я искал, какое устройство киоска отвечает за блокировку, и быстро обнаруживал, когда это происходит.
Похоже, что в информации, которую мы можем получить с сервера, есть пробел:
Мы можем видеть с помощью различных инструментов:
-Какие файлы открыты и заблокированы. (много способов)
-Какой вход в систему имеет определенный файл, открытый или заблокированный. (много способов)
-Что на конкретном компьютере обычно открыт файл. (Общие папки, сеансы mmc)
Мы не можем видеть, что на конкретном компьютере открыт и заблокирован определенный файл.
Кто-нибудь знает способ добраться до этого?
Спасибо -
Роб
Ознакомьтесь с этой небольшой бесплатной утилитой (Поделиться), Я думаю, он сделает то, что вы ищете.
Одна из перечисленных функций: «Показывает пользователей и компьютеры, подключенные к каждому общему ресурсу, вместе с открытыми файлами».
Введите командную строку (CMD),
затем введите: openfiles / query IP-адрес сети
И может потребоваться логин и пароль.
Вы можете получить больше информации об открытых файлах на Вот.
Я считаю, что вы захотите вернуться к сообщению Sky100, поскольку он прав, не в том, чтобы предоставить вам то, что вы просили, а в предоставлении вам того, что вам нужно для решения вашей проблемы. Вам нужно будет указать заблокированный идентификационный номер с помощью команды openfile / query / v (подробный), поскольку она предоставит вам необходимые данные. Найдите имя файла в приведенном списке, данные покажут, для какого элемента разрешено чтение и запись, а также предоставят конкретный идентификационный номер. Нет, возможно, вы не сможете найти, в какой конкретной системе файл заблокирован, но с помощью предоставленных инструментов вы можете отключить этого пользователя от файла. Вот пошаговая инструкция для упрощения моих рассуждений.
1) На файловом сервере с правами администратора выполните Пуск> Выполнить> CMD [ENTER]
2) CD Desktop [ENTER] (Вы скоро поймете, почему.)
3) openfiles / query / v> file.txt [ENTER] (Это создаст файл на рабочем столе со списком всех открытых файлов на сервере.)
4) Откройте файл file.txt и найдите строку, содержащую как имя вашего файла, так и разрешения на чтение + запись.
5) Запишите идентификационный номер в этой строке и вернитесь в командную консоль.
6) openfiles / disconnect / ID [введите сюда идентификационный номер] [ENTER]
Пока у вас есть права администратора на файловом сервере, он отключит эту систему от файла, и, если ваша система автоматизирована, все будет продолжаться по мере необходимости.
Ссылки: openfiles / query /? openfiles / отключить /?
Если вам нужен сценарий или запрограммированное приложение для вашей системы, не стесняйтесь комментировать, и я предоставлю контактную информацию по очень низкой цене вместе с техническими средствами. поддержка по моему приложению.
Является ли проблема, которую вы пытаетесь решить, той, которую вы указали (т.е. сопоставьте конкретный клиентский компьютер (не пользователя) с заблокированным файлом), или это проблема блокировки, которую вам необходимо решить?
Если последнее поможет, я бы обратил внимание на две вещи:
Проверьте антивирус, установленный на ваших клиентах - я видел, как несколько антивирусных программ на стороне клиента вызывали серьезные аномальные блокировки общих ресурсов.
Попробуйте отключить гибкая блокировка установив для параметра реестра EnableOpLocks значение 0.
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parameters EnableOplocks REG_DWORD 0 или 1 По умолчанию: 1 (включено)
Это несколько снизит производительность, но ничего не сломает.
Я бы хотел, чтобы кто-нибудь действительно ответил на ваш заданный вопрос - это интересная проблема.
В моей попытке устранить проблему RobW и предложить альтернативное решение я не смог ответить на его вопрос.
Я считаю, что решение, которое вы ищете, будет заключаться в настройке политик аудита в этой системе, а затем в настройке этого файла для аудита любого доступа этого конкретного пользователя. Шаги по выполнению этого могут варьироваться в зависимости от настройки вашей сети, поэтому я собираюсь отослать вас к технической ссылке Microsoft о том, как настроить различные системы для аудита.
http://technet.microsoft.com/en-us/library/cc787268(WS.10).aspx
После настройки, обязательно завершите настройку конкретного файла, который вы хотите отслеживать, подключив учетную запись пользователя в качестве аудитора, вы должны быть готовы к работе.
Просто проверьте свои журналы событий безопасности в будущем, и хотя в нем будут перечислены все системы (поскольку все они используют одно и то же имя пользователя), не составит труда отсортировать и определить, какая система в настоящее время имеет доступ для чтения и записи к файлу.
Может оказаться полезным настроить очистку журнала безопасности каждые несколько дней.
Если это не сработает, вероятно, вам нужно будет настроить систему для каждого имени хоста, обращающегося к файлу, а не имени пользователя. Я считаю, что это стало возможным через консоль управления Microsoft.
Опять же, если вам нужно программирование, я не бизнесмен, заинтересованный в том, чтобы тратить кучу ваших денег на какую-нибудь крошечную программу. Я предлагаю качественное программирование по цене, от которой не уклонится даже человек. Надеюсь, это поможет вам решить вашу проблему.
Я бы также по возможности назначил разных пользователей в разные киоски - это может помочь вам в анализе других журналов ...
Если это невозможно: Краткое описание возможного решения: Решением может быть запуск такого инструмента, как sysinternals processmonitor, с надлежащим фильтром (для соответствующего файла) в киосках (не знаю, можете ли вы его скрыть). Есть несколько параметров командной строки, с которыми вы можете поиграть, чтобы сохранить захваченные данные в файл.
Соберите их из различных киосков, импортируйте их, например, в Excel и найдите тот, который не был закрыт ...
Как насчет использования команды netstat для определения этого?
netstat -an | find ":445"
Это должно дать вам IP-адреса подключенных машин.
Если вам нужны имена хостов, а не IP-адреса, используйте
netstat -a | find "microsoft-ds"
однако это займет больше времени, особенно на загруженных файловых серверах или контроллерах домена, поскольку для этого потребуется много поисков узлов.
Также имейте в виду, что в результатах будут отображаться входящие, исходящие и незанятые порты прослушивания.
Для входящих подключений в левом столбце отображается: 445, для исходящих - в правом столбце.
Вы можете безопасно игнорировать любые результаты, в которых указано «ПРОСЛУШИВАНИЕ», а также любые строки, которые показывают только локальные 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 являются исходящими. Все остальные подключения являются локальными.
Я помню, что в окнах был графический инструмент для проверки используемых общих ресурсов и заблокированных файлов.
Он должен быть в «Системных инструментах» в разделе «Управление компьютером» (~ перевод с французского ...) под названием «Общие папки».
Я знаю, что он очень старый, но ADSI предоставляет интерфейс WinNT: //, который позволяет вам получить доступ к службе LANMANSERVER и запросить свойства, уже представленные в оснастке mmc «Общие папки». В настоящее время я ищу способ связать хост и пользователя к открытому файлу.
Если бы это был я и у меня был доступ к Linux-машине в той же подсети ... Я бы сделал tcpdump на соответствующем общем порте в поле, в котором они держат файл открытым.
Если у вас нет unix, вы все равно можете использовать tcpdump, но вам необходимо установить его.
из linux ... Я бы сделал что-то вроде этого: tcpdump -ieth0 -s0 -X hostname port 1234 | grep -i "nameoffile"
Я знаю, что большая часть полезной нагрузки является двоичной ... Однако я готов поспорить, что начальный заголовок для согласования аутентификации для доступа к файлу представлен открытым текстом.
Это покажет вам каждый удаленный хост, который подключается к этому ящику, и где находится имя файла в их пакетных данных (если они не зашифрованы или в двоичном формате).
Удачи! Но по моему опыту, следует использовать следующее:
1) Общие файлы - плохая идея! Особенно с удаленными системами, которые могут оставить файл заблокированным, если они разорвут соединение или имеют медленное соединение.
2) Доступ к общему файлу вызовет состояние гонки между клиентами. Тратить драгоценное тиковое время.
3) Если вы ДОЛЖНЫ использовать общий файл ... Создайте разные имена пользователей для каждого удаленного сайта, чтобы вы могли правильно отлаживать.
Лучший сценарий ... избавиться от файла и объединить его с SQL или создать веб-сервис, который позволяет клиентам получать доступ к файлу или данным.
++ Тодд