在 Windows 10 计算机上阻止互联网/使用密码解除阻止

在 Windows 10 计算机上阻止互联网/使用密码解除阻止

我想在 Windows 10 计算机(通过以太网电缆连接)上默认阻止互联网。

暂时,我想允许互联网访问(通过启动脚本.bat,.py(Python 也可以)或其他任何脚本),并提示密码。

重新启动后,它应该始终返回到“阻止”状态。

如何使用 Windows 内置工具执行此操作(最好无需安装任何第三方软件)?

注意:正如评论中所建议的,有没有办法通过命令行阻止以太网适配器?然后我会把它打包成一个 .BAT 批处理脚本,并带有密码提示,这对于我的用例来说就足够了(将互联网限制给孩子;如果他们设法编辑脚本来解除自己的阻止,那么这是一个好迹象,他们喜欢脚本,然后他们就应该可以访问互联网!)

答案1

通过启用/禁用网络适配器来启用或禁用互联网非常简单。请注意,计算机也将失去所有网络连接,例如通过网络连接到本地网络打印机。

这需要管理员密码,因此只要孩子没有发现它就受到保护(如果他们发现了,那么任何限制都不会起作用)。

使用批处理命令

以管理员身份运行命令提示符,您可以使用以下命令列出所有网络接口:

netsh interface show interface

确切的适配器名称可以在“接口名称”列下找到。

一旦知道名称,以下命令将禁用或启用该适配器:

netsh interface set interface "YOUR-ADAPTER-NAME" disable
netsh interface set interface "YOUR-ADAPTER-NAME" enable

使用 PowerShellUsing PowerShell

以管理员身份运行“Windows PowerShell”。要列出适配器,请输入:

Get-NetAdapter | format-table

您将在“名称”栏下找到该适配器。

要禁用或启用适配器,请使用:

Disable-NetAdapter -Name "YOUR-ADAPTER-NAME" -Confirm:$false
Enable-NetAdapter -Name "YOUR-ADAPTER-NAME" -Confirm:$false

有关更多信息和方法,请参阅 Microsoft Scripting 博客
使用 PowerShell 启用和禁用网络适配器


你也可能对此有兴趣 Windows 家庭安全,它可以让您监控和限制孩子的活动。

答案2

除了 harrymc 的答案,它提供了一种很好的阻止方法全部网络流量,这里有一个简单的方法可以保持对 LAN 的访问(例如打印机、NAS 等),但阻止互联网访问:

route delete 0.0.0.0从路由表中删除默认路由。也就是说,PC 仍然知道如何与以太网适配器所属的子网通信,但不知道将目的地位于该子网之外的数据包发送到何处。要重新连接,只需执行route add 0.0.0.0 mask 0.0.0.0 aaa.bbb.ccc.ddd,其中aaa.bbb.ccc.ddd是网关(路由器)的 IP 地址。

由于执行route命令需要管理员权限,因此您的密码要求得到满足。例如,您可以将上面显示的两个命令放入两个不同的批处理文件中,并在桌面上创建它们的快捷方式。然后编辑快捷方式的属性,点击“高级...”按钮并选中“以管理员身份运行”。每次执行快捷方式时,Windows 的 UAC 都会弹出(除非您已禁用它或您已经是管理员)并要求输入管理员密码(除非您是管理员组的成员)。

但请注意以下几点:

  • 这可能对你有用,也可能没用,这取决于该 PC 是否通过 DHCP 配置(使用 DHCP,路由器可以宣布自己是网关,这可能会覆盖你所做的设置)。我建议为该 PC 提供一个静态 IP 地址或使用 harrymc 的解决方案。

  • 我目前无法测试,但我怀疑默认路由会在您重新启动 PC 时再次设置,至少如果它是通过 DHCP 配置的,那么您的“重新启动后阻止”要求首先就不满足。您可以通过让 Windows 在启动时执行您的“禁用脚本”来规避这种情况,例如通过任务计划程序(但也有其他机制)。所以 harrymc 的解决方案可能再次更简单。

我提出这个建议仅仅是因为 - 如上所述 - 它不那么激进并且只会阻止对互联网的访问,而不会阻止对本地子网的访问。

最后,还有其他想法。例如,从网络配置中删除 DNS 服务器(再次强调,可以访问本地子网,但无法访问互联网,可能被 DHCP 绕过),或者让防火墙阻止到互联网的流量,但不阻止到本地子网的流量(防火墙解决方案在重新启动后肯定不会失效,并且不能被 DHCP 绕过)。

基本思想始终相同:实现该思想所需的所有命令都需要管理权限,并且可以在 CMD 或 Powershell 脚本中使用。因此,让 Windows 处理密码部分很容易(通过 UAC)。

答案3

受到@harrymc 的回答的启发,这是我最终使用的:

  • 使用以下方法创建任务计划程序任务如何在 Windows 10 启动时以管理员身份运行程序?,启动一个在启动时执行此操作的 .bat 文件:

    netsh interface set interface "Ethernet" disable
    
  • 然后,如果您的机器上安装了 Python,请创建一个unblockinternet.py执行以下操作的文件:

    import os, hashlib, getpass
    import win32com.shell.shell as shell  # required on Win10 to run with elevated privileges
    pwd = getpass.getpass().encode()
    if hashlib.sha256(pwd).hexdigest() == 'ccadd99b16cd3d200c22d6db45d8b6630ef3d936767127347ec8a76ab992c2ea': # password: blabla
        commands = 'netsh interface set interface "Ethernet" enable'
        shell.ShellExecuteEx(lpVerb='runas', lpFile='cmd.exe', lpParameters='/c '+commands)
    
    

    当我的孩子双击“unblockinternet”快捷方式时,系统会提示输入密码。

    当然,一旦他们学会了 Python 或批处理,他们就能够复制粘贴netsh ... enable;)但是现在没问题!

    我还可以加密细绳 'netsh interface set interface "Ethernet" enable'使用从中派生的加密密钥,pwd以便此行代码在 .py 文件中不可见。我稍后会这样做。

注意:我首先尝试了以下方法:运行shell:common startup,打开“启动”文件夹,在那里创建一个新的快捷方式netsh interface set interface "Ethernet" disable,进入快捷方式属性,并默认设置为“最小化”。但这不起作用:在 Windows 10 上,要在启动时运行需要提升权限的程序,您需要使用另一种方法,例如之前链接的任务计划程序方法。

相关内容