本文目录导读:

我来介绍几种用脚本限制程序联网的方法,按操作系统分类说明:
Windows 系统
使用 PowerShell 脚本(防火墙规则)
# 以管理员身份运行 # 禁止特定程序联网 $programPath = "C:\Program Files\YourApp\app.exe" $ruleName = "Block_YourApp" # 添加入站规则 New-NetFirewallRule -DisplayName $ruleName -Direction Inbound -Program $programPath -Action Block # 添加出站规则 New-NetFirewallRule -DisplayName $ruleName -Direction Outbound -Program $programPath -Action Block # 如果要删除规则 # Remove-NetFirewallRule -DisplayName $ruleName
使用 netsh 命令脚本
@echo off :: 需要管理员权限 netsh advfirewall firewall add rule name="Block_App" dir=out program="C:\Path\to\app.exe" action=block netsh advfirewall firewall add rule name="Block_App" dir=in program="C:\Path\to\app.exe" action=block echo 程序已加入防火墙黑名单 pause
Linux 系统
使用 iptables 脚本
#!/bin/bash # 需要root权限 # 禁止特定程序联网(通过用户/组) # 创建专用用户运行该程序 useradd -m blocked_app_user # 禁止该用户访问网络 iptables -A OUTPUT -m owner --uid-owner blocked_app_user -j DROP iptables -A INPUT -m owner --uid-owner blocked_app_user -j DROP # 保存规则 iptables-save > /etc/iptables/rules.v4
使用 firejail(沙箱工具)
#!/bin/bash # 安装:sudo apt install firejail # 在无网络环境下运行程序 firejail --net=none your_program # 或对特定程序创建配置 cat > /etc/firejail/your_program.local << EOF net none EOF
macOS 系统
#!/bin/bash # 使用 pfctl 防火墙 # 创建规则文件 cat > /tmp/block_rule.pf << EOF block out proto tcp from any to any user = your_user block in proto tcp from any to any user = your_user EOF # 加载规则(需要root) sudo pfctl -f /tmp/block_rule.pf sudo pfctl -e
跨平台 Python 脚本
#!/usr/bin/env python3
import subprocess
import sys
import platform
def block_app_windows(app_path):
"""Windows平台实现"""
rule_name = "Block_Application"
# 添加入站和出站规则
for direction in ["in", "out"]:
subprocess.run([
"netsh", "advfirewall", "firewall", "add", "rule",
f"name={rule_name}", f"dir={direction}",
f"program={app_path}", "action=block",
"enable=yes"
], shell=True, check=True)
print(f"已阻止 {app_path} 联网")
def block_app_linux(app_path):
"""Linux平台实现"""
import os
if os.geteuid() != 0:
print("需要root权限运行此脚本")
sys.exit(1)
# 使用iptables按路径过滤(需要配置)
rule = f"-A OUTPUT -m path --path \"{app_path}\" -j DROP"
subprocess.run(["iptables"] + rule.split(), check=True)
print(f"已在Linux防火墙中阻止 {app_path}")
if __name__ == "__main__":
if len(sys.argv) < 2:
print("用法: python block_net.py <程序路径>")
sys.exit(1)
app_path = sys.argv[1]
system = platform.system()
if system == "Windows":
block_app_windows(app_path)
elif system == "Linux":
block_app_linux(app_path)
elif system == "Darwin": # macOS
print("macOS请手动配置pfctl防火墙")
else:
print("不支持的平台")
高级技巧
临时限制(使用 timeout)
# 限制程序运行时间(间接限制网络访问) timeout 30 your_program # 或使用 cpulimit 限制CPU # 配合防火墙规则使用
按时间限制的网络访问
#!/bin/bash # 工作日限制某个程序的网络访问 # 创建cron任务 crontab -e # 添加以下规则 # 周一至周五 9:00 阻止 0 9 * * 1-5 /path/to/block_script.sh start # 周一至周五 18:00 解除 0 18 * * 1-5 /path/to/block_script.sh stop
基于网络流量限制(使用tc)
#!/bin/bash # 限制特定程序的网络带宽 tc qdisc add dev eth0 root handle 1: htb default 30 tc class add dev eth0 parent 1: classid 1:1 htb rate 10kbps tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip src 192.168.1.100 flowid 1:1
注意事项
- 权限要求:大部分防火墙操作需要管理员/root权限
- 重启持久化:需要将规则保存为系统服务或启动脚本
- 绕过风险:程序可能有多种路径或动态加载方式,需考虑覆盖
- 测试验证:实施后应验证限制是否生效
选择哪种方式取决于你的操作系统和使用场景,如果是长期限制,建议使用系统防火墙规则;如果是临时测试,可以考虑沙箱工具。