[计算机软件及应用]NetBIOS.ppt

上传人:豆**** 文档编号:25052097 上传时间:2022-07-09 格式:PPT 页数:62 大小:480KB
返回 下载 相关 举报
[计算机软件及应用]NetBIOS.ppt_第1页
第1页 / 共62页
[计算机软件及应用]NetBIOS.ppt_第2页
第2页 / 共62页
点击查看更多>>
资源描述

《[计算机软件及应用]NetBIOS.ppt》由会员分享,可在线阅读,更多相关《[计算机软件及应用]NetBIOS.ppt(62页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、SUP-4 NetBIOS网络编程技术网络编程技术NetBIOSNetBIOS(NETwork Basic NETwork Basic Input/Output SystemInput/Output System,网,网络基本输入络基本输入/ /输出系统)定输出系统)定义了一种软件接口以及在义了一种软件接口以及在应用程序和连接介质之间应用程序和连接介质之间提供通信接口的标准方法提供通信接口的标准方法。它可以提供名字服务、。它可以提供名字服务、会话服务和数据库服务,会话服务和数据库服务,基于基于NetBIOSNetBIOS的比较典型的的比较典型的应用是获取远程计算机的应用是获取远程计算机的Mac

2、Mac地址、名称和所在工作地址、名称和所在工作组等信息。本章将对组等信息。本章将对NetBIOSNetBIOS网络编程技术进行网络编程技术进行介绍。介绍。本章知识点本章知识点SUP-4.1 NetBIOSSUP-4.1 NetBIOS协议及应用协议及应用SUP-4.2 NetBIOSSUP-4.2 NetBIOS开发接口开发接口SUP-4.3 SUP-4.3 在程序中实现在程序中实现NBTSTATNBTSTAT命令的功命令的功能能SUP-4.1 NetBIOS协议及应用协议及应用SUP-4.1.1 NetBIOSSUP-4.1.1 NetBIOS协议协议SUP-4.1.2 SUP-4.1.2

3、使用使用NBTSTATNBTSTAT命令命令SUP-4.1.1 NetBIOS协议协议pNetBIOS协议最初由协议最初由IBM开发,微软公司在此基础上开发,微软公司在此基础上对该协议进行了完善,并在对该协议进行了完善,并在Windows上提供了对上提供了对NetBIOS协议的支持。网络邻居功能就是基于协议的支持。网络邻居功能就是基于NetBIOS协议的。在协议的。在Windows中安装中安装TCP/IP协议的协议的同时就会安装同时就会安装NetBIOS协议。下面介绍一下在协议。下面介绍一下在Windows 2003中启用和配置中启用和配置NetBIOS协议的方法。协议的方法。 配置配置Net

