吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1162|回复: 10
收起左侧

[其他原创] 批处理实现Hosts修改器 阻止孩子访问不良网站

  [复制链接]
ReturnLog 发表于 2024-8-29 21:58
本帖最后由 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

程序功能

  1. 查看现存hosts规则
  2. 添加hosts规则,规则重复则覆盖
  3. 删除现存hosts规则

Snipaste_2024-08-29_21-44-20.png

快速下载

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.

免费评分

参与人数 3吾爱币 +9 热心值 +3 收起 理由
shallwelee + 1 + 1 谢谢@Thanks!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
soughing + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

anorith 发表于 2024-8-30 10:35
孩子:我谢谢你嘞
WXJYXLWMH 发表于 2024-8-30 10:09
有的电脑etc目录hosts文件是有权限的 无法正常写入
考虑 写入时增加权限与恢复权限
感谢分享 辛苦了
丨紫陌流年丶 发表于 2024-8-30 10:18
WXJYXLWMH 发表于 2024-8-30 10:09
有的电脑etc目录hosts文件是有权限的 无法正常写入
考虑 写入时增加权限与恢复权限
感谢分享 辛苦了

以管理员权限运行cmd,然后运行命令 notepad drivers\etc\hosts 就可以以文本打开hosts文件,可以随便改,然后保存就行。
9981难 发表于 2024-8-30 10:53
路由器上设置是不是更全面?
Tyh52pj 发表于 2024-9-1 00:12
有用,正确引导孩子上网就行
soughing 发表于 2024-9-1 19:22
正确引导孩子上网就行
whitegold 发表于 2024-9-2 21:09
不错,感谢分享
ot1686 发表于 2024-9-4 20:57
本帖最后由 ot1686 于 2024-9-4 21:07 编辑

大佬您这可以批量增加吗??还是说只能一个一个慢加..小弟先下载试试好了...先谢谢大佬了..感谢您的用心.

----------------------------------------------------------------------------
刚刚测试了一下...只能一个一个加
大佬要是能做个批次加就更完美了...还是非常感谢您...^^
shallwelee 发表于 2024-9-5 16:24
一直在找这样简便的小工具,有些修改host的软件都太庞大了。多谢!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-15 04:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表