Подробный гайд: Полный справочник по протоколу SMB: команды SMB / SMB2 / SMB3 - Часть 2

Полный справочник по протоколу SMB: команды SMB1, SMB2 и SMB3, структура пакетов, FSCTL, типовые сценарии обмена, диагностика трафика и настройки безопасности сетей.

2026.09.29                  


Подробный гайд: Полный справочник по протоколу SMB: команды SMB / SMB2 / SMB3 - Часть 2Подробный гайд: Полный справочник по протоколу SMB: команды SMB / SMB2 / SMB3 - Часть 2

7. Подробное описание команд SMB2/SMB3

7.1. SMB2 NEGOTIATE

Команда: 0x0000

Назначение:

  • клиент отправляет список поддерживаемых диалектов;
  • сервер выбирает диалект;
  • согласуются лимиты, возможности, GUID сервера, режим подписи;
  • для SMB 3.1.1 передаются negotiate contexts.

Что согласуется:

  • диалект;
  • максимальный размер чтения/записи;
  • максимальный размер транзакции;
  • поддержка шифрования;
  • поддержка подписи;
  • возможности безопасности;
  • поддержка compression/RDMA;
  • preauth integrity hash.


Типичные поля ответа:

  • SecurityMode;
  • DialectRevision;
  • ServerGuid;
  • MaxTransactSize;
  • MaxReadSize;
  • MaxWriteSize;
  • SystemTime;
  • SecurityBuffer;
  • Capabilities.

7.2. SMB2 SESSION_SETUP

Команда: 0x0001

Назначение:

  • установка пользовательской сессии;
  • обмен security blob через SPNEGO;
  • использование Kerberos, NTLM или других механизмов;
  • получение SessionId;
  • установка флага шифрования сессии, если согласовано.

Важные флаги:

  • SMB2_SESSION_FLAG_BINDING — привязка дополнительной сессии;
  • SMB2_SESSION_FLAG_ENCRYPT_DATA — требование шифрования;
  • гостевые/анонимные сессии в современных системах должны ограничиваться.

Типовой поток:

SESSION_SETUP Request -> STATUS_MORE_PROCESSING_REQUIRED -> SESSION_SETUP Response -> SUCCESS

7.3. SMB2 LOGOFF

Команда: 0x0002

Назначение:

  • завершает сессию;
  • сервер освобождает ресурсы сессии;
  • после этого SessionId становится недействительным.

7.4. SMB2 TREE_CONNECT

Команда: 0x0003

Назначение:

  • подключение к общему ресурсу: диску, именованному каналу или принтеру;
  • получение TreeId;
  • определение типа шары и её флагов.

Типы общих ресурсов:

  • SMB2_SHARE_TYPE_DISK — файловая шара;
  • SMB2_SHARE_TYPE_PIPE — именованные каналы;
  • SMB2_SHARE_TYPE_PRINT — очередь печати.

Пример пути:

\\server\share

7.5. SMB2 TREE_DISCONNECT

Команда: 0x0004

Назначение:

  • отключение от общего ресурса;
  • освобождение TreeId;
  • не завершает пользовательскую сессию целиком.

7.6. SMB2 CREATE

Команда: 0x0005

Назначение:

  • открытие файла;
  • создание файла;
  • открытие каталога;
  • открытие именованного канала;
  • запрос оппортунистической блокировки или lease;
  • передача create contexts.

Ключевые параметры:

Параметр Назначение
DesiredAccess Права доступа
FileAttributes Атрибуты файла
ShareAccess Совместный доступ: чтение/запись/удаление
CreateDisposition Что делать, если файл существует/не существует
CreateOptions Флаги открытия
ImpersonationLevel Уровень олицетворения
OplockLevel Уровень оппортунистической блокировки
CreateContexts Дополнительные параметры открытия

7.6.1. Типовые CreateDisposition

Значение Смысл
0 FILE_SUPERSEDE — заменить существующий или создать новый
1 FILE_OPEN — открыть существующий
2 FILE_CREATE — создать новый
3 FILE_OPEN_IF — открыть существующий или создать
4 FILE_OVERWRITE — перезаписать существующий
5 FILE_OVERWRITE_IF — перезаписать существующий или создать

7.6.2. Типовые CreateOptions

Флаг Назначение
FILE_DIRECTORY_FILE Объект должен быть каталогом
FILE_NON_DIRECTORY_FILE Объект должен быть файлом
FILE_WRITE_THROUGH Запись без кэширования, если поддерживается
FILE_SEQUENTIAL_ONLY Последовательный доступ
FILE_RANDOM_ACCESS Произвольный доступ
FILE_DELETE_ON_CLOSE Удалить при закрытии
FILE_OPEN_BY_FILE_ID Открытие по FileId
FILE_OPEN_REPARSE_POINT Не следовать репарсинг-точке
FILE_OPEN_FOR_BACKUP_INTENT Открытие с резервным намерением

7.7. SMB2 CLOSE

Команда: 0x0006

