深入了解NetBIOS名:解释、作用和用法
NetBIOS是一种用于本地网络之间进行通信的协议,它提供了一组API,以便应用程序在LAN上通信。在NetBIOS上,每个计算机都需要一个唯一的标识符来识别其在网络上的位置。这个唯一的标识符就是NetBIOS名。本文将深入探讨NetBIOS名的解释、作用和用法。
一、NetBIOS名的解释
首先,NetBIOS名由一到十六个ASCII字符组成,其中,有些字符是预定义的,有些字符是任意的。在NetBIOS中,预定义字符主要包括以下五种:
- '?':表示任意一个字符;
- '*':表示零个或多个字符;
- ' ':空格,要求唯一;
- '\0':空,表示名称结束;
- '\01'到'\1F':控制字符,用于识别名的类型。
其次,NetBIOS名由两部分组成,即名称和类型。名称部分是在本地网络上唯一的机器名,而类型部分则用于指定该名字的类型。通常情况下,NetBIOS名的类型有三种:
- 文件共享(0x00):指定用于共享文件的名称;
- 进程通信(0x20):指定用于识别本地进程的名称;
- 服务提供程序(0x1F):一种广义的名称,它使用广播来发现网络上提供的服务。
总之,NetBIOS名的命名规则是相对来说比较灵活的,但是具有唯一性和可区分性,能够在网络中进行唯一标识,从而方便了网络上的通信。
二、NetBIOS名的作用
NetBIOS名在本地网络上扮演着非常重要的角色,主要有以下几个方面。
1. 唯一标识
在本地网络中有很多计算机,每个计算机需要有一个唯一的标识符,这个标识符就是NetBIOS名。这样,当我们需要在网络中进行文件共享或其他操作时,就可以通过这个名字来找到对应的计算机。
2. 文件共享
NetBIOS名还被广泛用于文件共享。通过NetBIOS名,我们可以方便地在网络上查找其他计算机所共享的文件。为了实现文件共享,计算机需要开启“文件和打印机共享”功能,并将共享文件夹命名为NetBIOS名。
3. 进程通信
NetBIOS名还用于识别本地进程。本地进程可以使用唯一的NetBIOS名,以便其他进程能够更方便地找到它们。例如,如果一个应用程序需要向某个进程发送消息,就可以使用该进程的NetBIOS名来实现。
4. 服务发现
NetBIOS名也可以用于自动发现网络上的服务。许多服务提供程序可以通过广播自己的NetBIOS名,以便其他计算机的应用程序可以找到它们,从而使用它们提供的服务。例如,Windows中的“主浏览器”就使用广播来发布其NetBIOS名,从而让其他计算机知道它的存在。
三、NetBIOS名的用法
1. 注册NetBIOS名
要使用NetBIOS名,首先需要将其注册到本地网络上,从而让其他计算机能够找到它。实现这个功能的方法是通过调用NetBIOS API中的Netbios()函数来实现。例如,我们可以通过以下代码将计算机的NetBIOS名注册到本地网络上:
```c++
#include
UCHAR name_start[] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66};
struct netbios_name {
char nb_name[16];
char nb_type[16];
};
struct netbios_name name;
memset(&name, 0, sizeof(struct netbios_name));
memset(name.nb_name, ' ', 16);
strcpy(name.nb_name, name_start);
strcpy(name.nb_type, "\x20");
Netbios( &name.nb_name[0], NCBRESET, NULL );
Netbios( &name.nb_name[0], NCBACTION, NULL );
struct ncbs sn;
memset(&sn, 0, sizeof(struct ncbs));
strcpy(sn.ncb_name, name.nb_name);
sn.ncb_command = NCBQUICKADDNAME;
Netbios(&sn);
```
以上代码通过Netbios()函数来执行操作,其中NCBRESET和NCBACTION用于重新初始化和启用NetBIOS会话,NCBQUICKADDNAME用来将NetBIOS名注册到本地网络上。
2. 查找NetBIOS名
进行网络通信时需要找到请求的计算机,这时可以通过NetBIOS名进行查找。通过修改NCB查询请求结构体ncbs变量的ncb_name成员,来指定需要查找的NetBIOS名。例如,以下C++代码可以帮助我们在本地网络上查找名为“Computer”的计算机:
```c++
struct ncbs sn;
memset(&sn, 0, sizeof(struct ncbs));
strcpy(sn.ncb_name, "Computer");
sn.ncb_command = NCBASTAT;
Netbios(&sn);
```
3. 发送和接收信息
一旦找到目标计算机的NetBIOS名,就可以使用NetBIOS API来发送和接收信息了。下面的C++代码演示了如何向名为“Computer”的计算机发送信息:
```c++
struct ncbs sn;
memset(&sn, 0, sizeof(struct ncbs));
strcpy(sn.ncb_name, "Computer");
sn.ncb_command = NCBSEND;
sn.ncb_buffer = (PUCHAR) "Hello, Computer!";
sn.ncb_length = strlen("Hello, Computer!");
Netbios(&sn);
```
四、总结
本文深入探讨了NetBIOS名的解释、作用和用法。NetBIOS名可以帮助我们在本地网络中唯一标识计算机、实现文件共享、进行进程通信和自动发现网络上的服务。在使用NetBIOS名时,需要将其注册到本地网络上、查找它、发送和接收信息。通过对NetBIOS名的深入理解,可以更好地理解NetBIOS协议,从而更好地实现相关的应用程序。