4、BIOSp 右键单击桌面上的网络邻居图标,在弹出菜单中选择右键单击桌面上的网络邻居图标,在弹出菜单中选择“属性属性”,打开打开“网络连接网络连接”窗口窗口。p 右键单击右键单击“本地连接本地连接”图标,在弹出菜单中选择图标,在弹出菜单中选择“属性属性”,打开,打开“本地连接属性本地连接属性”对话框对话框。 配置配置NetBIOSp 选中选中“InternetInternet协议(协议(TCP/IPTCP/IP)”项,单击项,单击“属性属性”按钮,打开按钮,打开“InternetInternet协议(协议(TCP/IPTCP/IP)”属性对话框属性对话框。p 单击单击“高级高级”按钮,打开按钮,

5、打开“高级高级TCP/IPTCP/IP设置设置”对话框。单击对话框。单击“WINSWINS”选项卡,可以对选项卡,可以对NetBIOSNetBIOS协议进行设置协议进行设置。1LANA编号编号LANALANA(LAN AdapterLAN Adapter,LANLAN适配器)编号是适配器)编号是NetBIOSNetBIOS进行网络编程的关键进行网络编程的关键,它对应于网卡及传输协议的唯一组合。例如,假定某个工作站安,它对应于网卡及传输协议的唯一组合。例如,假定某个工作站安装了两块网卡,以及两种具有装了两块网卡,以及两种具有NetBIOSNetBIOS能力的传输协议(例如能力的传输协议(例如TC

6、P/IPTCP/IP和和NetBEUINetBEUI),那么将共有下面),那么将共有下面4 4个个LANALANA编号:编号:p 表示表示“TCP/IPTCP/IP网卡网卡1 1”对。对。p 表示表示“NetBEUINetBEUI网卡网卡1 1”对。对。p 表示表示“TCP/IPTCP/IP网卡网卡2 2”对。对。p 表示表示“NetBEUINetBEUI网卡网卡2 2”对。对。2名字服务名字服务NetBIOSNetBIOS协议支持建立名字服务器,负责查找协议支持建立名字服务器,负责查找目标主机对应的目标主机对应的IPIP地址,并赋予一个地址,并赋予一个NetBIOSNetBIOS名称。名字服

7、务提供的主要功能如名称。名字服务提供的主要功能如下:下:p添加名字,即注册一个添加名字,即注册一个NetBIOSNetBIOS名字。名字。p添加组名,即注册一个添加组名,即注册一个NetBIOSNetBIOS组名。组名。p删除名字,即取消一个删除名字,即取消一个NetBIOSNetBIOS名字和组名名字和组名的注册。的注册。p查询名字,即在网络中搜索查询名字,即在网络中搜索NetBIOSNetBIOS名字。名字。3会话服务会话服务会话服务提供的主要功能如下:会话服务提供的主要功能如下:p 调用,即打开一个到远程调用,即打开一个到远程NetBIOSNetBIOS名字的会话。名字的会话。p 侦听,

8、即侦听其他程序的连接请求。侦听,即侦听其他程序的连接请求。p 挂起,即关闭一个会话。挂起,即关闭一个会话。p 发送,即向会话对端的计算机发送一个数据包,并等待对方确认发送,即向会话对端的计算机发送一个数据包,并等待对方确认。p 无确认发送,即向会话对端的计算机发送一个数据包,但不需要无确认发送,即向会话对端的计算机发送一个数据包,但不需要对方确认。对方确认。p 接收,即等待从会话对端发送的数据包到达。接收,即等待从会话对端发送的数据包到达。4数据报服务数据报服务数据报服务提供的主要功能如下:数据报服务提供的主要功能如下:p 发送数据报,即向远程发送数据报,即向远程NetBIOSNetBIOS名

9、字发送一个数据报。名字发送一个数据报。p 发送广播数据报,即向网络中所有发送广播数据报,即向网络中所有NetBIOSNetBIOS名字发送数据报。名字发送数据报。p 接收数据报,即等待从发送数据报操作中到达的数据。接收数据报,即等待从发送数据报操作中到达的数据。p 接收广播数据报,即等待从发送广播数据报操作中到达的数据接收广播数据报,即等待从发送广播数据报操作中到达的数据。在在WindowsWindows中,如果安装了中,如果安装了NetBIOSNetBIOS协议,则系统将自动开放下列协议,则系统将自动开放下列端口:端口:p 137137端口,主要作用是在局域网中提供计算机的名称或端口,主要作

10、用是在局域网中提供计算机的名称或IPIP地址地址查询服务。查询服务。p 138138端口,主要作用是提供端口,主要作用是提供NetBIOSNetBIOS环境下的计算机名浏览功能环境下的计算机名浏览功能。p 139139端口,主要作用是提供文件和打印机共享的功能。端口,主要作用是提供文件和打印机共享的功能。SUP-4.1.2 使用使用NBTSTAT命令命令p 在在WindowsWindows命令窗口中执行命令窗口中执行NBTSTATNBTSTAT命令,可以获取指命令,可以获取指定远程计算机的基本信息,包括定远程计算机的基本信息,包括MacMac地址、计算机名和地址、计算机名和所属工作组等。所属工

11、作组等。NBTSTATNBTSTAT命令的格式如下:命令的格式如下:NBTSTAT -a RemoteName -A IP address -c -NBTSTAT -a RemoteName -A IP address -c -nn -r -R -RR -s -S interval -r -R -RR -s -S interval NBTSTAT参数的具体说明参数的具体说明参参 数数说说 明明-a RemoteName列出指定名称的远程机器的名称表,RemoteName表示指定的远程主机计算机名-A IP address列出指定 IP 地址的远程机器的名称表,IP address表示用点分法表

12、示的IP地址-c列出远程计算机名称及其IP地址的 NBT 缓存-n列出本地的NetBIOS名称-r列出通过广播和经由WINS解析的名称-R清除和重新加载远程缓存名称表-RR将名称释放包发送到WINS,然后启动刷新-s列出将目标IP地址转换成计算机NetBIOS名称的会话表-S列出具有目标IP地址的会话表interval重新显示选定的统计、每次显示之间暂停的间隔秒数。按Ctrl+C停止重新显示统计实例实例p NBTSTAT -A 192.168.5.168NBTSTAT -A 192.168.5.168p NBTSTAT -a LEE-THINKPADNBTSTAT -a LEE-THINKPA

13、DSUP-4.2 NetBIOS开发接口开发接口SUP-4.2.1 NetBIOSSUP-4.2.1 NetBIOS操作操作SUP-4.2.2 NCBSUP-4.2.2 NCB结构体结构体SUP-4.2.3 SUP-4.2.3 其他常用其他常用NetBIOSNetBIOS结构体结构体SUP-4.2.4 Netbios()SUP-4.2.4 Netbios()函数函数SUP-4.2.5 SUP-4.2.5 获取获取LANALANA上的所有上的所有NetBIOSNetBIOS名名字字SUP-4.2.6 SUP-4.2.6 获取网络适配器上的获取网络适配器上的MACMAC地址地址SUP-4.2.1

14、NetBIOS操作操作p 协议驱动程序对外公布协议驱动程序对外公布NetBIOSNetBIOS接口,并将接口,并将NetBIOSNetBIOS命令映射到协议驱动程序的命令映射到协议驱动程序的内部命令。内部命令。NetBIOSNetBIOS模拟器模拟器接收接收NetBIOSNetBIOS命令,将它们命令,将它们转换成转换成TDITDI(Transport Transport Driver InterfaceDriver Interface,传输驱,传输驱动程序接口)调用,然后使动程序接口)调用,然后使用用TDITDI接口将它们转发到传接口将它们转发到传输驱动程序。输驱动程序。p 在在Window

