首先提到的是NetBios,NetBios是Network Basic Input/Output System的缩写,提供了一种允许局域网内不同电脑能够通信的功能。严格来说,NetBios是一套API,而并不是一个网络协议。
如今,我们使用的网络协议栈是TCP/IP协议栈,在Windows操作系统上,NetBios运行在NetBios over TCP/IP的协议上,NetBios over TCP/IP(简称NBT或者NetBT)是一个网络协议,允许以前使用NetBios API的应用程序能够在现代的TCP/IP网络中。如下图:
再说SMB,SMB是Server Message Block的缩写,作为一个应用层的协议,主要提供一个网络中文件共享、文件打印和进程间通信等功能,如今SMB的使用主要存在于Windows系统中。
SMB协议是运行在会话层之上的网络层协议,有两种运行方式,第一种通过NetBios API,如下图:
使用的是UDP的137和138端口以及TCP的137和139的端口。
第二种是直接运行在TCP和UDP协议之上,使用的是445端口,可以称为"Direct hosting of SMB over TCP/IP"。
总结一下,Windows主机上文件打印、文件共享等都通过SMB协议来实现,而SMB通过两种方式运行在139和445端口之上。我们可以通过手段使得SMB只通过第二种方式运行,而不通过NetBios API。本地连接属性àInternet协议版本4属性à高级àWINSà禁用TCP/IP上的NetBios.这样的话SMB就只运行在445端口之上了。
禁用前:
禁用后: