Microsoft SMB Protocol Packet Exchange Scenario
In questo argomento viene illustrato un esempio di scambio di pacchetti del protocollo SMB Microsoft tra un client e un server. I passaggi seguenti sono una panoramica del processo:
- Il client e il server stabiliscono una sessione NetBIOS.
- Il client e il server negoziano il dialetto del protocollo Microsoft SMB.
- Il client accede al server.
- Il client si connette a una condivisione nel server.
- Il client apre un file nella condivisione.
- Il client legge dal file.
Prima di tutto, una connessione TCP full-duplex viene stabilita dal client con il server. Il client compila e invia quindi un pacchetto di richiesta di sessione NetBIOS tramite la connessione TCP. Se il pacchetto è stato formattato correttamente, il server restituisce un pacchetto contenente un messaggio che conferma che la sessione è stata stabilita. Successivamente, il client invia i primi pacchetti di protocollo Microsoft SMB al server.
pacchetto 1: SMB_COM_NEGOTIATE direzione : da client al server Descrizione: Il client richiede che il server negozii il dialetto del protocollo SMB Microsoft. Un elenco di stringhe che identificano i dialetti che il client può usare è incluso nel pacchetto. |
pacchetto 2: SMB_COM_NEGOTIATE direzione : da server al client Descrizione: Il server risponde alla richiesta del client di identificare il dialetto del protocollo Microsoft SMB che verrà usato nella sessione. Il pacchetto restituito include anche una stringa casuale a 8 byte che verrà usata nel passaggio successivo per autenticare il client durante il processo di accesso. |
pacchetto 3: SMB_COM_SESSION_SETUP_ANDX direzione : da client al server Descrizione: Questo pacchetto include informazioni sulle funzionalità client, pertanto questo pacchetto deve essere inviato anche se il server ha implementato solo la sicurezza a livello di condivisione. pacchetto 3: SMB_COM_SESSION_SETUP_ANDX direzione : da server al client Descrizione: Se la richiesta/risposta viene accettata dal server, nel pacchetto restituito al client viene incluso un UID valido. Se non viene accettata, il server restituirà un codice di errore in questo pacchetto e negherà l'accesso. |
pacchetto 4: SMB_COM_TREE_CONNECT_ANDX direzione : da client al server Descrizione: Il client richiede l'accesso alla condivisione. Il pacchetto contiene il percorso completo della condivisione in formato UNC. |
pacchetto 5: SMB_COM_TREE_CONNECT_ANDX direzione : da server al client Descrizione: Se viene concesso l'accesso alla condivisione, il server restituisce l'ID albero a 16 bit (TID) che corrisponde alla condivisione in questo pacchetto. Se la condivisione non esiste o l'utente non dispone di credenziali sufficienti per accedere alla condivisione, il server restituirà un codice di errore in questo pacchetto e negherà l'accesso alla condivisione. |
pacchetto 6: SMB_COM_OPEN_ANDX direzione : da client al server Descrizione: Il client richiede al server di aprire un file nella condivisione accessibile per conto del client. Questo pacchetto contiene il nome del file da aprire. |
pacchetto 7: SMB_COM_OPEN_ANDX direzione : da server al client Descrizione: Se viene concesso l'accesso al file, il server restituisce l'ID file del file richiesto. Se il file non esiste o l'utente non dispone di credenziali sufficienti per accedere al file, il server restituirà un codice di errore in questo pacchetto e negherà l'accesso al file. |
pacchetto 8: SMB_COM_READ_ANDX direzione : da client al server Descrizione: Il client richiede al server di leggere i dati dal file aperto per conto del client e restituire questi dati al client. L'ID file ottenuto dal client quando il file è stato aperto viene incluso in questo pacchetto per identificare il file aperto da cui il server deve leggere i dati. |
pacchetto 9: SMB_COM_READ_ANDX direzione : da server al client Descrizione: Il server restituisce i dati del file richiesti in questo pacchetto. In questo caso è improbabile che sia stato concesso l'accesso al server, alla condivisione e al file. Può verificarsi in alcune situazioni, tuttavia: ad esempio, se l'accesso a una condivisione viene modificato tra l'ora di apertura del file e l'ora di lettura. |
Nota
Se si implementa un CIFS che non supporta le notifiche di modifica, Windows non può mantenere un handle in sospeso per il file system e la connessione SMB può andare via senza preavviso.