15、s 2003Windows 2003、Windows Windows XPXP、Windows 2000Windows 2000和和Windows NTWindows NT操作系统中,操作系统中,NetBIOSNetBIOS操作的流程操作的流程如下:如下:SUP-4.2.2 NCB结构体结构体typedef struct _NCB typedef struct _NCB UCHAR ncb_command; UCHAR ncb_command; UCHAR ncb_retcode; UCHAR ncb_retcode; UCHAR ncb_lsn; UCHAR ncb_lsn; UCHAR n

16、cb_num; UCHAR ncb_num; PUCHAR ncb_buffer; PUCHAR ncb_buffer; WORD ncb_length; WORD ncb_length; UCHAR ncb_callnameNCBNAMSZ; UCHAR ncb_callnameNCBNAMSZ; UCHAR ncb_nameNCBNAMSZ; UCHAR ncb_nameNCBNAMSZ; UCHAR ncb_rto; UCHAR ncb_rto; UCHAR ncb_sto; UCHAR ncb_sto; void (CALLBACK void (CALLBACK * *ncb_post

17、)(struct NCB);ncb_post)(struct NCB); UCHAR ncb_lana_num; UCHAR ncb_lana_num; UCHAR ncb_cmd_cplt; UCHAR ncb_cmd_cplt; UCHAR ncb_reserveX; UCHAR ncb_reserveX; HANDLE ncb_event; HANDLE ncb_event;NCB, NCB, * *PNCB;PNCB;1ncb_command命令编码可选值命令编码可选值说说 明明NCBACTION非标准NetBIOS 3.0命令NCBADDGRNAME向本地名字表中添加一个组名,组名在

