域名在 Windows Hosts 文件中被阻止,但网站仍然可以访问

域名在 Windows Hosts 文件中被阻止,但网站仍然可以访问

我正在尝试弄清楚为什么我的 hosts 文件没有被正确执行。正确执行的意思是,当我访问我试图阻止的网站时,它需要大约 12 小时才能生效。

是的,我知道这个问题和这个问题类似(https://serverfault.com/questions/50934/hosts-file-being-ignored) 但那里提出的任何建议都无法解决问题。

背景:我想在上课期间屏蔽我儿子电脑上的 YouTube。我的路由器允许按计划屏蔽,但这会影响我的整个网络。现在,我知道,我可以获得一个好的、可配置的防火墙设备(例如 Firewalla、pfSense、Untangle 等)或添加第二个无线接入点,让他的笔记本电脑连接到该接入点,然后在第二个接入点上创建屏蔽规则。但是,我是个白痴,我选择了困难的路线。

因此,我的想法是创建两个备用主机文件,其中一个包含以下行来阻止 YouTube:

127.0.0.1 youtube.com

另一个没有。然后我创建了两个批处理脚本,根据使用 Windows 调度程序的计划替换 hosts 文件。以下是批处理脚本:

ECHO OFF
SET COPYCMD=/Y
xcopy /V /Y C:\Windows\System32\drivers\etc\hosts_YT_OFF.txt C:\Windows\System32\drivers\etc\hosts
IPCONFIG /flushdns

因此,当我执行脚本时(甚至还没有进入调度程序步骤),它会按预期工作,有点(“有点”是指,是的,从技术上讲,它已经起作用,但需要超过 12 个小时才能生效)。

检查hosts文件:是的,它已被正确替换。

Ping“youtube.com”:

C:\WINDOWS\system32>ping youtube.com

Pinging youtube.com [127.0.0.1] with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

如您所见,hosts 文件已被遵守。检查 dns 缓存:

C:\WINDOWS\system32>ipconfig /displaydns

Windows IP Configuration

youtube.com
    ----------------------------------------
    No records of type AAAA


    youtube.com
    ----------------------------------------
    Record Name . . . . . : youtube.com
    Record Type . . . . . : 1
    Time To Live  . . . . : 0
    Data Length . . . . . : 4
    Section . . . . . . . : Answer
    A (Host) Record . . . : 127.0.0.1

尝试过这个:

C:\WINDOWS\system32>nbtstat -R

不用找了。

做过这个:

C:\WINDOWS\system32>ipconfig /release
C:\WINDOWS\system32>ipconfig /renew

再次,没有变化。我的意思是,它确实禁用了适配器并更新了它,但我仍然可以在 Chrome、Firefox、Edge 上访问 YouTube。是的,我重启了浏览器,并清除了缓存。什么都没有。

我有不是重启了电脑,但我不打算这么做。首先,它会最终禁用 YouTube。其次,当我 ping youtube.com 时,它返回 localhost,那么,我为什么要禁用它呢?某物把事情搞砸了,我太固执了,不愿意放手,不愿意采取上述简单的解决方案。:P

hosts 文件被正确替换,就像第二个脚本一样,当我想重新启用 YouTube 访问时,它只是用默认文件替换被阻止的 YouTube 主机文件。我已经确认,在成功禁用 YouTube 后(大约 12 小时后才发生),可以 ping 并访问 YouTube。

我希望所有这些都有意义。一定有一些非常简单的 Windows 网络解释,而我却没有找到。任何帮助都将不胜感激。

更新2020 年 9 月 11 日。我成功了。问题是我需要将这个额外的地址添加到 hosts 文件中:

127.0.0.1 www.youtube.com

就是这样。一点也不复杂,只是一个“www”。我不确定为什么,我以为域名可以覆盖它。没有。唉。所以现在它读起来是:

127.0.0.1 youtube.com
127.0.0.1 www.youtube.com

答案1

由于 MS Windows 忽略了一些具体的主办方规则甚至考虑了一些这样的尝试安全风险,你可以尝试做一个防火墙规则阻止特定网站。一条规则可以阻止多个 URL。您可以制作批处理脚本来激活规则

netsh advfirewall firewall set rule name="TestRule" new enable=yes

或者用来... enable=no使其停用。

  • Windows,输入防火墙,然后选择具有高级安全性的 Windows Defender 防火墙
  • 选择入境规则
  • 选择新规则...在下面操作
  • 选择自定义规则
  • 在下面范围添加 许多 远程 IP 地址对于 YouTube.com,例如 172.217.6.238(见下文)
  • 在下面行动阻止连接
  • 如果需要,重复出站规则

注意:阻止单个 IP 地址是没有意义的,因为YouTube 拥有许多IP 地址例如,

  • 个人地址:
    • 208.65.153.238
    • 208.65.153.251
    • 令人厌烦
  • IP 地址范围:
    • 199.223.232.0-199.223.239.255
    • 207.223.160.0 - 207.223.175.255
    • 以及许多尚未被发现的正如 T. Lehrer 所说。

警告:这些防火墙规则可以被绕过,并且随着 YouTube 添加更多 IP 地址也需要更新。

答案2

一些程序维护自己的 DNS 查找缓存。

因此,对于此类程序,如果它提供了清除缓存的方法,您还需要告诉程序清除其缓存。

答案3

这里的问题是该hosts文件(顾名思义)包含主机名条目,不是域名項目。

youtube.com恰好是主机名,这就是您可以使用浏览器导航到它的原因,也是为什么文件中的条目hosts会产生影响的原因。

正如您已经知道的www.youtube.com那样,是另一个可以访问相同内容的主机名。进一步思考,您将遇到此方法的问题,因为您无法知道 YouTube 使用多少其他主机名。

例如,对于网站的移动版本,仍然经常使用 而不是 (尤其是大型网站)。因此,我刚刚尝试了m.,它成功了。我还没有彻底调查,但这似乎只会导致重定向。但是,根据你儿子的年龄(即聪明程度),找出所需的 IP 地址就足够了(例如打开和发出)。我假设有一堆其他主机名可以指向 YouTube 内容。www.m.youtube.comcmdping m.youtube.com

总而言之,它不是, 但主机名您在浏览器的导航栏中输入的内容以及放入文件中的内容hosts,不幸的是,首先,您不知道有多少个主机名以及哪些主机名解析到同一个主机,这就是您所描述的保护系统无法做到万无一失的原因之一。

[有方法可以调查域中使用的主机名,但我认为这些细节在这里与主题无关,并且您的保护系统还有其他注意事项。此外,YouTube 可以随时添加和删除其他主机名,因此您必须定期检查。]

相关内容