NetBIOS
。 在Windows中,如果安装了NetBIOS协议,则系统将自动开放下列 端口: 137端口,主要作用是在局域网中提供计算机的名称或IP地址
查询服务。 138端口,主要作用是提供NetBIOS环境下的计算机名浏览功能
。 139端口,主要作用是提供文件和打印机共享的功能。
SUP-4.1.2 使用NBTSTAT命令
向本地名字表中添加一个唯一的名字 获取本地或远程网络适配器的状态。如果指定了此编码,则成员变量_buffer指向填充了ADAPTER_STATUS结 构体和NAME_BUFFER结构体数组的缓冲区 打开与其他名字之间的会话 取消之前挂起的命令 向指定的会话伙伴发送两个数据缓冲区的内容
向指定的会话伙伴发送两个数据缓冲区的内容,并且不等待对方确认
在Windows 2003、Windows XP、Windows 2000和 Windows NT操作系统中, NetBIOS操作的流程如下:
SUP-4.2.2 NCB结构体
typedef struct _NCB { UCHAR ncb_command; UCHAR ncb_retcode; UCHAR ncb_lsn; UCHAR ncb_num; PUCHAR ncb_buffer; WORD ncb_length; UCHAR ncb_callname[NCBNAMSZ]; UCHAR ncb_name[NCBNAMSZ]; UCHAR ncb_rto; UCHAR ncb_sto; void (CALLBACK *ncb_post)(struct NCB); UCHAR ncb_lana_num; UCHAR ncb_cmd_cplt; UCHAR ncb_reserve[X]; HANDLE ncb_event;
单击“高级”按钮,打开“高级TCP/IP设置”对话框。单击 “WINS”选项卡,可以对NetBIOS协议进行设置。
1.LANA编号
LANA(LAN Adapter,LAN适配器)编号是NetBIOS进行网络编程的关键 ,它对应于网卡及传输协议的唯一组合。例如,假定某个工作站安装了 两块网卡,以及两种具有NetBIOS能力的传输协议(例如TCP/IP和 NetBEUI),那么将共有下面4个LANA编号:
的注册。 查询名字,即在网络中搜索NetBIOS名字。
3.会话服务
会话服务提供的主要功能如下: 调用,即打开一个到远程NetBIOS名字的会话。 侦听,即侦听其他程序的连接请求。 挂起,即关闭一个会话。 发送,即向会话对端的计算机发送一个数据包,并等待对方确认
。 无确认发送,即向会话对端的计算机发送一个数据包,但不需要
应用程序数量超过规定的最大值 没有对NetBIOS有效的服务访问点(SAP,Service Acces Points) 请求的资源无效 NCB地址无效 NCB DDID无效 尝试锁定用户区域失败 当设备驱动器执行打开操作时发生错误。错误编码并不在NetBIOS 3.0中定义 发生系统错误 异步操作并未结束
列出本地的NetBIOS名称
列出通过广播和经由WINS解析的名称
清除和重新加载远程缓存名称表
将名称释放包发送到WINS,然后启动刷新
列出将目标IP地址转换成计算机NetBIOS名称的会话表
列出具有目标IP地址的会话表
重新显示选定的统计、每次显示之间暂停的间隔秒数。按Ctrl+C停止重新显 示统计
实例
Windows SDK
SUP-4 NetBIOS网络编程技术
课程描述
NetBIOS(NETwork Basic Input/Output System,网 络基本输入/输出系统)定 义了一种软件接口以及在 应用程序和连接介质之间 提供通信接口的标准方法 。它可以提供名字服务、 会话服务和数据库服务, 基于NetBIOS的比较典型的 应用是获取远程计算机的 Mac地址、名称和所在工作 组等信息。本章将对 NetBIOS网络编程技术进行 介绍。
配置NetBIOS
右键单击桌面上的网络邻居图标,在弹出菜单中选择“属性”, 打开“网络连接”窗口。
右键单击“本地连接”图标,在弹出菜单中选择“属性”,打开 “本地连接属性”对话框。
配置NetBIOS
选中“Internet协议(TCP/IP)”项,单击“属性”按钮,打开 “Internet协议(TCP/IP)”属性对话框。
表示“TCP/IP—网卡1”对。 表示“NetBEUI—网卡1”对。 表示“TCP/IP—网卡2”对。 表示“NetBEUI—网卡2”对。
2.名字服务
NetBIOS协议支持建立名字服务器,负责查找 目标主机对应的IP地址,并赋予一个NetBIOS 名称。名字服务提供的主要功能如下: 添加名字,即注册一个NetBIOS名字。 添加组名,即注册一个NetBIOS组名。 删除名字,即取消一个NetBIOS名字和组名
从本地名字表中删除一个名字 获取来自任意名字的数据包 获取来自任意名字的广播数据包 向指定名字发送数据包 向局域网中的所有计算机发送广播数据包 用于枚举LANA编号。如果指定此编码,则成员变量 ncb_buffer指定填充了LANA_ENUM结构体的缓冲区。 NCBENUM不是标准的NetBIOS 3.0命令 决定指定名字在网络中的位置。如果指定此编码,则成员变量_buffer指定填充了FIND_NAME_HEADER结构体 和FIND_NAME_BUFFER结构体的缓冲区 关闭指定的会话 只对Windows Server 2003、Windows XP、Windows 2000和Windows NT等操作系统有效,提示用户持续时间 在1分钟以上的局域网故障 允许一个会话可以被其他名字打开 从指定的会话伙伴获取数据 从指定名字对应的会话中获取数据 复位局域网网络适配器 向指定的会话伙伴发送数据 向指定的会话伙伴发送数据,并且不等待对方确认 获取会话的状态。如果指定了此参数,则成员变量_buffer指向填充了SESSION_HEADER和SESSION_BUFFER结 构体的缓冲区 激活或取消NCB跟踪。此命令目前不被支持 断开一个网络适配器的连接。此命令只为与之前版本的NetBIOS兼容而提供,但在Windows中无效
返回编码可选值 NRC_GOODRET NRC_BUFLEN NRC_ILLCMD NRC_CMDTMO NRC_INCOMP NRC_BADDR NRC_SNUMOUT NRC_NORES NRC_SCLOSED NRC_CMDCAN NRC_DUPNAME NRC_NAMTFUL NRC_ACTSES NRC_LOCTFUL NRC_REMTFUL NRC_ILLNN NRC_NOCALL NRC_NOWILD NRC_INUSE NRC_NAMERR NRC_SABORT NRC_NAMCONF NRC_IFBUSY NRC_TOOMANY NRC_BRIDGE NRC_CANOCCR NRC_CANCEL NRC_DUPENV NRC_ENVNOTDEF NRC_OSRESNOTAV
在Windows命令窗口中执行NBTSTAT命令,可以获取指 定远程计算机的基本信息,包括Mac地址、计算机名和 所属工作组等。NBTSTAT命令的格式如下:
NBTSTAT [ [-a RemoteName] [-A IP address] [-c] [n]
[-r] [-R] [-RR] [-s] [-S] [interval] ]
NBTSTAT参数的具体说明
参数 -a RemoteName
-A IP address
-c -n -r -R -RR -s -S interval
说明
列出指定名称的远程机器的名称表,RemoteName表示指定的远程主机计算机 名 列出指定 IP 地址的远程机器的名称表,IP address表示用点分法表示的IP 地址 列出远程计算机名称及其IP地址的 NBT 缓存
NCBFINDNAME
NCBHANGUP NCBLANSTALERT
NCBLISTEN NCBRECV NCBRECVANY NCBRESET NCBSEND NCBSENDNA NCBSSTAT
NCBTRACE NCBUNLINK
1.ncb_command
说明
非标准NetBIOS 3.0命令 向本地名字表中添加一个组名,组名在网络中必须是唯一的
NBTSTAT -A 192.168.5.168 NBTSTAT -a LEE-THINKPAD
SUP-4.2 NetBIOS开发接口
SUP-4.2.1 SUP-4.2.2 SUP-4.2.3 SUP-4.2.4 SUP-4.2.5 字 SUP-4.2.6
NetBIOS操作 NCB结构体 其他常用NetBIOS结构体 Netbios()函数 获取LANA上的所有NetBIOS名
NetBIOS协议最初由IBM开发,微软公司在此基础上 对该协议进行了完善,并在Windows上提供了对 NetBIOS协议的支持。网络邻居功能就是基于 NetBIOS协议的。在Windows中安装TCP/IP协议的 同时就会安装NetBIOS协议。下面介绍一下在 Windows 2003中启用和配置NetBIOS协议的方法。
NRC_MAXAPPS NRC_NOSAPS NRC_NORESOURCES NRC_INVADDRESS NRC_INVDDID NRC_LOCKFAIL NRC_OPENERR NRC_SYSTEM NRC_PENDING
2.ncb_retcode
说明 操作成功 提供了无效的缓冲区长度 提供了无效的命令 命令超时 消息不完整,应用程序正在执行其他命令 缓冲区地址无效 会话编号越界 没有有效的资源 会话已被关闭 命令被取消 在本地名字表中存在相同的名字 名字表已满 命令已执行完成,指定名字拥有活动的会话,并且不再注册 本地会话表已满 远端会话表已满,打开会话的请求被拒绝 指定了无效的名称编号 系统没有发现调用的名字 成员变量ncb_name中不允许通配符 名字已经在远程适配器上使用 名字已被删除 会话非正常结束 检测到名字冲突 接口忙 命令太多,应用程序将在稍后重试命令 成员变量ncb_lana_num没有指定有效的网络编号 执行取消操作后,命令已经结束 NCBCANCEL命令无效,命令并未取消 名字已经被另一个本地进程占用 环境没有被定义,因此必须执行一个重置命令 操作系统资源被耗光,该命令稍候会重试