hosts:包含由IP地址和相应的主机名称组成的静态查询表
lmhosts:包含由IP地址和相应的NetBIOS计算机名称组成的静态查询表
lmhosts是用来进行NETBIOS名静态解析的。将NETBIOS名和IP地址对应起来,功能类似于DNS,只不过DNS是将域名/主机名和IP对应。 LMHOSTS 文件是个纯文本文件,微软提供了一个示例程序 LMHOSTS.SAM,位于 C:\WinNT\System32\Drivers\Etc 目录下。
# 102.54.94.97 rhino #PRE #DOM:networking #net group’s DC
# 102.54.94.102 ”appname \0x14” #special App Server
IP 地址必须放在一行的第一栏,地址和主机名之间必须有空格;计算机名称最长为 16 个字符
与 HOSTS 不同的是,LMHOSTS 文件中可以指定执行某种特殊功能的特定的命令。它们也是用 # 标记的,但如果看到有下面的特殊字符串,则表明其为命令字:#PRE——这个命令放在 IP 地址和名称后面,表示当系统启动时,先将这个地址预先载入(Preload)到 Cache(内存高速缓存)中。查询时,系统先从 Cache 中开始,如果失败,再利用广播,再失败,才到本 LMHOSTS 文件中顺序读取。#DOM:domain_name——这个命令放在计算机 NetBIOS 名字之后,表明它是一个域控制器(Domain Controller),这里 domani_name 是域名,表明该控制器属于哪一个域。#INCLUDE ——这个命令表明将 filename 所指向的另一个 LMHOSTS 文件加入到本文件中,系统从该文件中读取 IP 地址和 NetBIOS 名字。Heatch 记得当年应付等级考试啃 C 时就遇到过相同的格式,当然在两年前风行一时的 config.sys 多重启动配置时也有相似的例子[Include],即使现在我们用 DreamWaver 做网页不是也还是有 Server-Side Include 吗,说这么多只是想证明它的好处——集中管理 LMHOSTS 文件,即可以将所有用户共享的 LMHOSTS 文件放到服务器上,每个用户再利用 #INCLUDE 命令把它添加到自己的 LMHOSTS 文件中。#BEGIN_ALTERNATE 和 #END_ALTERNATE 命令必须配套使用,它们的作用是可以在一个 LMHOSTS 文件中指定多个 #INCLUDE 命令,即是说,如果我们有两个以上的域控制器,那么我们就可以 INCLUDE 其上的的 LMHOSTS 文件,一旦某个控制器“牺牲”,可立即用别的域控制器来替代。\0xnn——这里的 \0xnn 命令是用来在 LMHOSTS 文件中指定包含非打印字符(Non-printable)的 NetBIOS 名字,它们必须用引号括起来
引入 LMHOSTS 文件的目的是用来解决广播方式无法跨越路由器的局限的,LMHOSTS 文件与广播方式相辅相行实现网段内外的全通信。这里我们再来看一下它们的的工作进程:
1、系统启动时将 LMHOSTS 文件中被设为#PRE的地址和机器名预载到内存中;
2、客户端发出查询请求时,先在 Cache 中检查是否已存在目的 IP 地址;
3、找到了自不用说,如果在 Cache 中没有找到,系统改用广播方式再次查找;
4、这次找到了也自不用说,如果广播查询还是没有找到,就得用到 LMHOSTS 文件了;
5、找到啦,好!把它也添加到 Cache 中保存起来;还是没有找到?在客户端去等着看错误信息吧。
假定我们这里有两个域:Lanhome01和Lanhome02,其 IP 地址分别为 192.168.0.1 和 192.168.1.10,计算机名分别为 Heatch01 和 Heatch02,现在有一台域 Lanhome01 的工作站 cxy01 想要登录到域 Lanhome02,但我们在网络上没有运行 WINS 服务。如果仅通过广播方式,cxy01无法被 Lanhome02域控制器审核并验证身份。这里只需在 LMHOSTS 文件添加如下一行即可:
192.168.1.10 Heatch02 #PRE #DOM:Lanhome02
LMHOSTS文件最适合网络上没有WINS服务器的环境,因为此时只好使用广播的方式。但是由于大部分的路由器不会将广播信息发送到其他网络,因此利用广播方式可能无法与其他网段内的主机通信每一次就可以利用LNHOSTS文件来解决问题。
以下说明LMHOSTS文件如何与广播方式互操作(假设网络上没有WINS服务器)
1、如果LMHOSTS文件内有项信息被设为#PE,则计算机启动时,此项信息就会预先被加载到NetBIOS名称缓存内。
2、当计算机要查询其他计算机的IP地址时,它会先检查NetBIOS名称缓存内是否已经存在此计算机的IP地址。
3、如果从NetBIOS名称缓存内找不到对方的IP地址,则改用广播的方式。
4、如果广播的方式也失败的话,则改用LMHOSTS文件查询。
5、如果在LMHOSTS文件内仍然找不到对方的IP地址,则将看到警告信息。
6、若从LMHOSTS文件中找到对方的IP地址,则此信息会被存储在NetBIOS名称缓存中一段时间,以供下次使用。
可以利用nbstat -R命令将NetBIOS名称缓存内的信息清除,此命令同时会重新由LMHOSTS文件内加载内含#PRE的信息。