18、网络中必须是唯一的NCBADDNAME向本地名字表中添加一个唯一的名字NCBASTAT获取本地或远程网络适配器的状态。如果指定了此编码,则成员变量_buffer指向填充了ADAPTER_STATUS结构体和NAME_BUFFER结构体数组的缓冲区NCBCALL打开与其他名字之间的会话NCBCANCEL取消之前挂起的命令NCBCHAINSEND向指定的会话伙伴发送两个数据缓冲区的内容NCBCHAINSENDNA向指定的会话伙伴发送两个数据缓冲区的内容,并且不等待对方确认NCBDELNAME从本地名字表中删除一个名字NCBDGRECV获取来自任意名字的数据包NCBDGRECVBC获取来自任意名字的

19、广播数据包NCBDGSEND向指定名字发送数据包NCBDGSENDBC向局域网中的所有计算机发送广播数据包NCBENUM用于枚举LANA编号。如果指定此编码,则成员变量ncb_buffer指定填充了LANA_ENUM结构体的缓冲区。NCBENUM不是标准的NetBIOS 3.0命令NCBFINDNAME决定指定名字在网络中的位置。如果指定此编码,则成员变量_buffer指定填充了FIND_NAME_HEADER结构体和FIND_NAME_BUFFER结构体的缓冲区NCBHANGUP关闭指定的会话NCBLANSTALERT只对Windows Server 2003、Windows XP、Wind

20、ows 2000和Windows NT等操作系统有效,提示用户持续时间在1分钟以上的局域网故障NCBLISTEN允许一个会话可以被其他名字打开NCBRECV从指定的会话伙伴获取数据NCBRECVANY从指定名字对应的会话中获取数据NCBRESET复位局域网网络适配器NCBSEND向指定的会话伙伴发送数据NCBSENDNA向指定的会话伙伴发送数据,并且不等待对方确认NCBSSTAT获取会话的状态。如果指定了此参数,则成员变量_buffer指向填充了SESSION_HEADER和SESSION_BUFFER结构体的缓冲区NCBTRACE激活或取消NCB跟踪。此命令目前不被支持NCBUNLINK断开

21、一个网络适配器的连接。此命令只为与之前版本的NetBIOS兼容而提供,但在Windows中无效2ncb_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_

22、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没有指定有效的网络编号N

23、RC_CANOCCR执行取消操作后,命令已经结束NRC_CANCELNCBCANCEL命令无效,命令并未取消NRC_DUPENV名字已经被另一个本地进程占用NRC_ENVNOTDEF环境没有被定义,因此必须执行一个重置命令NRC_OSRESNOTAV操作系统资源被耗光,该命令稍候会重试NRC_MAXAPPS应用程序数量超过规定的最大值NRC_NOSAPS没有对NetBIOS有效的服务访问点(SAP,Service Acces Points)NRC_NORESOURCES请求的资源无效NRC_INVADDRESSNCB地址无效NRC_INVDDIDNCB DDID无效NRC_LOCKFAIL尝试

24、锁定用户区域失败NRC_OPENERR当设备驱动器执行打开操作时发生错误。错误编码并不在NetBIOS 3.0中定义NRC_SYSTEM发生系统错误NRC_PENDING异步操作并未结束NCB结构体其他成员变量结构体其他成员变量3 3ncb_lsnncb_lsn表示本地会话编号。在指定环境中此编号唯一标识一个会话。调用表示本地会话编号。在指定环境中此编号唯一标识一个会话。调用Netbios()Netbios()函数成函数成功执行了功执行了NCBCALLNCBCALL命令后返回此编号。命令后返回此编号。4 4ncb_numncb_num指定本地网络名字编号。调用指定本地网络名字编号。调用Netb

