您好,欢迎访问三七文档
WindowsSDKSUP-4NetBIOS网络编程技术课程描述NetBIOS(NETworkBasicInput/OutputSystem,网络基本输入/输出系统)定义了一种软件接口以及在应用程序和连接介质之间提供通信接口的标准方法。它可以提供名字服务、会话服务和数据库服务,基于NetBIOS的比较典型的应用是获取远程计算机的Mac地址、名称和所在工作组等信息。本章将对NetBIOS网络编程技术进行介绍。本章知识点SUP-4.1NetBIOS协议及应用SUP-4.2NetBIOS开发接口SUP-4.3在程序中实现NBTSTAT命令的功能SUP-4.1NetBIOS协议及应用SUP-4.1.1NetBIOS协议SUP-4.1.2使用NBTSTAT命令SUP-4.1.1NetBIOS协议NetBIOS协议最初由IBM开发,微软公司在此基础上对该协议进行了完善,并在Windows上提供了对NetBIOS协议的支持。网络邻居功能就是基于NetBIOS协议的。在Windows中安装TCP/IP协议的同时就会安装NetBIOS协议。下面介绍一下在Windows2003中启用和配置NetBIOS协议的方法。配置NetBIOS右键单击桌面上的网络邻居图标,在弹出菜单中选择“属性”,打开“网络连接”窗口。右键单击“本地连接”图标,在弹出菜单中选择“属性”,打开“本地连接属性”对话框。配置NetBIOS选中“Internet协议(TCP/IP)”项,单击“属性”按钮,打开“Internet协议(TCP/IP)”属性对话框。单击“高级”按钮,打开“高级TCP/IP设置”对话框。单击“WINS”选项卡,可以对NetBIOS协议进行设置。1.LANA编号LANA(LANAdapter,LAN适配器)编号是NetBIOS进行网络编程的关键,它对应于网卡及传输协议的唯一组合。例如,假定某个工作站安装了两块网卡,以及两种具有NetBIOS能力的传输协议(例如TCP/IP和NetBEUI),那么将共有下面4个LANA编号:表示“TCP/IP—网卡1”对。表示“NetBEUI—网卡1”对。表示“TCP/IP—网卡2”对。表示“NetBEUI—网卡2”对。2.名字服务NetBIOS协议支持建立名字服务器,负责查找目标主机对应的IP地址,并赋予一个NetBIOS名称。名字服务提供的主要功能如下:添加名字,即注册一个NetBIOS名字。添加组名,即注册一个NetBIOS组名。删除名字,即取消一个NetBIOS名字和组名的注册。查询名字,即在网络中搜索NetBIOS名字。3.会话服务会话服务提供的主要功能如下:调用,即打开一个到远程NetBIOS名字的会话。侦听,即侦听其他程序的连接请求。挂起,即关闭一个会话。发送,即向会话对端的计算机发送一个数据包,并等待对方确认。无确认发送,即向会话对端的计算机发送一个数据包,但不需要对方确认。接收,即等待从会话对端发送的数据包到达。4.数据报服务数据报服务提供的主要功能如下:发送数据报,即向远程NetBIOS名字发送一个数据报。发送广播数据报,即向网络中所有NetBIOS名字发送数据报。接收数据报,即等待从发送数据报操作中到达的数据。接收广播数据报,即等待从发送广播数据报操作中到达的数据。在Windows中,如果安装了NetBIOS协议,则系统将自动开放下列端口:137端口,主要作用是在局域网中提供计算机的名称或IP地址查询服务。138端口,主要作用是提供NetBIOS环境下的计算机名浏览功能。139端口,主要作用是提供文件和打印机共享的功能。SUP-4.1.2使用NBTSTAT命令在Windows命令窗口中执行NBTSTAT命令,可以获取指定远程计算机的基本信息,包括Mac地址、计算机名和所属工作组等。NBTSTAT命令的格式如下:NBTSTAT[[-aRemoteName][-AIPaddress][-c][-n][-r][-R][-RR][-s][-S][interval]]NBTSTAT参数的具体说明参数说明-aRemoteName列出指定名称的远程机器的名称表,RemoteName表示指定的远程主机计算机名-AIPaddress列出指定IP地址的远程机器的名称表,IPaddress表示用点分法表示的IP地址-c列出远程计算机名称及其IP地址的NBT缓存-n列出本地的NetBIOS名称-r列出通过广播和经由WINS解析的名称-R清除和重新加载远程缓存名称表-RR将名称释放包发送到WINS,然后启动刷新-s列出将目标IP地址转换成计算机NetBIOS名称的会话表-S列出具有目标IP地址的会话表interval重新显示选定的统计、每次显示之间暂停的间隔秒数。按Ctrl+C停止重新显示统计实例NBTSTAT-A192.168.5.168NBTSTAT-aLEE-THINKPADSUP-4.2NetBIOS开发接口SUP-4.2.1NetBIOS操作SUP-4.2.2NCB结构体SUP-4.2.3其他常用NetBIOS结构体SUP-4.2.4Netbios()函数SUP-4.2.5获取LANA上的所有NetBIOS名字SUP-4.2.6获取网络适配器上的MAC地址SUP-4.2.1NetBIOS操作协议驱动程序对外公布NetBIOS接口,并将NetBIOS命令映射到协议驱动程序的内部命令。NetBIOS模拟器接收NetBIOS命令,将它们转换成TDI(TransportDriverInterface,传输驱动程序接口)调用,然后使用TDI接口将它们转发到传输驱动程序。在Windows2003、WindowsXP、Windows2000和WindowsNT操作系统中,NetBIOS操作的流程如下:SUP-4.2.2NCB结构体typedefstruct_NCB{UCHARncb_command;UCHARncb_retcode;UCHARncb_lsn;UCHARncb_num;PUCHARncb_buffer;WORDncb_length;UCHARncb_callname[NCBNAMSZ];UCHARncb_name[NCBNAMSZ];UCHARncb_rto;UCHARncb_sto;void(CALLBACK*ncb_post)(structNCB);UCHARncb_lana_num;UCHARncb_cmd_cplt;UCHARncb_reserve[X];HANDLEncb_event;}NCB,*PNCB;1.ncb_command命令编码可选值说明NCBACTION非标准NetBIOS3.0命令NCBADDGRNAME向本地名字表中添加一个组名,组名在网络中必须是唯一的NCBADDNAME向本地名字表中添加一个唯一的名字NCBASTAT获取本地或远程网络适配器的状态。如果指定了此编码,则成员变量_buffer指向填充了ADAPTER_STATUS结构体和NAME_BUFFER结构体数组的缓冲区NCBCALL打开与其他名字之间的会话NCBCANCEL取消之前挂起的命令NCBCHAINSEND向指定的会话伙伴发送两个数据缓冲区的内容NCBCHAINSENDNA向指定的会话伙伴发送两个数据缓冲区的内容,并且不等待对方确认NCBDELNAME从本地名字表中删除一个名字NCBDGRECV获取来自任意名字的数据包NCBDGRECVBC获取来自任意名字的广播数据包NCBDGSEND向指定名字发送数据包NCBDGSENDBC向局域网中的所有计算机发送广播数据包NCBENUM用于枚举LANA编号。如果指定此编码,则成员变量ncb_buffer指定填充了LANA_ENUM结构体的缓冲区。NCBENUM不是标准的NetBIOS3.0命令NCBFINDNAME决定指定名字在网络中的位置。如果指定此编码,则成员变量_buffer指定填充了FIND_NAME_HEADER结构体和FIND_NAME_BUFFER结构体的缓冲区NCBHANGUP关闭指定的会话NCBLANSTALERT只对WindowsServer2003、WindowsXP、Windows2000和WindowsNT等操作系统有效,提示用户持续时间在1分钟以上的局域网故障NCBLISTEN允许一个会话可以被其他名字打开NCBRECV从指定的会话伙伴获取数据NCBRECVANY从指定名字对应的会话中获取数据NCBRESET复位局域网网络适配器NCBSEND向指定的会话伙伴发送数据NCBSENDNA向指定的会话伙伴发送数据,并且不等待对方确认NCBSSTAT获取会话的状态。如果指定了此参数,则成员变量_buffer指向填充了SESSION_HEADER和SESSION_BUFFER结构体的缓冲区NCBTRACE激活或取消NCB跟踪。此命令目前不被支持NCBUNLINK断开一个网络适配器的连接。此命令只为与之前版本的NetBIOS兼容而提供,但在Windows中无效2.ncb_retcode返回编码可选值说明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成员变量ncb_name中不允许通配符NRC_INUSE名字已经在远程适配器上使用NRC_NAMERR名字已被删除NRC_SABORT会话非正常结束NRC_NAMCONF检测到名字冲突NRC_IFBUSY接口忙NRC_TOOMANY命令太多,应用程序将在稍后重试命令NRC_BRIDGE成员变量ncb_lana_num没有指定有效的网络编号NRC_CANOCCR执行取消操作后,命令已经结束NRC_CANCELNCBCANCEL命令无效,命令并未取消NRC_DUPENV名字已经被另一个本地进程占用NRC_ENVNOTDEF环境没有被定义,因此必须执行一个重置命令NRC_OSRESNOTAV操作系统资源被耗光,该命令稍候会重试NRC_MAXAPPS应用程序数量超过规定的最大值NRC_NOSAPS没有对NetBIOS有效的服务访问点(SAP,ServiceAccesPoints)NRC_NORESOURCES请求的资源无效NRC_INVADDRESSNCB地址无效NRC_INVDDIDNCBDDID无效NRC_LOCKFAIL尝试锁定用户区域失败NRC_OPENERR当设备驱动器执行打开操作时发生错误。错误编码并不在NetBIOS3.0中定义NRC_SYSTEM发生系统错误NRC_PENDING异步操作并未结束NCB结构体其他成员变量3.ncb_lsn表示本地会话编号。在指定环境中此编号唯一标识一个会话。调用Netbios()函数成功执行了NCBCALL命令后返回此编号。4.ncb_num指定本地网络名字编号。调用Netbios()函数成功执行了NCBADDNAME或者NCBADDGRNAME命令后返回此编号。此编号在所有数据包命令和NCBRECVANY命令中使用。5.ncb_buffer指向消息缓冲区。可以使用表SUP-4.4中的命令访问消息缓冲区。命令说明NCBSEND发送消息NCBRECV接收消息NCBSSTAT接收请求状态信息NCB结构体其他成员变量6.ncb_length指定消息缓冲区的大小,单位为字节。
本文标题:NetBIOS
链接地址:https://www.777doc.com/doc-305 .html