- 好友
- 27
- 在线时间
- 627 小时
- 最后登录
- 2026-7-6
联机技术研发组
自由骑士 联机ID:K2SB
 
- UID
- 2758158
- 第纳尔
- 2652
- 精华
- 1
- 互助
- 93
- 荣誉
- 38
- 贡献
- 0
- 魅力
- 143
- 注册时间
- 2016-7-15
  ![骑士美德之仁慈勋章[杰出会员互助勋章]](static/image/common/medal12.gif) ![骑士美德之英勇勋章[杰出会员活跃勋章]](static/image/common/medal11.gif)
 鲜花( 1381)  鸡蛋( 32)
|
本帖最后由 k2木有小鸡鸡 于 2026-7-5 21:46 编辑
原理我不讲了,以前帖子讨论挺多了,我以前还专门发过帖子。
下载附件:
update_hosts.zip
(1.72 KB, 下载次数: 0)
解压后双击运行。如果不行,就继续双击运行,有三四个DNS会抽奖轮流。
都不行的话,一般也玩不了了。
也可以把下面这些复制,新建一个hosts.bat, 拷进去双击运行, 源码放出来供参考,抛砖引玉。
@echo off
chcp 65001 >nul
REM =============================================
REM 自动获取管理员权限
REM =============================================
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
)
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
setlocal enabledelayedexpansion
REM =============================================
REM 配置区(可自行修改)
REM =============================================
set "DOMAIN1=wact.taleworlds.com"
set "DOMAIN2=warbandmain.taleworlds.com"
REM 国内 DNS-over-HTTPS 轮询列表(每次运行随机打乱,按顺序尝试,首个成功即用):
REM 阿里 AliDNS: https://dns.aliyuncs.com/resolve?name={name}^&type=A
REM DNSPod: https://doh.pub/dns-query?name={name}^&type=A
REM 说明:必须用 DoH,不能用系统 DNS,否则会被 Clash Fake-IP(198.18.0.0/15)劫持
set "HOSTS=%WINDIR%\System32\drivers\etc\hosts"
set "TMPHOSTS=%temp%\hosts_new_%RANDOM%.tmp"
set "PS_SCRIPT=%temp%\resolve_dns_%RANDOM%.ps1"
REM =============================================
REM PowerShell: DoH (DNS-over-HTTPS) 轮询解析 A 记录
REM 用 Invoke-RestMethod 直接打阿里/DNSPod 的 DoH JSON 接口,
REM 走 HTTPS 443,绕过 Clash Fake-IP 的 UDP/53 劫持
REM =============================================
> "%PS_SCRIPT%" echo $ErrorActionPreference = 'SilentlyContinue'
>> "%PS_SCRIPT%" echo $dohList = @('https://dns.aliyuncs.com/resolve?name={0}^&type=A', 'https://doh.pub/dns-query?name={0}^&type=A') ^| Sort-Object { Get-Random }
>> "%PS_SCRIPT%" echo function Get-RealIp($name) {
>> "%PS_SCRIPT%" echo foreach ($tmpl in $dohList) {
>> "%PS_SCRIPT%" echo try {
>> "%PS_SCRIPT%" echo $url = $tmpl -f $name
>> "%PS_SCRIPT%" echo $r = Invoke-RestMethod -Uri $url -Method Get -TimeoutSec 10
>> "%PS_SCRIPT%" echo if ($r.Answer -and $r.Answer.Count -gt 0) { return $r.Answer[0].data }
>> "%PS_SCRIPT%" echo } catch {}
>> "%PS_SCRIPT%" echo }
>> "%PS_SCRIPT%" echo return ''
>> "%PS_SCRIPT%" echo }
>> "%PS_SCRIPT%" echo if ($ip1 = Get-RealIp '%DOMAIN1%') { Write-Output ('IP1=' + $ip1) }
>> "%PS_SCRIPT%" echo if ($ip2 = Get-RealIp '%DOMAIN2%') { Write-Output ('IP2=' + $ip2) }
for /f "tokens=1,* delims==" %%a in ('powershell -NoProfile -ExecutionPolicy Bypass -File "%PS_SCRIPT%"') do (
if /i "%%a"=="IP1" set "IP1=%%b"
if /i "%%a"=="IP2" set "IP2=%%b"
)
del "%PS_SCRIPT%" 2>nul
if not defined IP1 (
echo [错误] 解析 %DOMAIN1% 失败
pause
exit /b 1
)
if not defined IP2 (
echo [错误] 解析 %DOMAIN2% 失败
pause
exit /b 1
)
echo.
echo %DOMAIN1% -^> !IP1!
echo %DOMAIN2% -^> !IP2!
echo.
REM =============================================
REM 替换 hosts 中的旧条目,写入新条目
REM =============================================
if exist "%HOSTS%" (
findstr /v /i /c:"%DOMAIN1%" /c:"%DOMAIN2%" "%HOSTS%" > "%TMPHOSTS%"
) else (
type nul > "%TMPHOSTS%"
)
>> "%TMPHOSTS%" echo.
>> "%TMPHOSTS%" echo !IP1! %DOMAIN1%
>> "%TMPHOSTS%" echo !IP2! %DOMAIN2%
move /y "%TMPHOSTS%" "%HOSTS%"
echo.
echo ================================================
echo hosts 文件更新成功
echo ================================================
echo.
pause
endlocal
|
|