Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое SMB протокол?
Краткий ответ
SMB (Server Message Block) — это сетевой протокол для совместного доступа к ресурсам (файлам, принтерам, портам) в локальной сети или через интернет. Это основа протокола CIFS (Common Internet File System) и современного SMB3.
История развития
SMB 1.0 — разработан компанией Microsoft в 1985 году, оригинальная версия для Windows.
CIFS (Common Internet File System) — расширенная версия SMB для интернета (1996).
SMB 2.0 — усовершенствованная версия с улучшенной производительностью и безопасностью (Windows Vista, 2006).
SMB 3.0 — современная версия с шифрованием, отказоустойчивостью и поддержкой облачных сервисов (Windows 8, 2012).
Назначение SMB
SMB используется для:
- Общих папок — доступ к файлам и папкам через сеть
- Принтеров — доступ к сетевым принтерам
- Именованных каналов (named pipes) — IPC между процессами через сеть
- Почтовых ящиков — древний механизм обмена сообщениями
- Удалённого выполнения команд — через инструменты вроде PsExec
Архитектура SMB
Уровень приложения (Samba, Windows Networking)
↓
SMB/CIFS протокол
↓
Транспортный уровень (обычно TCP порт 445)
↓
IP сеть
Порты:
- 139 (NetBIOS) — старый транспорт через NetBIOS
- 445 (Direct TCP) — современный способ, прямое подключение к TCP
Примеры использования
1. Доступ к общей папке Windows
# На Windows
\\server\sharedfolder\file.txt
# На Linux через Samba
mount -t cifs //server/sharedfolder /mnt/share -o username=user,password=pass
2. Работа с файлами программно
#include <windows.h>
#include <iostream>
int main() {
// Подключение к SMB ресурсу через Windows API
NETRESOURCE nr = {0};
nr.dwType = RESOURCETYPE_DISK;
nr.lpLocalName = L"Z:";
nr.lpRemoteName = L"\\\\192.168.1.100\\sharedfolder";
nr.lpProvider = NULL;
DWORD result = WNetAddConnection2(&nr, L"password", L"username", 0);
if (result == NO_ERROR) {
std::cout << "Успешное подключение\n";
// Теперь можно работать как с локальной папкой
// Z:\file.txt
WNetCancelConnection2(L"Z:", 0, TRUE);
} else {
std::cout << "Ошибка подключения: " << result << "\n";
}
return 0;
}
3. Использование Samba на Linux
# Установка Samba
sudo apt install samba samba-client
# Просмотр доступных ресурсов
smbclient -L //192.168.1.100 -U username
# Подключение к папке
smbclient //192.168.1.100/sharedfolder -U username
Безопасность SMB
Уязвимости старых версий:
- SMB 1.0 — WannaCry атаки (CVE-2017-0144) использовали уязвимости в SMB1
- Передача паролей — в старых версиях пароли передавались в слабом хешировании
Защита в SMB 3:
- Шифрование AES-128-CCM — все данные шифруются
- Подписание — проверка целостности сообщений
- Аутентификация Kerberos — безопасная аутентификация в домене
- SMB Signing — предотвращает MITM атаки
SMB в контексте Backend разработки
// Пример: чтение файла через SMB для backup
#include <iostream>
#include <fstream>
// На Linux используем libsmbclient
#include <libsmbclient.h>
void backup_file_from_smb() {
// Инициализация
smbc_init(auth_fn, 0);
// Открытие файла через SMB
SMBCFILE *file = smbc_open("smb://server/share/file.txt",
O_RDONLY, 0755);
if (!file) {
std::cout << "Ошибка открытия файла\n";
return;
}
// Чтение содержимого
char buffer[4096];
ssize_t bytes_read;
while ((bytes_read = smbc_read(file, buffer, sizeof(buffer))) > 0) {
// Обработка данных
}
smbc_close(file);
}
Альтернативные протоколы
- NFS (Network File System) — для Unix/Linux сетей
- SFTP (SSH File Transfer Protocol) — безопасная передача файлов
- FTP — старый, небезопасный протокол
- HTTP/HTTPS — для веб-файлов
- iSCSI — для блочного хранилища
Проблемы SMB
- Производительность — не всегда быстрая, особенно при большом количестве файлов
- Безопасность — SMB1 имеет серьёзные уязвимости, использовать нельзя
- Совместимость — работает лучше в Windows окружении
- Сложность отладки — проблемы с сетевыми подключениями трудно диагностировать
Выводы
- SMB — основной протокол для общих ресурсов в Windows сетях
- SMB3 — современная, безопасная версия с шифрованием
- Используй SMB3 если нужен доступ к Windows файлам через сеть
- Избегай SMB1 — множество уязвимостей
- На Linux — Samba обеспечивает совместимость с Windows SMB