当前位置:   article > 正文

网络扫描技术揭秘学习笔记《二》NetBIOS/NrtBEUI协议编程_netbios数据包分析

netbios数据包分析

《二》NetBIOS/NrtBEUI协议编程
1. NetBIOS简介
NetBIOS协议既可以是一个面向连接的数据包服务,也可以是面向非连接的对话服务。早起的NetBIOS只适用于局域网,本身不存在路由功能,并且总结点数据有限。
后来开发了NTB(NetBIOS over TCP),该接口是将NetBIOS运行在TCP协议上,将NetBIOS的协议数据包作为TCP/IP协议的数据u,通过TCP/IP提供的路由功能,送到目标主机后,再将TCP/IP协议中的数据还原为NerBIOS协议内容,然后再使其在目标主机上得到应用。被称为隧道技术。

  1. 名字注册与注销
    这里写图片描述

  2. 名称解析
    这里写图片描述

  3. NetBIOS数据包
    这里写图片描述

  4. NetBIOS对话
    这里写图片描述
    这里写图片描述

2. NetBIOS的函数调用
无论应用程序咋哪个层次中调用,最终只是用一个Netbios函数(注意不是NetBIOS)

  1. Netbios函数
UCHAR Netbios(
	PNCB pncb
);
  • 1
  • 2
  • 3

这里写图片描述

参数pncb:指向一个NVB结构的指针。
在该函数最终,用一个NCB结构来完成所有命令,该结构是一个64字节的缓冲区(64位操作系统中是72个字节),该结构的调用如下:

#define NVBNAMSZ 16
typedef sturct _NCB{
	UCHAR ncb_commend;
	UCHAR ncb_retcode;
	UCHAR ncb_lsn;
	UCHAR ncb_num;
	PUUCHAR ncb_buffer;
	WORD  ncb_length;
	UCHAR ncb_callname[NCBNAMSZ];
	UCHAR ncb_name[NCBNAMSZ];
	UCHAR ncb_rto;
	UCHAR ncb_sto;
	void (CALLBACK *ncb_port) (struct _NCB);
	UCHAR ncb_lana_num;
	UCHAR ncb_cmd_cplt;
	UCHAR ncb_reserve[10];
	UCHAR ncb_event;
}NCB, *PNCB;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

这里写图片描述
2. 结构成员如下:

  1. ncb_commend:命令码。指出该NCB所完成的功能,其余各成员是否使用,以及要设置成什么值则完全取决于该命令码。除了命令码之外,该值还可以通过操作符“|”与ASYNCH进行“逻辑或操作”,指定是否使用同步操作。可取的命令码主要有:
    这里写图片描述
    这里写图片描述
  2. ncb_retcode:命令返回码,如果是同步命令。并且还没有结束,则该值被设为NCB_PENDING;否则返回码如下值之一:
    这里写图片描述
    这里写图片描述
  3. ncb_lsn:本地对话序号,通过NCBCALL命令可以获得本地对话序号
  4. ncb_num:本地网络名称的数量。通过NCBADDNAME或NCBADDGRNAME命令可以获得网络名称的数量。注意,这里的数量,而不是网络名称本身。并且NAME_NUMBER_1代表第一个网络名称。
  5. ncb_buffer:指向一个缓冲区,当做发送功能(NCBSEND)时,该指向指向所发送的数据,当做接收功能(NCBRECV)或查询命令(NCBSSTAT)时,命令将读后值放到这个指向所指向的缓冲区中。
  6. ncb_length:ncb_buffer的长度。以字节为单位。当做发送功能(NCBSEND)时,如果该长度不对,则返回NRC_BUFLEN错误;当做接收功能(NCBRECV)时,如果该长度不足以装下所返回的值,则系统会设定实际所需要的长度。
  7. ncb_callname:指向远端名称,该名称最大长度为NCBNAMSZ。并不能按普通字符串处理方式处理
  8. ncb_name:指向远端的名称。该名称的最大长度为NCBNAMSZ。
  9. cb_rto:设定接收超时值。该值以500毫秒为一个单位,实际的超时值为所设值乘以500,如果设为0,表示没有超时值,一直等到有可以接收的数据。该命令主要应用于NCBRECV。
  10. ncb_sto:设定发送超时值。同ncb_rto一样,所设值乘以500毫秒作为超时值,0代表没有超时值,直到发送成功返回。该命令主要用于NCBSEND和NCBCHAINSEND命令中。
  11. ncb_post:同步命令完成时,逃通知的现成地址。
  12. ncb_lana_num:执行本次命令的网卡序号。
  13. ncb_cmd_cplt:命令完成标志。该值与ncb_retcode menber相似。
  14. ncb_reserve:保留,必须为0.
  15. ncb_event:指向一个事件句柄,当同步命令完成时,会复位该事件句柄。如果是异步命令(即命令码ncb_commend没有与ASYNCH进行“逻辑或”操作),则必须设置为0.

这里写图片描述

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号