25、ios()Netbios()函数成功执行了函数成功执行了NCBADDNAMENCBADDNAME或者或者NCBADDGRNAMENCBADDGRNAME命令后返回此编号。此编号在所有数据包命令和命令后返回此编号。此编号在所有数据包命令和NCBRECVANYNCBRECVANY命令中使用命令中使用。5 5ncb_bufferncb_buffer指向消息缓冲区。可以使用表指向消息缓冲区。可以使用表SUP-4.4SUP-4.4中的命令访问消息缓冲区。中的命令访问消息缓冲区。命命 令令说说 明明NCBSEND发送消息NCBRECV接收消息NCBSSTAT接收请求状态信息NCB结构体其他成员变量结构体其

26、他成员变量6 6ncb_lengthncb_length指定消息缓冲区的大小,单位为字节。对于接收命令,此成员变量由指定消息缓冲区的大小,单位为字节。对于接收命令,此成员变量由Netbios()Netbios()函数设置,表示接收到的字节数函数设置,表示接收到的字节数。如果缓冲区长度不正确,则如果缓冲区长度不正确,则Netbios()Netbios()函数返回函数返回NRC_BUFLENNRC_BUFLEN错误编码。错误编码。SUP-4.ncb_callnameSUP-4.ncb_callname指定远端应用程序的名字。指定远端应用程序的名字。8 8ncb_namencb_name指定应用程序

27、可以识别的名字。指定应用程序可以识别的名字。9 9ncb_rtoncb_rto指定会话执行接收操作的超时时间。将此成员变量指定为指定会话执行接收操作的超时时间。将此成员变量指定为0 0,表示在执行,表示在执行NCBCALLNCBCALL和和NCBLISTENNCBLISTEN命令时没有超时。命令时没有超时。超时会影响随后执行的超时会影响随后执行的NCBRECVNCBRECV命令。命令。1010ncb_stoncb_sto指定会话执行发送操作的超时时间。将此成员变量指定为指定会话执行发送操作的超时时间。将此成员变量指定为0 0,表示在执行,表示在执行NCBCALLNCBCALL和和NCBLIST

28、ENNCBLISTEN命令时没有超时。命令时没有超时。超时会影响随后执行的超时会影响随后执行的NCBSENDNCBSEND和和NCBCHAINSENDNCBCHAINSEND命令。命令。1111ncb_postncb_post指定异步命令完成后需调用的例程地址。指定异步命令完成后需调用的例程地址。1212ncb_lana_numncb_lana_num指定指定LANALANA编号。编号。1313ncb_cmd_cpltncb_cmd_cplt指定命令完成标识。指定命令完成标识。1414ncb_reservencb_reserve保留字段,必须为保留字段,必须为0 0。1515ncb_event

29、ncb_event指定事件对象的句柄。当执行异步命令时,事件对象被设置为未受信状态;当异步命令完成后,事件对象被设置指定事件对象的句柄。当执行异步命令时,事件对象被设置为未受信状态;当异步命令完成后,事件对象被设置为受信状态,这样就可以执行对应的事件处理程序了。为受信状态,这样就可以执行对应的事件处理程序了。SUP-4.2.3 其他常用其他常用NetBIOS结构体结构体1 1LANA_ENUMLANA_ENUM结构体结构体2 2ADAPTER_STATUS结构体结构体3 3NAME_BUFFERNAME_BUFFER结构体结构体4 4ASTATASTAT结构体结构体1LANA_ENUM结构体结

30、构体p LANA_ENUMLANA_ENUM结构体中包含当前逻辑网络适配器的数量。当一个结构体中包含当前逻辑网络适配器的数量。当一个物理网络适配器绑定到一个网络协议时,就对应一个逻辑网物理网络适配器绑定到一个网络协议时,就对应一个逻辑网络适配器。执行络适配器。执行NCBNCB命令命令NCBENUMNCBENUM可以向可以向LANA_ENUMLANA_ENUM结构体中填结构体中填充逻辑网络适配器的个数和逻辑网络适配器编号,此时充逻辑网络适配器的个数和逻辑网络适配器编号,此时NCBNCB结结构体中的构体中的ncb_bufferncb_buffer成员变量指向成员变量指向LANA_ENUMLANA_

