用脚本限制程序联网怎么做

wen 实用脚本 1

本文目录导读:

用脚本限制程序联网怎么做

  1. Windows 系统
  2. Linux 系统
  3. macOS 系统
  4. 跨平台 Python 脚本
  5. 高级技巧
  6. 注意事项

我来介绍几种用脚本限制程序联网的方法,按操作系统分类说明:

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

注意事项

  1. 权限要求:大部分防火墙操作需要管理员/root权限
  2. 重启持久化:需要将规则保存为系统服务或启动脚本
  3. 绕过风险:程序可能有多种路径或动态加载方式,需考虑覆盖
  4. 测试验证:实施后应验证限制是否生效

选择哪种方式取决于你的操作系统和使用场景,如果是长期限制,建议使用系统防火墙规则;如果是临时测试,可以考虑沙箱工具。

抱歉,评论功能暂时关闭!