标题：lmhosts
LMHOSTS示例
这里的路径是“蓝网实验室”所采用的，  DNS示意可自行参照实际安装情况而灵活改变。如果我们需要启用 LMHOSTS 文件查询（至于什么时候会用到这种解析方式，我们在下面会讲到），则应该将其改名为 LMHOSTS，当然推荐的方法是制作副本（即另存为 LMHOSTS），这样可免除将原文件失手改错而不得不从安装光盘里解压还原出来的麻烦。LMHOSTS 文件的部分内容下面是“蓝网实验室”NT服务器中 LMHOSTS 文件的部分内容：
#
# The following example illustrates all of these extensions:
#
# 102.54.94.97　　 rhino　　　　　 #PRE #DOM:networking　 #net group's DC
# 102.54.94.102　　"appname　　\0x14"　 #special app server
# 102.54.94.123　　 popular 　　　　　　#PRE　　　　　　　#source server
# 102.54.94.117　　 localsrv　　　　　　#PRE　　　　　　　#needed for the include
#
# #BEGIN_ALTERNATE
# #INCLUDE \\localsrv\public\lmhosts
# #INCLUDE \\rhino\public\lmhosts
# #END_ALTERNATE
#
# end of this file.规则解释由上面的示例我们可以看出，LMHOSTS 文件跟我们在前面已经接触过的 HOSTS 文件的格式一样，当然其规则也一样，比如：
#字符是用来注释的；
IP 地址必须放在一行的第一栏，地址和主机名之间必须有空格；
计算机名称最长为 16 个字符，但是只能输入 15 个
但是与 HOSTS 不同的是，LMHOSTS 文件中可以指定执行某种特殊功能的特定的命令。它们也是用 # 标记的，但如果看到有下面的特殊字符串，则表明其为命令字：
#PRE——这个命令放在 IP 地址和名称后面，表示当系统启动时，先将这个地址预先载入（Preload）到 Cache（内存高速缓存）中。查询时，系统先从 Cache 中开始，如果失败，再利用广播，再失败，才到本 LMHOSTS 文件中顺序读取。
#DOM：domain_name——这个命令放在计算机 NetBIOS 名字之后，表明它是一个域控制器（Domain Controller），这里 domani_name 是域名，表明该控制器属于哪一个域。
#INCLUDE <Filename>——这个命令表明将 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 名字，它们必须用引号括起来。正如前面的《关于 WINS（二）》所讲，这些非打印字符只用于特殊的设备名称，并且只能放在计算机名称后面第16个字符的位置（我的计算机名称没有15个字符那么长啊——按空格键嘛），如示例中的102.54.94.102　　"appname　　\0x14"关于 Preload 的特别说明1、一个 LMHOSTS 文件中最多只允许 Preload 100 个 IP 地址和计算机名称（我偏要输入 101 个怎么着！——怎么着？多的一个忽略不计！）；
2、#INCLUDE 命令所指向的文件中的所有项都必须加上 #PRE 命令（我偏不加又怎么着！——怎么着？忽略不计）；
3、修改注册表增加预载数目：主键 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netbt\Parameters，新建字符串值 MaxPreLoads，输入自己想要的数目。
LMHOSTS 的应用
安装过 Windows NT 4.0 Server 的网友很清楚，就是如果安装了 TCP/IP 协议，  Windows NT 4.0 Server则我们依次选取“开始”/“设置”/“控制面板”/“网络”/“协议”/“TCP/IP 通信协议”/“属性”/“WINS 属性”，则可以在当前页框里看见，系统默认的是“启用 LMHOSTS 查询”，同时还可以启用的是“启用 DNS ”。按照我们前面讲到的，如果想要使用保存在其他目录中甚或其他计算机中的 LMHOSTS 文件，则可以单击旁边的“导入 LMHOSTS”按钮来获取。工作进程由我们前面的《关于 WINS 》及《关于 NetBIOS》等专辑大家已经知道，LMHOSTS 文件的应用场合是没有 WINS 服务器的网络环境，引入 LMHOSTS 文件的目的是用来解决广播方式无法跨越路由器的局限的，LMHOSTS 文件与广播方式相辅相行实现网段内外的全通信。这里我们再来看一下它们的的工作进程：
1、系统启动时将 LMHOSTS 文件中被设为#PRE的地址和机器名预载到内存中；
2、客户端发出查询请求时，先在 Cache 中检查是否已存在目的 IP 地址；
3、找到了自不用说，如果在 Cache 中没有找到，系统改用广播方式再次查找；
4、这次找到了也自不用说，如果广播查询还是没有找到，就得用到 LMHOSTS 文件了；
5、找到啦，好！把它也添加到 Cache 中保存起来（看你下次还往哪跑^_^）；还是没有找到？！对不起，俺只得报错了，你就在客户端去等着看错误信息吧。LMHOSTS 文件的跨域操作那么 LMHOSTS 文件的跨域操作又是如何实现的呢？还记得三天前的第一讲吗？我们说到了一个 #DOM:Domain_Name 命令。假定我们这里有两个域：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的运行
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的信息。
LMHOSTS 的管理
这里提到的 LMHOSTS 文件的管理实际也是上一讲内容的强化，即跟上面的 #DO  LMHOSTS文件管理M 命令一样，我们这一节着重的是 #INCLUDE 命令。因为 LMHOSTS 文件是独立存放在每台机器上的，如果整个网络发生了数据变动，则必须为每台机器的 LMHOSTS 文件进行修改，虽然它们都存放于 C:\WinNT\System32\Drivers\Etc目录中很好定位，但动起手来还是很麻烦。如果通过 #INCLUDE 命令就可以一劳永逸。我们这里将它再次拿出来讲，是提醒大家注意其文件路径的表示方法。
以上一讲中的例子再次说明如下：
#
# The following example illustrates all of these extensions:
#
# 102.54.94.97　　 rhino　　　　　 #PRE #DOM:networking　 #net group's DC
# 102.54.94.102　　"appname　　\0x14"　 #special app server
# 102.54.94.123　　 popular 　　　　　　#PRE　　　　　　　#source server
# 102.54.94.117　　 localsrv　　　　　　#PRE　　　　　　　#needed for the include
#
# #BEGIN_ALTERNATE
# #INCLUDE \\localsrv\public\lmhosts
# #INCLUDE \\rhino\public\lmhosts
# #END_ALTERNATE
#
# end of this file.
如果共享的 LMHOSTS 文件位于域名为 Lanhome01 的 Heatch01 的机器中，其路径为 C:\WinNT\System32\Drivers\Etc，现在我们对这个 LMHOSTS 文件已经进行了多处修改，因为同属一个网络，所以我们还要对 Lanhome02 中 Heatch02 机器的 LMHOSTS 文件做相应修改，但我们不希望在今后仍要进行重复的工作，因此，我们可以做如下操作：
1、将 Heatch01 机器的 C:\WinNT\System32\Drivers\Etc 目录共享为 Share；
2、对 Heatch02 机器的 LMHOSTS 文件做如下修改：
192.168.0.1　　Heatch01　　#PRE #DOM:Lanhome01
#INCLUDE　　\\Heatch01\Share\LMHOSTS
对于 LMHOSTS 本身的管理来说，就是尽可能的优化其结构，利用系统的搜索，比如减少注释、将常用的IP地址及其计算机名称都通过 #PRE 命令预载到 Cache 中并把它们放在文件的最后（为什么？——因为它们在系统启动时就已经加载到 Cache 中了，如果在广播失败后查询 LMHOSTS 文件又先从它们开始，岂不浪费时间？！）。
如果觉得有必要，可以使用 NBTSTAT -R 命令来清除 Cache 中的数据并重新从 LMHOSTS 文件中 Preload。