我想在 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 上,要在启动时运行需要提升权限的程序,您需要使用另一种方法,例如之前链接的任务计划程序方法。