31、ENUM结构体。结构体。LANA_ENUMLANA_ENUM结构体的定义代码如下:结构体的定义代码如下: typedef struct _LANA_ENUM typedef struct _LANA_ENUM UCHAR length; UCHAR length; UCHAR lanaMAX_LANA; UCHAR lanaMAX_LANA;LANA_ENUM, LANA_ENUM, * *PLANA_ENUM;PLANA_ENUM; 参数说明如下:参数说明如下:p lengthlength,系统中包含的逻辑网络适配器数量。,系统中包含的逻辑网络适配器数量。p lanaMAX_LANAlana

32、MAX_LANA,系统中包含的逻辑网络适配器编号数组。,系统中包含的逻辑网络适配器编号数组。2ADAPTER_STATUS结构体结构体pADAPTER_STATUSADAPTER_STATUS结构体中包含网络适配器的信结构体中包含网络适配器的信息。息。NCBNCB结构体的结构体的ncb_bufferncb_buffer成员变量指定该成员变量指定该结构体。通常,结构体。通常,ADAPTER_STATUSADAPTER_STATUS结构体的后面结构体的后面跟着很多跟着很多NAME_BUFFERNAME_BUFFER结构体。结构体。ADPATER_STATUS结构体的定义代码如下:结构体的定义代码如

33、下:typedefstruct_ADAPTER_STATUSUCHARadapter_address6;UCHARrev_major;UCHARreserved0;UCHARadapter_type;UCHARrev_minor;WORDduration;WORDfrmr_recv;WORDfrmr_xmit;WORDiframe_recv_err;WORDxmit_aborts;DWORDxmit_success;DWORDrecv_success; WORD iframe_xmit_err; WORD recv_buff_unavail; WORD t1_timeouts; WORD ti

34、_timeouts; DWORD reserved1; WORD free_ncbs; WORD max_cfg_ncbs; WORD max_ncbs; WORD xmit_buf_unavail; WORD max_dgram_size; WORD pending_sess; WORD max_cfg_sess; WORD max_sess; WORD max_sess_pkt_size; WORD name_count; ADAPTER_STATUS, *PADAPTER_STATUS; ADAPTER_STATUS结构体结构体参数说明参数说明padapter_addressadapte

35、r_address,指定网络适配器的地址。,指定网络适配器的地址。prev_majorrev_major,指定发布软件的主版本号。例如,如果发布版本号为,指定发布软件的主版本号。例如,如果发布版本号为IBM NetBIOS 3.xIBM NetBIOS 3.x,则,则rev_majorrev_major的值为的值为3 3。preserved0reserved0,保留字段,始终为,保留字段,始终为0 0。padapter_typeadapter_type,指定网络适配器的类型。如果是令牌环适配器,则该值为,指定网络适配器的类型。如果是令牌环适配器,则该值为0 xFF0 xFF;如果是以太网适配器

36、,则;如果是以太网适配器,则该值为该值为0 xFE0 xFE。prev_minorrev_minor,指定发布软件的副版本号。例如,如果发布版本号为,指定发布软件的副版本号。例如,如果发布版本号为IBM NetBIOS 3.0IBM NetBIOS 3.0,则,则rev_minorrev_minor的值为的值为0 0。pdurationduration,指定报告的时间周期,单位为分钟。,指定报告的时间周期,单位为分钟。pfrmr_recvfrmr_recv,指定接收到的,指定接收到的FRMRFRMR(帧拒绝)帧数量。(帧拒绝)帧数量。pfrmr_xmitfrmr_xmit,指定传送的,指定传送

37、的FRMRFRMR帧数量。帧数量。piframe_recv_erriframe_recv_err,指定接收到的错误帧数量。,指定接收到的错误帧数量。pxmit_abortsxmit_aborts,指定终止传输的包数量。,指定终止传输的包数量。pxmit_successxmit_success,指定成功传输的包数量。,指定成功传输的包数量。precv_successrecv_success,指定成功接收的包数量。,指定成功接收的包数量。piframe_xmit_erriframe_xmit_err,指定传输的错误帧数量。,指定传输的错误帧数量。precv_buff_unavailrecv_buf

