梧州市本地咨询网

通过Windows批处理管理Hosts文件实现域名屏蔽与网络访问控制

2026-05-24 19:16:02 浏览次数:1
详细信息

一、Hosts文件原理

Hosts文件位于 C:\Windows\System32\drivers\etc\hosts,优先级高于DNS解析。

二、基础批处理脚本

1. 查看当前Hosts内容

@echo off
echo 当前Hosts文件内容:
echo ===============================
type "%SystemRoot%\System32\drivers\etc\hosts"
echo ===============================
pause

2. 添加屏蔽域名

@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

echo 正在添加屏蔽域名...
echo.

set "hosts_path=%SystemRoot%\System32\drivers\etc\hosts"

:: 检查是否以管理员运行
net session >nul 2>&1
if %errorLevel% neq 0 (
    echo 请以管理员身份运行此脚本!
    pause
    exit /b 1
)

:: 要屏蔽的域名列表
set domains[0]=www.example.com
set domains[1]=ads.google.com
set domains[2]=tracking.facebook.com
set domains[3]=malicious-site.com

:: 添加屏蔽
echo. >> "%hosts_path%"
echo # ======================================= >> "%hosts_path%"
echo # 屏蔽域名添加时间:%date% %time% >> "%hosts_path%"
echo # ======================================= >> "%hosts_path%"

for /l %%i in (0,1,3) do (
    set "domain=!domains[%%i]!"
    find /i "!domain!" "%hosts_path%" >nul
    if errorlevel 1 (
        echo 127.0.0.1 !domain! >> "%hosts_path%"
        echo 已屏蔽: !domain!
    ) else (
        echo 已存在: !domain!
    )
)

echo.
echo 操作完成!
ipconfig /flushdns
echo DNS缓存已刷新
pause

3. 按分类管理屏蔽列表

@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

title Hosts文件管理器

:menu
cls
echo ===============================
echo      Hosts文件管理工具
echo ===============================
echo 1. 屏蔽社交媒体
echo 2. 屏蔽广告域名
echo 3. 屏蔽游戏网站
echo 4. 屏蔽视频网站
echo 5. 自定义添加域名
echo 6. 查看当前屏蔽
echo 7. 恢复默认Hosts
echo 8. 退出
echo ===============================
set /p choice="请选择操作:"

if "%choice%"=="1" goto social
if "%choice%"=="2" goto ads
if "%choice%"=="3" goto games
if "%choice%"=="4" goto video
if "%choice%"=="5" goto custom
if "%choice%"=="6" goto view
if "%choice%"=="7" goto restore
if "%choice%"=="8" exit

goto menu

:social
set "list=www.facebook.com www.twitter.com www.instagram.com www.tiktok.com"
goto add_block

:ads
set "list=pagead2.googlesyndication.com ad.doubleclick.net ads.youtube.com"
goto add_block

:games
set "list=www.steampowered.com store.steampowered.com www.epicgames.com"
goto add_block

:video
set "list=www.youtube.com www.netflix.com www.twitch.tv"
goto add_block

:add_block
call :block_domains "%list%"
goto menu

:custom
set /p "domains=请输入要屏蔽的域名(多个用空格分隔): "
if "%domains%"=="" goto menu
call :block_domains "%domains%"
goto menu

:view
cls
echo 当前屏蔽的域名:
echo ===============================
findstr "^127.0.0.1" "%SystemRoot%\System32\drivers\etc\hosts"
echo ===============================
pause
goto menu

:restore
echo 正在恢复默认Hosts文件...
echo # Copyright (c) 1993-2009 Microsoft Corp. > "%SystemRoot%\System32\drivers\etc\hosts"
echo # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. >> "%SystemRoot%\System32\drivers\etc\hosts"
echo # >> "%SystemRoot%\System32\drivers\etc\hosts"
echo # This file contains the mappings of IP addresses to host names. Each >> "%SystemRoot%\System32\drivers\etc\hosts"
echo # entry should be kept on an individual line. The IP address should >> "%SystemRoot%\System32\drivers\etc\hosts"
echo # be placed in the first column followed by the corresponding host name. >> "%SystemRoot%\System32\drivers\etc\hosts"
echo # The IP address and the host name should be separated by at least one >> "%SystemRoot%\System32\drivers\etc\hosts"
echo # space. >> "%SystemRoot%\System32\drivers\etc\hosts"
echo # Additionally, comments (such as these) may be inserted on individual >> "%SystemRoot%\System32\drivers\etc\hosts"
echo # lines or following the machine name denoted by a '#' symbol. >> "%SystemRoot%\System32\drivers\etc\hosts"
echo # For example: >> "%SystemRoot%\System32\drivers\etc\hosts"
echo # >> "%SystemRoot%\System32\drivers\etc\hosts"
echo #      102.54.94.97     rhino.acme.com          # source server >> "%SystemRoot%\System32\drivers\etc\hosts"
echo #       38.25.63.10     x.acme.com              # x client host >> "%SystemRoot%\System32\drivers\etc\hosts"
echo # localhost name resolution is handled within DNS itself. >> "%SystemRoot%\System32\drivers\etc\hosts"
echo #       127.0.0.1       localhost >> "%SystemRoot%\System32\drivers\etc\hosts"
echo #       ::1             localhost >> "%SystemRoot%\System32\drivers\etc\hosts"
ipconfig /flushdns
echo 默认Hosts已恢复,DNS缓存已刷新!
pause
goto menu

