16.1 查找工作组的主浏览器

nmblookup -M [Master Browser]

nmblookup -S [NetBIOS name]

nmblookup -A [IP address]

一个Samba服务器其实使用2个守护进程:smbdnmbdsmbd负责生成共享;nmbd则负责将NetBIOS名称(用于标识使用SMB的机器)映射到其IP地址,这样才可能发现和浏览SMB共享。现在主要介绍与nmbd通信的命令,以便对你正在查询的Windows工作组有总体的了解。

说明 假设在以下例子中使用的是Windows工作组,而不是域。工作组(workgroup)本质上就是由多台机器组成的一个小组,这些机器将自己标识为工作组的成员,表示它们属于某个团体。而域(domain)则需要使用一个中央服务器(在大型网络中可能有多个服务器)来验证想要加入网络的计算机和用户。域就像头体型高大、毛茸茸的野兽,很复杂,如果你想了解有关域的更多详情,最好参考本章介绍中提到的那些图书。

在Windows 工作组中,需要用一台机器来保存跟踪工作组中其他的成员的信息(例如,它们的SMB名称和IP地址)。这台机器就是所谓的Master Browser(主浏览器)。但是工作组中的哪台计算机是Master Browser呢?推选哪台计算机作为Master Browser,得基于它所运行的操作系统。最新的、功能最强的OS总能获胜,比如Windows XP总能打败Windows 2000,而Windows 2000又总能打败Windows 98。

不过,当安装Samba 服务器时,也有可能进行一定的配置,让某个服务器总能在任何这样的选举中胜出,而让其他的机器互相打架;或者干脆进行配置,让服务器总能赢得任何选举。如果已经知道Samba共享的位置,就可以直接连接到Samba共享。不过,万一有任何问题,Samba能够提供你要的Master Browser在什么位置。

要查询网络中的Master Browser,可以运行带有-M(或--master- browser)选项的nmblookup命令,最后再跟一个“-”,这个字符基本上表示“给我找一个Master Browser”。不过,现在的问题是在命令行中不能直接用这个“-”,否则shell会认为它是表示某个选项的开始。所以,还得在它前面先多加一个“--”,这样就告诉shell:接下来的“-”就表示“-”,不是某个选项的组成部分。

  1. $ nmblookup -M -- -
  2. querying __MSBROWSE__ on 192.168.1.255
  3. 192.168.1.151 __MSBROWSE__<01>
  4. 192.168.1.104 __MSBROWSE__<01>

真不错。在这个例子中,显示在网络中有两个Master Browser,哪一个是实际要使用的呢?因为不同的Master在不同的时间知道的机器也可能不同,这让用户在使用时也是一团糟。一分钟前,用户还能访问某个机器,接着就找不到这个机器在哪了。为什么? 因为只有一台Master知道那台机器在哪,而其他机器都不知道。试着向从事会计工作的Bob解释下这个问题。

要得到有关Master的更多信息,可以使用带有-S(或--status)选项的nmblookup命令,它将返回主机使用的SMB名称,如下所示:

  1. $ nmblookup -S 192.168.1.151
  2. querying 192.168.1.151 on 192.168.1.255
  3. name_query failed to find name 192.168.1.151

可结果并不好用,因为-S选项需要的是NetBIOS名称,而不是IP地址。遗憾的是,现在还不知道机器的NetBIOS名,只知道它的IP地址。其实,这不是问题。只要再加个-A(或--lookup-by-ip)选项,就可以告诉nmblookup现在给出的是IP地址,而不是NetBIOS名称。

  1. $ nmblookup -SA 192.168.1.151
  2. Looking up status of 192.168.1.151
  3. JANSMAC <00> - B <ACTIVE>
  4. JANSMAC <03> - B <ACTIVE>
  5. JANSMAC <20> - B <ACTIVE>
  6. ..__MSBROWSE__. <01> - <GROUP> B <ACTIVE>
  7. MILTON <00> - <GROUP> B <ACTIVE>
  8. MILTON <1d> - B <ACTIVE>
  9. MILTON <1e> - <GROUP> B <ACTIVE>
  10. MAC Address = 00-00-00-00-00-00

现在就能知道IP地址为192.168.1.151的机器将它自己标记为JANSMAC(这一定是一台Mac OS计算机),是MILTON工作组的Master。其他IP地址呢?

  1. $ nmblookup -SA 192.168.1.104
  2. Looking up status of 192.168.1.104
  3. ELIOT <00> - B <ACTIVE>
  4. ELIOT <03> - B <ACTIVE>
  5. ELIOT <20> - B <ACTIVE>
  6. ..__MSBROWSE__. <01> - <GROUP> B <ACTIVE>
  7. TURING <00> - <GROUP> B <ACTIVE>
  8. TURING <1d> - B <ACTIVE>
  9. TURING <1e> - <GROUP> B <ACTIVE>
  10. MAC Address = 00-00-00-00-00-00

IP地址为192.168.1.104的计算机的NetBIOS名称为ELIOT,它是TURING工作组的Master 。所以,这里其实没什么好担心的,因为两台机器分别是不同工作组的Master。将自己标记为MILTON组成员的机器会向JANSMAC查询信息,而属于TURING组的机器使用的是ELIOT

说明 有关这些例子中输出内容的更多信息,可以参见Microsoft的Knowledge Base(http://support.microsoft.com/kb/q163409/)。