38、f_unavail,指定缓冲区无法为远程计算机提供服务的次数。,指定缓冲区无法为远程计算机提供服务的次数。pt1_timeoutst1_timeouts,指定,指定DLCDLC(Data Link ControlData Link Control,数据链路控制),数据链路控制) T1 T1计时器超时的次数。计时器超时的次数。pti_timeoutsti_timeouts,指定,指定titi非活动计时器超时的次数。非活动计时器超时的次数。t1t1计时器用于检测断开的连接。计时器用于检测断开的连接。preserved1reserved1,保留字段,始终为,保留字段,始终为0 0。pfree_ncb

39、sfree_ncbs,指定当前空闲的网络控制块的数量。,指定当前空闲的网络控制块的数量。pmax_dgram_sizemax_dgram_size,指定数据包的最大大小,该值至少为,指定数据包的最大大小,该值至少为512512字节。字节。ppending sesspending sess,指定挂起会话的数量。,指定挂起会话的数量。pmax_cfg_sessmax_cfg_sess,指定配置的最大挂起会话数量。,指定配置的最大挂起会话数量。pmax_sess_pkt_sizemax_sess_pkt_size,指定会话数据包的最大大小。,指定会话数据包的最大大小。pname_countname_

40、count,指定本地名字表中名字的数量。,指定本地名字表中名字的数量。3NAME_BUFFER结构体结构体p 结构体结构体NAME_BUFFERNAME_BUFFER中包含本地网络名字信息。当应用程序执行中包含本地网络名字信息。当应用程序执行NCBASTATNCBASTAT命令时,可以获取命令时,可以获取ADAPTER_STATUSADAPTER_STATUS结构体及其后面的结构体及其后面的NAME_BUFFERNAME_BUFFER结构体。结构体。NAME_BUFFERNAME_BUFFER结构体。结构体。typedef struct _NAME_BUFFER typedef struct

41、_NAME_BUFFER UCHAR nameNCBNAMSZ; UCHAR nameNCBNAMSZ; UCHAR name_num; UCHAR name_num; UCHAR name_flags; UCHAR name_flags;NAME_BUFFER, NAME_BUFFER, * *PNAME_BUFFER;PNAME_BUFFER;参数说明如下:参数说明如下:p namename,指定本地网络名字,该值对应,指定本地网络名字,该值对应NCBNCB结构体的结构体的ncb_namencb_name字段。字段。p name_numname_num,指定本地网络名字的数量,该值对应,指

42、定本地网络名字的数量,该值对应NCBNCB结构体的结构体的ncb_numncb_num字段。字段。p name_flagsname_flags,指定名字表条目的当前状态。,指定名字表条目的当前状态。4ASTAT结构体结构体p ASTATASTAT结构体用于描述网络适配器的状态和名字信息,定义代结构体用于描述网络适配器的状态和名字信息,定义代码如下:码如下:typedef structtypedef struct ADAPTER_STATUS adapt; ADAPTER_STATUS adapt; NAME_BUFFER NameBuff30; NAME_BUFFER NameBuff30;

43、ASTAT; ASTAT;p 参数参数adaptadapt表示网络适配器的状态信息,参数表示网络适配器的状态信息,参数NameBuffNameBuff表示网表示网络适配器中保存的本地网络名字信息。络适配器中保存的本地网络名字信息。SUP-4.2.4 Netbios()函数函数p Netbios()Netbios()函数用于解释和执行指定的网络控制块(函数用于解释和执行指定的网络控制块(NCBNCB),语法如下:),语法如下:UCHAR Netbios(UCHAR Netbios( _in PCNB _in PCNB pcnbpcnb););p 参数参数pcnbpcnb是指定是指定NCBNCB结

