Какие протоколы используются для общего доступа к сети

4410
oleksii

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

У меня есть 2 компьютера с Windows 8, которые не включены в домен активного каталога. Компьютер 1 поделился папкой с каждым. Компьютер 2 копирует файлы с компьютера 1 из общей папки.

enter image description here

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

Вопросы:

  • Какие протоколы используются на компьютере 1 и 2 для доступа к файлам через сетевые папки?
  • Почему procmon не видит события ввода-вывода на компьютере 1, когда компьютер 2 обращается к своей общей папке?
0
Ну, протокол SMB или CIFS. Но я ожидаю ввода-вывода на удаленной машине, когда копирую файлы. GiantTree 6 лет назад 0
доступ к общему ресурсу не вызовет никакого реального ввода-вывода, но копирование файлов с общего ресурса вызовет операции чтения. Обязательно скопируйте большой файл, так что это займет достаточно много времени, чтобы вы увидели ввод-вывод. Frank Thomas 6 лет назад 0
@GiantTree Правильно, так что SMB / CIFS, это приятно знать. Я могу контролировать Компьютер1, но не могу контролировать Компьютер 2. Как dows получает доступ к файловой системе SMB / CIFS, не проходя через стек драйверов файловой системы? Я не понимаю, как он может читать реплицированные / зашифрованные данные и сканироваться на вирусы, не проходя через стек файловой системы. oleksii 6 лет назад 0
@oleksii: ProcMon не показывает, что проходит через стек драйверов файловой системы; он показывает только то, что вызовы ядра выполняются _userspace process_. Хотя LanmanServer, кажется, живет в svchost.exe, я полагаю, что его часть может быть полностью реализована в самом ядре (и, следовательно, не являться частью какого-либо видимого процесса, кроме процесса «Система»). grawity 6 лет назад 0
@FrankThomas Я не видел ни одного чтения ввода-вывода на компьютере 1 (копирование файлов по 100 МБ) oleksii 6 лет назад 0
Обратите внимание, что SMB запускается из системного процесса (PID 4), поэтому может быть сложнее читать его операции через procmon. Вы можете подтвердить это с помощью `netstat -abno | findstr LISTENING` и просмотр портов TCP / 139 и TCP / 445, которые вы увидите, принадлежит PID 4. Frank Thomas 6 лет назад 0
@FrankThomas подтвердил, что порты 139 и 445 находятся в состоянии LISTENING и используются системой (pid 4). oleksii 6 лет назад 0

1 ответ на вопрос

3
grawity

Какие протоколы используются на компьютере 1 и 2 для доступа к файлам через сетевые папки?

Протокол совместного доступа к файлам Windows называется SMB, когда-то сокращенно от «Блокировка сообщений сервера». Он может работать на уровне «сеанса NetBIOS» (TCP-порт 139), но чаще используется поверх необработанного TCP (порт 445).

(Версия 1 также часто называлась «CIFS», хотя, насколько мне известно, определенный CIFS не на 100% идентичен Windows SMBv1.)

В Windows SMB-сервер работает как LanmanServerслужба внутри одного из процессов svchost.exe . (Я не совсем уверен, но я думаю, что частью этого может быть и драйвер ядра, который не будет отображаться в ProcMon из-за отсутствия системных вызовов на уровне, который ProcMon наблюдает за ними.)

Полезно знать о первой части. Очень полезно, спасибо. Что касается procmon - он использует драйвер файловой системы минифильтра, аналогичный [passthough] (https://github.com/Microsoft/Windows-driver-samples/tree/master/filesys/miniFilter/passThrough), поэтому он захватывает метаданные событий ввода-вывода в ядро, и оно * должно * получить эти данные, но это не так. Должны быть некоторые вызовы Windows API, которые либо не проходят через стек ввода-вывода по умолчанию, либо эти вызовы API не зарегистрированы для фильтрации драйвером procmon. oleksii 6 лет назад 0