第01章 NetBIOS
第二个函数是 ResetAll 。 NetBIOS 程序必须重设将要 使用的每个LANA编号。函数的第一个参数是LANA_ENUM 结构。重设只要求函数将 ncb_command设为NCBRESET, 并将ncb_lana_num设为它需要重设的LANA。
网络编程—第1章 NetBIOS 主讲:王新祥
第16个字节 名字类型
<00> <20> <00> <1C> <1B> <03> <1C> <00> <BF> 唯一 唯一 成组 成组 唯一 唯一务名 域名 域控制器名 主控浏览器名 发信者名 Internet信息服务器组名 Internet信息服务器唯一名 网络监视器名字
网络编程—第1章 NetBIOS 主讲:王新祥
17/49
1.3 常规NetBIOS例程
1.3.1 会话服务器:异步回调模型 1.3.2 会话服务器:异步事件模型 1.3.3 NetBIOS会话客户机
网络编程—第1章 NetBIOS
主讲:王新祥
18/49
1.3 常规NetBIOS例程
大多数服务器都要为多个客户提供服务,采用异步
网络编程—第1章 NetBIOS 主讲:王新祥
15/49
1.2 NetBIOS编程基础
ncb_length:指定消息缓冲区的长度 (字节)。 ncb_callname:指定远程端应用程序的名字。 ncb_name:指定应用程序的名字。 ncb_rto:指定接收操作的超时时间。 ncb_sto:设定发送操作的超时期限。该值应为500 毫秒的整数倍数。若为0,表示无超时限制。该值是为 NCBCALL和NCBLISTEN命令设臵的,它们会影响后续的 NCBSEND和NCBCHAINSEND命令。 ncb_post :指定异步命令完成后要调用的后例程 (post routine) 的地址。函数定义为: void CALLBACK PostRoutine( PNCB pncb ); 其中,pncb指向已完成命令的网络控制块。
12/49
1.2 NetBIOS编程基础
NetBIOS API的设臵: UCHAR Netbios ( PNCB pNCB ); NetBIOS的所有函数声明、常数定义均放在 nb30.h头 文件内,需要连接的库是 netapi32.lib 。 pNCB 对应于指向 某个网络控制块 (NCB) 的指针。在NCB结构中,包含了 为执行NetBIOS命令所需的全部信息。 typedef struct _NCB { UCHAR ncb_command; UCHAR ncb_retcode; UCHAR ncb_lsn; UCHAR ncb_num;
只有部分协议实施了 NetBIOS 接口。 Microsoft TCP/IP 和 NetBEUI 在默认情况下提供了 NetBIOS 接口。此外,微 软提供的IPX/SPX版本也实现了NetBIOS接口。
NetBEUI不是“可路由”协议。但TCP/IP和IPX/SPX均 属于“可路由”协议。
网络编程—第1章 NetBIOS 主讲:王新祥
LANA 编号的范围通常为 0~9 ,除 LANA 0 代表默认 LANA之外,操作系统并不按固定的顺序分配编号。
网络编程—第1章 NetBIOS 主讲:王新祥
6/49
1.1.2 NetBIOS名字
一个NetBIOS名字的长度为16个字符。
在 Win32 环境中,针对每个可用的 LANA 编号,每个 进程都会为该 LANA 编号维持一张 NetBIOS 名字表。若为 LANA 0增添一个名字,意味着应用程序只能在LANA 0上 同客户机建立连接。
网络编程
王新祥
网络应用程序的开发始终是IT市场的主流!
第1章 NetBIOS
1.1 1.2 1.3 1.4 1.5 1.6 1.7 Microsoft NetBIOS NetBIOS编程基础 常规NetBIOS例程 数据报的工作原理 其他NetBIOS命令 平台问题 小结
第1章 NetBIOS
常用的NetBIOS组名后追加的默认的第16个字节中的 字符及其含义请参考电子教材表1-3。
网络编程—第1章 NetBIOS 主讲:王新祥
11/49
1.1.3 NetBIOS特性
NetBIOS提供了“面向连接”和“无连接”服务。
“面向连接”(“面向会话”) 服务允许两个客户机 之间建立一个会话(“虚拟回路”) —— 一种双向的通信 数据流。面向连接的服务可以确保两个端点之间的数据 能够准确无误地按顺序传送。
1.1.2 NetBIOS名字
不同 Microsoft 网络服务为唯一 NetBIOS 计算机名追加 的第16个字节的值与含义如下: <00> 工作站服务名。 通常,它对应于NetBIOS计算机名。 <03> 收发消息时采用的信使服务名。 WINS 服务器会将这个名字注册成 WINS 客户机 上的信使服务,并通常追加到计算机名的后 面以及当前登录到计算机的用户名的后面。 <1B> 域主控浏览器名。 用于标识主域控制器,并指出用什么客户机 和其他浏览器与域主控浏览器取得联系。
微软网络中的机器名就是NetBIOS名字。机器在启动
时会将自己的名字注册到本地的“Windows 互联网命名
服务器”(WINS) 。在 TCP/IP 网络中, WINS维护着 NetBIOS
名字和注册那个名字的IP地址。
“组名”的作用是能将数据同时发给多个接收者或
接收发给多个接收者的数据。组名主要用于多播,不必
网络编程—第1章 NetBIOS 主讲:王新祥
19/49
1.3 常规NetBIOS例程
typedef struct _LANA_ENUM { UCHAR length; UCHAR lana[MAX_LANA]; } LANA_ENUM; length成员指出本地机器有多少个 LANA编号。lana成 员代表由实际的 LANA 编号构成的一个数组。 length 的数 值即lana数组内元素的个数。
独一无二。
网络编程—第1章 NetBIOS 主讲:王新祥
8/49
1.1.2 NetBIOS名字
在NetBIOS名字中,第16个字符用于区分微软的网络 服务。使用 nbtstat 命令可获得在本地或远程计算机上注 册的NetBIOS名字的相关信息。
名 字
DAVEMAC1 DAVEMAC1 DAVEMACD DAVEMACD DAVEMACD DAVEMAC1 Inet~Services IS~DAVEMAC1 DAVEMAC1+++++++
每一个LANA能够添加名字的最大数量是254 (编号从 1到254,0和255由系统保留) 。但所有操作系统都设臵了 低于254的最大默认值 (可以修改) 。
NetBIOS名字有两种类型:唯一名字和组名。
网络编程—第1章 NetBIOS 主讲:王新祥
7/49
1.1.2 NetBIOS名字
“唯一名字”在同一网络上独一无二、不可同名。
NetBIOS 模型最适合。
程序清单1-1 — 常规NetBIOS例程。
在程序清单1-1中,LanaEnum函数列举指定系统上可
用的LANA编号。
一次成功的 NetBIOS 调用,会用当前机器上可用的
LANA 编 号 数 量以 及 各个 实 际的 LANA 编 号 填充 指 定的
LANA_ENUM结构。
网络编程—第1章 NetBIOS 主讲:王新祥
13/49
1.2 NetBIOS编程基础
PUCHAR ncb_buffer; WORD ncb_length; UCHAR ncb_callname[NCBNAMSZ]; UCHAR ncb_name[NCBNAMSZ]; UCHAR ncb_rto; UCHAR ncb_sto; void (*ncb_post) (struct _NCB *); UCHAR ncb_lana_num; UCHAR ncb_cmd_cplt; UCHAR ncb_reserve[10]; HANDLE ncb_event; } NCB;
“无连接”(“数据报”) 服务中,服务器并不将自 己注册到特定的名下,只是由客户机收集数据,然后将 其送入网络,事前不必建立任何连接。客户机会将数据 的目的地址定义成与服务器相应进程对应的 NetBIOS 名 字。数据报服务不能保证数据传输的可靠性与数据包的 传送顺序,但节省了建立连接所需的开销。
网络编程—第1章 NetBIOS 主讲:王新祥
网络编程—第1章 NetBIOS
主讲:王新祥
3/49
1.1 Microsoft NetBIOS
1.1.1 LANA编号 1.1.2 NetBIOS名字
1.1.3 NetBIOS特性
网络编程—第1章 NetBIOS
主讲:王新祥
4/49
1.1 Microsoft NetBIOS
两个 NetBIOS 应用程序要进行网络通信,两台机器 至少安装了一种两者通用的协议。例如,假定A机器只 安装了 TCP/IP ,而 B 机器只安装了 NetBEUI ,那么 A 、 B 机 器上的NetBIOS应用程序就无法进行通信。
NetBIOS (Network Basic Input/ Output System,网络基本 输入/输出系统) 是一种标准的应用程序编程接口 (API)。 NetBIOS 为网络通信定义了一套编程接口。 1985 年, IBM 创制了 NetBIOS 扩展用户接口 NetBEUI (NetBIOS Extended User Interface)。 本章介绍 NetBIOS 的基本知识,从 NetBIOS 的名字及 LANA (LAN Adapter —— Local Area Network Adapter) 编号开 始,讨论NetBIOS提供的基本服务。