# NetBIOS

NetBIOS (NETwork Basic Input Output System) est une architecture réseau codéveloppée par IBM et Sytek (en) au début des années 1980. NetBIOS est utilisé principalement par Microsoft. Ce n'est pas un protocole réseau, mais un système de nommage et une interface logicielle qui permet d’établir des sessions entre différents ordinateurs d’un réseau.
NetBIOS a connu plusieurs implémentations :
* NBF (NetBIOS Frames Protocol, connu à tort sous le nom NetBEUI) ;
* NBX (NetBIOS over IPX/SPX) ;
* NBT (NetBIOS over TCP/IP).
Les deux premières ont disparu de nos jours.
Les noms NetBIOS sont appelés à disparaître en faveur des noms DNS. De plus, le partage de fichiers avec le protocole SMB peut à présent se passer de NetBIOS et fonctionner directement par-dessus TCP/IP.

## Historique

NetBIOS a été développé en 1983 par Sytek Inc. comme interface de programmation pour les communications entre ordinateurs IBM PC sur un réseau local.
IBM a écrit en 1985 un émulateur NetBIOS nommé NetBEUI (NetBIOS Extended User Interface). À cette occasion, IBM a étendu l'interface de programmation et défini le protocole NBF. NBF pouvait fonctionner par-dessus la couche IEEE Logical Link Control, donc à la fois par-dessus Token ring d'IBM et par-dessus Ethernet.
En 1986, Novell a publié Advanced Novell NetWare 2.0 qui comportait son propre émulateur NetBIOS et pouvait fonctionner par-dessus IPX/SPX.
En 1987, une méthode pour encapsuler NetBIOS dans des paquets TCP et UDP, NetBIOS over TCP/IP a été publiée. Elle a été décrite dans les RFC 1001 et RFC 1002.

## NetBIOS over TCP/IP

NetBIOS over TCP/IP utilise les ports :
* 135 Service de localisation utilisé par les appels de procédure à distance ;
* 137 netbios-ns - NETBIOS Name Service ;
* 138 netbios-dgm - NETBIOS Datagram Service ;
* 139 netbios-ssn - NETBIOS Session Service.

### NetBIOS Name Service (port UDP 137)

Ce service sert à associer un nom d’ordinateur à une adresse IP.
Ce nom est limité à 15 caractères, plus un caractère renseignant sur le type de machine : par exemple, avec l’interface graphique, on peut avoir un contrôleur de domaine et une machine cliente qui portent le même nom sur 15 caractères ; en interne, le seizième caractère est attribué automatiquement et permet de différencier les deux.

### NetBIOS Datagram Service (port UDP 138)

Description
Ce service permet d’échanger des messages en mode non connecté.
En-tête d’un paquet (en octets)
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 ...... 49 | 50 ...... 84 |
| Type de message | Flags | ID du datagramme | ID du datagramme | IP source | IP source | IP source | IP source | Port source | Port source | Longueur | Longueur | Offset du paquet | Offset du paquet | Nom de l’émetteur | Nom du destinataire |

### NetBIOS Session Service (port TCP 139)

Ce service permet d’échanger des messages en mode connecté jusqu’à 131 071 octets.

## Quelques commandes utiles

* nbtstat -a nomnetbios : affiche la table correspondant à ce nom netbios
* nbtstat -A 192.0.2.123 : affiche la table correspondant à cette adresse IP
* nbtstat -n : affiche la table locale
* nbtstat -r : affiche la table des noms résolus par le WINS et broadcast
* nslookup -S nomnetbios : idem sous UNIX