Назначение:

  • закрытие открытого дескриптора;
  • освобождение ресурсов;
  • при наличии флага можно запросить атрибуты после закрытия.

Флаг:

  • SMB2_CLOSE_FLAG_POSTQUERY_ATTRIB — запросить атрибуты после закрытия.

7.8. SMB2 FLUSH

Команда: 0x0007

Назначение:

  • принудительно сбросить изменённые данные файла на сервер/диск.

7.9. SMB2 READ

Команда: 0x0008

Назначение:

  • чтение данных из файла или канала.


Ключевые поля:

  • FileId;
  • Offset;
  • Length;
  • MinimumCount;
  • Channel;
  • RemainingBytes;
  • Flags.

Флаг для новых систем:

  • SMB2_READFLAG_READ_UNBUFFERED — небучферизованное чтение, в ряде сценариев для SMB 3.1.1.

7.10. SMB2 WRITE

Команда: 0x0009

Назначение:

  • запись данных в файл или канал.

Ключевые поля:

  • FileId;
  • Offset;
  • Length;
  • Channel;
  • Flags.

Флаги:

  • SMB2_WRITEFLAG_WRITE_THROUGH — запись с проходом сквозь кэш;
  • SMB2_WRITEFLAG_WRITE_UNBUFFERED — небучферизованная запись.

7.11. SMB2 LOCK

Команда: 0x000A

Назначение:

  • установка и снятие блокировок диапазонов файла.

Типы флагов:

  • SMB2_LOCKFLAG_SHARED_LOCK — разделяемая блокировка;
  • SMB2_LOCKFLAG_EXCLUSIVE_LOCK — исключительная блокировка;
  • SMB2_LOCKFLAG_UNLOCK — разблокировка;
  • SMB2_LOCKFLAG_FAIL_IMMEDIATELY — не ждать, сразу вернуть ошибку, если блокировка невозможна.

7.12. SMB2 IOCTL

Команда: 0x000B

Назначение:

  • универсальная управляющая команда;
  • заменяет многие специфические SMB1-операции;
  • используется для файловых системных управляющих кодов FSCTL;
  • используется для операций с именованными каналами;
  • может применяться для DFS, снапшотов, копирования на сервере, запросов сетевых интерфейсов и т.д.

Важные поля:

  • FileId;
  • CtlCode;
  • MaxInputResponse;
  • MaxOutputResponse;
  • Flags;
  • буферы ввода/вывода.

7.13. SMB2 CANCEL

Команда: 0x000C

Назначение:

  • отмена ранее отправленного запроса;
  • используется, например, при отмене блокировки, чтения, уведомления об изменениях.

7.14. SMB2 ECHO

Команда: 0x000D

Назначение:

  • проверка доступности сервера и сессии;
  • поддержание активности;
  • диагностика.

7.15. SMB2 QUERY_DIRECTORY

Команда: 0x000E

Назначение:

  • перечисление файлов и каталогов;
  • поиск по маске;
  • получение разных классов информации.

Типовые сценарии:

CREATE на каталог -> QUERY_DIRECTORY -> ... -> CLOSE

Флаги:

  • SMB2_RESTART_SCANS — перезапустить сканирование;
  • SMB2_RETURN_SINGLE_ENTRY — вернуть одну запись;
  • SMB2_INDEX_SPECIFIED — использовать индекс;
  • SMB2_REOPEN — переоткрыть поиск.

7.16. SMB2 CHANGE_NOTIFY

Команда: 0x000F

Назначение:

  • подписка на события изменения каталога;
  • сервер отправляет завершение, когда происходят изменения.

Типовые фильтры:

  • изменение имени файла;
  • изменение имени каталога;
  • изменение атрибутов;
  • изменение размера;
  • изменение времени записи;
  • изменение безопасности;
  • создание/удаление;
  • изменения потоков данных.

7.17. SMB2 QUERY_INFO

Команда: 0x0010

Назначение:

  • запрос информации о:
    • файле;
    • файловой системе;
    • безопасности;
    • квотах.

Типы информации:

InfoType Назначение
1 Файловая информация
2 Информация о файловой системе
3 Информация безопасности
4 Информация о квотах

7.18. SMB2 SET_INFO

Команда: 0x0011

Назначение:

  • установка информации о:
    • файле;
    • файловой системе;
    • безопасности;
    • квотах.

Примеры:

  • переименование файла через FileRenameInformation;
  • установка размера через FileEndOfFileInformation;
  • удаление через FileDispositionInformation;
  • изменение владельца или DACL через security info.

7.19. SMB2 OPLOCK_BREAK

Команда: 0x0012

Назначение:

  • сервер сообщает клиенту о необходимости понизить уровень оппортунистической блокировки;
  • используется также для lease-уведомлений;
  • клиент может подтвердить или ответить в зависимости от ситуации.

Типовые причины:

  • другой клиент открывает файл конфликтующим образом;
  • изменения кэша;
  • необходимость согласовать состояние.

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


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

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