:block_domains
setlocal
set "hosts_path=%SystemRoot%\System32\drivers\etc\hosts"
set "domains=%~1"

echo. >> "%hosts_path%"
echo # 添加时间:%date% %time% >> "%hosts_path%"

for %%d in (%domains%) do (
    find /i "%%d" "%hosts_path%" >nul
    if errorlevel 1 (
        echo 127.0.0.1 %%d >> "%hosts_path%"
        echo [添加] %%d
    ) else (
        echo [已存在] %%d
    )
)

echo 127.0.0.1 localhost >> "%hosts_path%"
ipconfig /flushdns >nul
echo DNS缓存已刷新!
pause
endlocal
goto :eof

4. 备份与还原功能

@echo off
chcp 65001 >nul
title Hosts备份管理器

set "hosts_path=%SystemRoot%\System32\drivers\etc\hosts"
set "backup_dir=%USERPROFILE%\HostsBackups"

if not exist "%backup_dir%" mkdir "%backup_dir%"

:menu
cls
echo ===============================
echo     Hosts备份与还原工具
echo ===============================
echo 1. 备份当前Hosts
echo 2. 从备份还原
echo 3. 列出所有备份
echo 4. 退出
echo ===============================
set /p choice="请选择:"

if "%choice%"=="1" goto backup
if "%choice%"=="2" goto restore
if "%choice%"=="3" goto list
if "%choice%"=="4" exit

goto menu

:backup
set "timestamp=%date:/=-%_%time::=-%"
set "timestamp=%timestamp: =%"
set "backup_file=%backup_dir%\hosts_backup_%timestamp%.bak"
copy "%hosts_path%" "%backup_file%" >nul
echo 备份成功:%backup_file%
pause
goto menu

:restore
cls
echo 可用的备份文件:
echo ===============================
dir /b "%backup_dir%\*.bak"
echo ===============================
set /p "backup_file=请输入要还原的备份文件名:"
if not exist "%backup_dir%\%backup_file%" (
    echo 文件不存在!
    pause
    goto menu
)
copy "%backup_dir%\%backup_file%" "%hosts_path%" /Y >nul
ipconfig /flushdns
echo 还原成功!DNS缓存已刷新。
pause
goto menu

:list
cls
echo 备份文件列表:
echo ===============================
dir "%backup_dir%\*.bak"
echo ===============================
pause
goto menu

三、高级功能脚本

1. 定时屏蔽(计划任务结合)

@echo off
:: 定时屏蔽脚本,可通过Windows计划任务定时执行
set "hosts_path=%SystemRoot%\System32\drivers\etc\hosts"

:: 工作时间屏蔽列表(9:00-18:00)
set "work_block=www.youtube.com www.netflix.com www.facebook.com"

:: 检查时间
for /f "tokens=1,2 delims=:" %%a in ("%time%") do (
    set /a "hour=%%a"
)

if %hour% geq 9 if %hour% lss 18 (
    echo # 工作时间屏蔽 %date% %time% >> "%hosts_path%"
    for %%d in (%work_block%) do (
        find /i "%%d" "%hosts_path%" >nul
        if errorlevel 1 (
            echo 127.0.0.1 %%d >> "%hosts_path%"
        )
    )
)

2. 白名单模式(只允许特定网站)

@echo off
chcp 65001 >nul
echo 正在启用白名单模式(只允许访问指定网站)...
echo.

set "hosts_path=%SystemRoot%\System32\drivers\etc\hosts"

:: 清空现有内容
echo # Hosts文件 - 白名单模式 > "%hosts_path%"
echo # 启用时间:%date% %time% >> "%hosts_path%"
echo. >> "%hosts_path%"

:: 系统必要地址
echo 127.0.0.1 localhost >> "%hosts_path%"
echo ::1 localhost >> "%hosts_path%"

:: 白名单域名(允许访问的网站)
echo # 白名单 >> "%hosts_path%"
echo 允许的域名:
set allow_list=www.microsoft.com update.microsoft.com windowsupdate.com

for %%d in (%allow_list%) do (
    echo 0.0.0.0 %%d >> "%hosts_path%"
    echo 允许:%%d
)

:: 屏蔽所有其他流量
echo # 屏蔽所有其他访问 >> "%hosts_path%"
echo 0.0.0.0 * >> "%hosts_path%"

ipconfig /flushdns
echo.
echo 白名单模式已启用!
echo 注意:此模式会阻止除白名单外的所有网络访问
pause

四、使用说明

1. 重要注意事项

2. 创建快捷方式

可以将常用脚本创建为桌面快捷方式:

右键批处理文件 → 发送到 → 桌面快捷方式 右键快捷方式 → 属性 → 高级 → 勾选"以管理员身份运行"

3. 增强建议

五、完整管理工具整合

建议将上述功能整合为一个完整的管理工具,包含日志记录、规则导入导出等功能。

这个方案提供了从基础到高级的Hosts文件管理功能,可以根据实际需求选择使用。

相关推荐