Windows 主机文件管理脚本

Windows操作系统中,主机文件(hosts file)是一个重要的系统文件,它允许用户将域名映射到IP地址。本文介绍的脚本是一个用于操作Windows主机文件的工具,它使用VBScript编写,能够添加、删除、查询主机条目和别名。

这个脚本是对一个早期版本的重写,早期版本是一个简短的脚本,用于操作Windows主机文件。新版本的脚本使用自定义类和字典对象来跟踪IP地址和主机别名。整个主机文件被读取到内存中的数据结构中,以便进行操作。特别关注保留注释信息,这些注释信息存储在主机条目的上方、下方和末尾。虽然关注了注释,但目前没有直接管理注释数据的能力。

脚本内部结构

VBScript利用一个自定义类std_host_file、字典和数组。std_host_file类是用于读取和写入主机文件的主要类。创建一个数组来存储IP、别名和行尾注释。整行注释存储在std_host_file::m_lines字典对象中,以及定义为Array(ip, CreateObject("Scripting.Dictionary"), comments)的数组。TypeName VBScript调用用于确定std_host_file::m_lines中的项目是"String"还是"Variant()"对象。此外,std_host_file::m_ip_map字典对象用于将IP地址映射到其相应的std_host_file::m_lines键,std_host_file::m_alias_map将别名映射到IP地址,用于交叉引用别名。由于现代主机文件可以有IPv4和IPv6地址,这是必要的。例如,127.0.0.1和::1都可以合法地别名为"localhost"。用户需要执行检查以确保主机别名正确映射到其相应的IP地址。也许未来的增强可以实现额外的安全级别。

std_host_file类提供的功能

类定义细节和私有成员函数已省略。

Class std_host_file Public Function GetHostEntryAliases(ByVal ip, ByRef aliases) Public Function GetHostEntryAliasAddresses(ByVal alias, ByRef ips) Public Function DeleteHostEntry(ByVal ip) Public Function DeleteHostEntryAlias(ByVal ip, ByVal alias) Public Function AddHostEntry(ByVal ip, ByVal alias) Public Function GetAllHostEntryAddresses(ByRef ips) Public Function GetAllHostEntryAliases(ByRef aliases) Public Function Save(ByVal hostfile) Public Function Load(ByVal hostfile, ByVal bmergecomments) Private m_lines Dictionary of host line items Private m_ip_map Dictionary of ip addresses to m_lines key values Private m_alias_map Dictionary of alias mapping to IP addresses End Class

使用代码

Option Explicit Dim o_h Set o_h = New std_host_file Call o_h.Load("C:\Windows\System32\drivers\etc\hosts", False) Dim arr, n Call o_h.AddHostEntry("192.168.1.5", "A") Call o_h.AddHostEntry("192.168.1.5", "B") Call o_h.AddHostEntry("192.168.1.5", "C") Call o_h.AddHostEntry("192.168.1.5", "D") Call o_h.AddHostEntry("192.168.1.6", "E") Call o_h.AddHostEntry("192.168.1.6", "F") Call o_h.AddHostEntry("192.168.1.6", "G") Call o_h.AddHostEntry("192.168.1.6", "H") Call o_h.AddHostEntry("192.168.1.7", "I") Call o_h.AddHostEntry("192.168.1.7", "J") Call o_h.AddHostEntry("192.168.1.7", "K") Call o_h.AddHostEntry("192.168.1.7", "L") Call o_h.DeleteHostEntryAlias("192.168.1.5", "A") Call o_h.DeleteHostEntryAlias("192.168.1.5", "C") o_h.DumpData Call o_h.GetHostEntryAliases("192.168.1.5", arr) WScript.Echo "Aliases for 192.168.1.5" For Each n In arr WScript.Echo n Next Call o_h.GetHostEntryAliasAddresses("A", arr) WScript.Echo "Addresses for test2" For Each n In arr WScript.Echo n Next WScript.Echo "All host aliases" Call o_h.GetAllHostEntryAliases(arr) For Each n In arr WScript.Echo n Next WScript.Echo "All host ip addresses" Call o_h.GetAllHostEntryAddresses(arr) For Each n In arr WScript.Echo n Next o_h.DumpData Call o_h.DeleteHostEntry("192.168.1.5") Call o_h.DeleteHostEntry("192.168.1.6") Call o_h.DeleteHostEntry("192.168.1.7") Call o_h.DeleteHostEntry("192.168.1.8") Call o_h.DeleteHostEntry("216.10.194.14") o_h.DumpData Call o_h.Save("C:\temp\host.txt")
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485