本帖最后由 ReturnLog 于 2024-8-29 22:00 编辑
Windows平台 Hosts 修改器
Hosts文件是一个没有扩展名的操作系统文件,以表的形式存储了主机名和IP地址的映射关系。Hosts又称host table,译为“主机表”。现代系统中,虽然DNS取代了主机表,但主机表的应用依旧很广。和DNS不同的是,用户可以直接对Hosts文件进行控制。
用途
Hosts文件是大多数系统都存在的一个小型主机表。Hosts文件中包含了本地网络重要的主机名和地址信息,查询Hosts文件得到的结果比通过查询DNS得到的结果优先级更高。
Hosts文件的日常用途
-
将已知的广告服务器重定向到本地网络地址,如: 127.0.0.1 以实现过滤广告。
-
减少对DNS服务器的查询次数以加快访问网站的速度。
-
阻止用户访问特定网站,如:将www.bilibili.com定向到127.0.0.1
程序功能
- 查看现存hosts规则
- 添加hosts规则,规则重复则覆盖
- 删除现存hosts规则
快速下载
GitHub仓库(包含英文版)遇到问题请提交issues
https://github.com/Return-Log/Hosts-Editor
蓝奏云下载 2.44 KB
https://wwif.lanzouk.com/iSzXD28e7yxe
密码:1z7b
详细说明
1. 设定脚本环境
@echo off
chcp 65001 > nul
setlocal enabledelayedexpansion
@echo off :关闭命令回显,使得批处理程序更清晰。
chcp 65001 > nul :设置代码页为 UTF-8,以支持多语言字符显示,防止乱码。
setlocal enabledelayedexpansion :启用延迟变量扩展,允许在循环中使用 ! 来引用变量。
2. 获取 hosts 文件路径
for /f "tokens=3" %%I in ('reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "DataBasePath" 2^>nul') do (
set "hosts_path=%%Ihosts"
)
if not exist "%hosts_path%" (
set "hosts_path=C:\Windows\System32\drivers\etc\hosts"
)
- 通过读取注册表获取
hosts 文件的默认路径。如果注册表中无法获取到路径,则将路径设置为常见的 C:\Windows\System32\drivers\etc\hosts 。
3. 请求管理员权限
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%hosts_path%" && (
echo 开始程序...
) || (
echo 无法获取管理员权限,请以管理员身份运行此脚本。
pause
exit /b
)
- 使用
cacls.exe 检查当前用户是否对 hosts 文件有足够权限。如果没有权限,则提示以管理员身份运行脚本并退出程序。
4. 主菜单循环
:menu
cls
echo 1. 查看现有hosts规则
echo 2. 添加hosts规则
echo 3. 删除hosts规则
echo 4. 保存并退出
set /p choice=请输入选项:
if "%choice%"=="1" (
call :view_rules
goto menu
) else if "%choice%"=="2" (
call :add_rule
goto menu
) else if "%choice%"=="3" (
call :delete_rule
goto menu
) else if "%choice%"=="4" (
goto :save_and_exit
) else (
echo 无效选项,请重新输入。
pause
goto menu
)
- 显示菜单选项:查看、添加、删除
hosts 规则或退出程序。
- 根据用户输入调用相应的功能(
:view_rules 、:add_rule 、:delete_rule 、:save_and_exit )。
5. 查看现有 hosts 规则
:view_rules
cls
echo 当前hosts规则:
type "%hosts_path%"
pause
exit /b
- 使用
type 命令显示 hosts 文件中的当前规则,并暂停以便查看。
6. 添加 hosts 规则
:add_rule
cls
set /p url=请输入url:
set /p ip=请输入目标IP:
rem 清除url之前可能的空格
set "url=%url: =%"
rem 检查url是否已经存在,存在则替换原有规则
findstr /C:"%url%" "%hosts_path%" > nul
if %errorlevel% equ 0 (
echo %ip% %url% > "%hosts_path%.tmp"
findstr /v /C:"%url%" "%hosts_path%" >> "%hosts_path%.tmp"
move /y "%hosts_path%.tmp" "%hosts_path%"
) else (
echo %ip% %url% >> "%hosts_path%"
)
echo 规则添加成功。
pause
exit /b
- 提示输入 URL 和 IP 地址来添加新的
hosts 规则。
- 检查该 URL 是否已经存在于
hosts 文件中,如果存在则替换旧的规则,否则添加新规则。
7. 删除 hosts 规则
:delete_rule
cls
echo 当前hosts规则:
set /a index=0
for /f "tokens=1,* delims= " %%i in ('type "%hosts_path%"') do (
set /a index+=1
echo !index!. %%j
)
set /p delete_choice=请输入要删除的规则编号:
set /a index=0
for /f "tokens=1,* delims= " %%i in ('type "%hosts_path%"') do (
set /a index+=1
if !index! equ %delete_choice% (
set "delete_rule=%%j"
)
)
echo 是否要删除以下规则?
echo %delete_rule%
set /p confirm=是否确认删除(y/n):
if /i "%confirm%"=="y" (
findstr /v /C:"%delete_rule%" "%hosts_path%" > "%hosts_path%.tmp"
move /y "%hosts_path%.tmp" "%hosts_path%"
echo 规则删除成功。
) else (
echo 取消删除操作。
)
pause
exit /b
- 列出当前的
hosts 规则并让用户选择要删除的规则编号。
- 检查用户确认是否删除,并在确认后删除指定的规则。
8. 保存并退出
:save_and_exit
exit
Copyright © 2024 Log All rights reserved.
|