1,Hosts是什么?
Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。
需要注意的是,Hosts文件配置的映射是静态的。一旦一个域名和IP地址在Hosts文件中建立了映射关系,如果在网络上的计算机IP地址发生了更改,用户需要及时更新Hosts文件中的对应映射,否则将不能正常访问。
我们利用这一点,可以屏蔽掉一些非法色情类网站,达到绿坝的效果。
2, Hosts文件存储位置?
hosts文件在不同操作系统(甚至不同Windows版本)的位置都不大一样,
以下为hosts文件在不同系统中所处的目录
Windows XP/2000/Vista/7/8/8.1/10位于:C:\windows\system32\drivers\etc*
3,hosts文件的系统属性
hosts文件默认具有隐藏属性,系统默认设置情况下是看不到的,当然进到这个文件除了直接输入路经也是无法看到了。解决办法:打开我的电脑->点击工具->文件夹选项->查看->取消勾选隐藏受保护的系统文件->确定即可。
如果修改后无法保存:在Hosts文件上面点右键->属性->把只读属性去掉->确定,即可保存。
4,如何修改 hosts文件?
可以使用 记事本 打开 Hosts文件后进行编辑。也可以使用VB6编程工具*制作自己的编辑工具。
修改 hosts先要了解它的格式:IP地址 主机名(网站域名) # 备注
例如: 127.0.0.1 www.csdn.net # 一级域名
127.0.0.1 editor.csdn.net # 二级域名不需要加www
# 此符号后边表示注射
各字段之间 空一格 有效
5,用VB6如何修改 hosts文件?
①先找到 Hosts文件存储位置:
'查找Hosts文件存储位置:
Private Sub GetSystem32Path()
Dim S As String * 80, Length As Long
Length = GetWindowsDirectory(S, Len(S))
WinPath = Left(S, Length)
Length = GetSystemDirectory(S, Len(S))
SysPath = Left(S, Length)
' MsgBox "系统目录" & SysPath
End Sub
② 找到后,读取Hosts文件内容并显示出来,简单的显示界面如下图所示:
左上角TEXT控件显示的是Hosts文件头,这里的内容已被本人汉化过了,你的机器上应该是英文版的。左下角LISTVIEW控件里显示的就是具体的IP和主机网站列表。右边就是常用的操作选项。
Private Sub ReadFromFile() '读取Hosts文件
On Error GoTo Errhandle10086
Dim fileNumber As Integer
Dim TextLine As String
Dim lngItem As Long
Dim Index As Long
Dim I As Integer
Dim tmp As String
Trrm = GetTickCount
Txt_文件头显示 = ""
Hosts数量 = 0
' 获取一个未使用的文件编号
fileNumber = FreeFile
' 打开文本文件进行读取
' Open "C:\Windows\System32\drivers\etc\hosts" For Input As #fileNumber
Open SysPath & "\drivers\etc\hosts" For Input As #fileNumber
' 循环直到文件结束
Do While Not EOF(fileNumber)
' 读取一行文本
Line Input #fileNumber, TextLine
' 输出读取的文本
'Debug.Print TextLine
'读取文件头,如果有的话就显示在文本中
If Left(TextLine, 1) = "#" Then
Txt_文件头显示 = Txt_文件头显示 & TextLine & vbCrLf
TextLine = ""
Else
'处理IP地址等
'HOSTS文件格式如下:IP地址 空格 网站名称 空格(20) 注释号(#)空格(20) 注释内容 结束符号(0D 0A)
' 127.0.0.1 a999d.com.cn # 黄色网站
' 3132372E302E302E31 20 61393939642E636F6D2E636E 20 23 20 BBC6C9ABCDF8D5BE 0D0A
'313237 2E 30 2E 30 2E 31 2020202020202020202020202020 61393939642E636F6D2E636E 202320 BBC6C9ABCDF8D5BE0D0A
'2020202020202020203132372E302E302E31202020202020202020202020202061393939642E636F6D2E636E202320BBC6C9ABCDF8D5BE0D0A
'思路:先读取字串长度
If Len(TextLine) <> 0 Then
' 去除左边空格
TextLine = LTrim(TextLine)
'Debug.Print TextLine
'①得到IP段
I = InStr(1, TextLine, " ")
' a = Split(TextLine, ".")
' IPv4_1 = a(0)
' IPv4_2 = a(1)
' IPv4_3 = a(2)
' IPv4_4 = a(3)
'IPv4 = IPv4_1 & "." & IPv4_2 & "." & IPv4_3 & "." & IPv4_4
If I = 0 Then
IPv4 = TextLine
Else
IPv4 = Left$(TextLine, I - 1)
'舍去IP段
tmp = Mid$(TextLine, I, Len(TextLine))
TextLine = tmp
' 去除左边空格
TextLine = LTrim(TextLine)
'Debug.Print TextLine
End If
'②得到网站地址
I = InStr(1, TextLine, " ")
If I = 0 Then
网站地址 = TextLine
Else
网站地址 = Left$(TextLine, I - 1)
'舍去网站地址
tmp = Mid$(TextLine, I, Len(TextLine))
TextLine = tmp
' 去除左边空格
TextLine = LTrim(TextLine)
'Debug.Print TextLine
End If
'③备注处理
I = InStr(1, TextLine, " ")
If I = 0 Then
备注 = ""
Else
备注 = Left$(TextLine, I - 1)
'舍去备注地址
tmp = Mid$(TextLine, I, Len(TextLine))
TextLine = tmp
' 去除左边空格
TextLine = LTrim(TextLine)
'Debug.Print TextLine
备注 = TextLine
End If
Hosts数量 = Hosts数量 + 1
'添加数据
With ListView1
Index = .AddItem(CStr(Hosts数量)) '.AddItem("[" & CStr(Hosts数量) & "]", ImageBox1.Image(7)) '第一栏:项目序号,随机图标
.SubItems(1) = IPv4
.SubItems(2) = 网站地址
.SubItems(3) = 备注
End With
End If
End If
DoEvents '防止文件过大卡界面
Loop
' 关闭文件
Close #fileNumber
Label1 = "读取[" & Hosts数量 & "]条数据共用:" & (GetTickCount - Trrm) & "毫秒"
Exit Sub
Errhandle10086:
MsgBox "读取Hosts文件错误!"
End Sub
③读取并显示成功后,我们就可以在LISTVIEW控件里直接修改数据,也可以添加新的数据到LISTVIEW控件中去。
当我们需要添加一条数据时的处理:
Private Sub Command8_Click() '添加数据
Dim I As Integer
Dim Index As Long
IPv4 = ""
'纠错
For I = 0 To 3
If Len(Txt_IPv4(I)) = 0 Or Val(Txt_IPv4(I)) > 255 Then Txt_IPv4(I) = "127"
IPv4 = IPv4 & Txt_IPv4(I) & "."
Next I
If Len(Text1) = 0 Then Text1 = "www.sdo999.com"
网站地址 = Text1
'添加数据
Hosts数量 = Hosts数量 + 1
With ListView1
Index = .AddItem(CStr(Hosts数量)) '.AddItem("[" & CStr(Hosts数量) & "]", ImageBox1.Image(7)) '第一栏:项目序号,随机图标
.SubItems(1) = IPv4
.SubItems(2) = 网站地址
.SubItems(3) = ""
.Refresh '刷新
End With
End Sub
当我们需要删除某行内容时的处理:
Private Sub Command11_Click() '删除选中行
Dim Index As Long
If Hosts数量 < 1 Then Exit Sub
'删除选中行,要将后边的数据往前移动,这里为了省事直接把最后一行移动到当前删除行
If 当前选中行 = Hosts数量 - 1 Then Command3_Click: Exit Sub
'不是最后一行的话,就将最后一条移动到此条来
'读取LISTVIEW里边的数据
With ListView1
IPv4 = .SubItems(1, Hosts数量 - 1) '格式:行,列
网站地址 = .SubItems(2, Hosts数量 - 1) '格式:行,列
备注 = .SubItems(3, Hosts数量 - 1) '格式:行,列
Index = .AddItem(CStr(当前选中行)) '.AddItem("[" & CStr(Hosts数量) & "]", ImageBox1.Image(7)) '第一栏:项目序号,随机图标
.SubItems(1, 当前选中行) = IPv4
.SubItems(2, 当前选中行) = 网站地址
.SubItems(3, 当前选中行) = 备注
.Refresh '刷新
End With
' '删除最后一行
Hosts数量 = Hosts数量 - 1
ListView1.Remove Hosts数量
ListView1.Remove ListView1.ListCount
End Sub
④修改完成后,我们需要保存文件后才能生效。
Private Sub WriteToFile() '保存数据
On Error GoTo error10086
Dim fileNumber As Integer
Dim I As Long
Dim tmp As String
Dim TextLine As String
Trrm = GetTickCount
TextLine = ""
' 获取一个未使用的文件号
fileNumber = FreeFile
' 打开文本文件进行写入,如果文件不存在则创建
Open SysPath & "\drivers\etc\hosts" For Output As #fileNumber
'写入头文件
Print #fileNumber, Txt_文件头显示 & vbCrLf
For I = 0 To Hosts数量 - 1
'读取LISTVIEW里边的数据
With ListView1
IPv4 = .SubItems(1, I) '格式:行,列
网站地址 = .SubItems(2, I) '格式:行,列
备注 = .SubItems(3, I) '格式:行,列
End With
'纠错
If Len(IPv4) = 0 Then IPv4 = "127.0.0.1"
If Len(网站地址) = 0 Then 网站地址 = "127.0.0.1"
If Len(备注) > 0 Then 备注 = "# " & 备注
'合并数据
TextLine = TextLine & IPv4 & " " & 网站地址 & " " & 备注 & vbCrLf
DoEvents '防止文件过大卡界面
Next I
' 写入一行文本
Print #fileNumber, TextLine
Label1 = "保存数据成功!保存[" & Hosts数量 & "]条数据共用:" & (GetTickCount - Trrm) & "毫秒"
' 关闭文件
Close #fileNumber
Exit Sub
error10086:
MsgBox "保存文件失败哦!"
End Sub
以上就是一个简单好用的Hosts编辑器,更多的功能,比如,相同主机网站的比对,查找某个网站等功能都可以在此源码的基础上增加。
源码下载地址:https://download.csdn.net/download/gosub60/88985789