44、构体的指针,用于描述网络控制结构体的指针,用于描述网络控制块。块。p 如果执行同步请求命令,则函数的返回值为如果执行同步请求命令,则函数的返回值为NCBNCB结构体结构体的编码。该值也保存在的编码。该值也保存在NCBNCB结构体的结构体的ncb_retcodencb_retcode字段中字段中。异步请求的返回值有以下两种情况:异步请求的返回值有以下两种情况:(1 1)如果)如果Netbios()Netbios()返回时异步命令已经完成返回时异步命令已经完成,则返回值为,则返回值为NCBNCB结构体的编码,这与同步请结构体的编码,这与同步请求的返回值相同。求的返回值相同。(2 2)如果)如果Ne

45、tbios()Netbios()返回时异步命令尚未完成返回时异步命令尚未完成,则返回值为,则返回值为0 0。p如果如果pncbpncb参数中指定的地址无效,则返回参数中指定的地址无效,则返回NRC_BADNCBNRC_BADNCB。p如果如果NCBNCB结构体中结构体中ncb_lengthncb_length字段指定的缓冲字段指定的缓冲区长度不正确,或者缓冲区不允许执行写操区长度不正确,或者缓冲区不允许执行写操作,则返回作,则返回NRC_BUFLENNRC_BUFLEN。SUP-4.2.5 获取获取LANA上的所有上的所有NetBIOS名字名字【例【例SUP-4.1SUP-4.1】编写程序,向

46、本地名字表中添加一个名字】编写程序,向本地名字表中添加一个名字UNIQUENAMEUNIQUENAME,然,然后列出指定后列出指定LANA0LANA0中定义的所有中定义的所有NetBIOSNetBIOS名字。名字。第第1 1个名字是本地计算机名,第个名字是本地计算机名,第2 2个名字是本地计算机所属的工作组名,个名字是本地计算机所属的工作组名,最后一个名字是新添加的最后一个名字是新添加的NetBIOSNetBIOS名字。下面对本实例中的代码进行介绍名字。下面对本实例中的代码进行介绍。1引用的头文件和库文件引用的头文件和库文件#include stdafx.h#include stdafx.h#

47、include #include #include #include #include #include #include #include #pragma comment(lib, netapi32.lib)#pragma comment(lib, netapi32.lib)其中其中Nb30.hNb30.h是定义是定义NetBIOSNetBIOS结构体和函数的头文件,而结构体和函数的头文件,而netapi32.libnetapi32.lib则是则是NetBIOSNetBIOS编程所需要的静态库文件。编程所需要的静态库文件。2常量和宏定义常量和宏定义#define LANANUM 0#defi

48、ne LANANUM 0/ / 本实例中操作的本实例中操作的LANALANA编号编号/ / 本实例中添加的名字,注意不能与本地计算机重名本实例中添加的名字,注意不能与本地计算机重名#define LOCALNAME UNIQUENAME“#define LOCALNAME UNIQUENAME“#define NBCheck(x) if (NRC_GOODRET != x.ncb_retcode) #define NBCheck(x) if (NRC_GOODRET != x.ncb_retcode) printf(Line %d: Got 0 x%x from NetBios()n, pri

49、ntf(Line %d: Got 0 x%x from NetBios()n, _LINE_, x.ncb_retcode); _LINE_, x.ncb_retcode); 在使用宏在使用宏NBCheckNBCheck时,使用时,使用ncbncb结构体为参数。结构体为参数。ncbncb结构体的结构体的ncb_retcodencb_retcode参数表示调参数表示调用用Netbios()Netbios()函数的返回值。如果返回值不等于函数的返回值。如果返回值不等于NRC_GOODRETNRC_GOODRET,则表示函数调用失败,则表示函数调用失败,需要输出发生错误的行号和函数返回值,以便用户定

50、位问题。,需要输出发生错误的行号和函数返回值,以便用户定位问题。3NBReset()函数函数BOOL NBReset (int nLana, int nSessions, int nNames)BOOL NBReset (int nLana, int nSessions, int nNames) NCB ncb; NCB ncb; / / 初始化初始化ncbncb结构体结构体 memset (&ncb, 0, sizeof (ncb); memset (&ncb, 0, sizeof (ncb); / / 清空清空ncbncb结构体结构体 ncb.ncb_command = NCBRESET;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