Ответ
SMB (Server Message Block) — это сетевой протокол прикладного уровня, предназначенный для предоставления общего доступа к файлам, принтерам, портам и другим ресурсам в локальной сети. Изначально разработан IBM, но наиболее известен по реализации в ОС Windows (где его часто называют CIFS — Common Internet File System).
Ключевые характеристики:
- Работа поверх: TCP/IP (порт 445 в современных системах) или NetBIOS (порт 139, устаревший режим).
- Аутентификация и безопасность: Поддерживает различные схемы (NTLM, Kerberos). Начиная с SMB 3.0, появилось сквозное шифрование и защита от атак "man-in-the-middle".
- Кроссплатформенность: Хотя нативный для Windows, протокол реализован на других платформах через сервер Samba (для UNIX-подобных систем) и клиентские библиотеки.
Пример использования SMB в C++ на Windows через WinAPI:
#include <windows.h>
#include <iostream>
int main() {
// Открытие файла на сетевой шаре по протоколу SMB
HANDLE hFile = CreateFileW(
L"\\server-name\share-name\document.txt", // UNC-путь
GENERIC_READ, // Режим доступа
FILE_SHARE_READ, // Совместный доступ
NULL, // Атрибуты безопасности
OPEN_EXISTING, // Действие
FILE_ATTRIBUTE_NORMAL, // Флаги и атрибуты
NULL // Шаблон файла
);
if (hFile == INVALID_HANDLE_VALUE) {
DWORD error = GetLastError();
std::cerr << "Ошибка открытия файла. Код: " << error << std::endl;
return 1;
}
// ... чтение данных из hFile ...
CloseHandle(hFile);
return 0;
}
Важные версии:
- SMB 1.0/CIFS: Устаревший, имеет критические уязвимости (например, EternalBlue). Рекомендуется отключать.
- SMB 2.0/2.1: Значительное увеличение производительности, уменьшение количества команд.
- SMB 3.0/3.1.1: Современные версии с шифрованием, устойчивостью к сбоям канала, поддержкой RDMA (SMB Direct).