本文目录导读:

我来为您提供一个定时刷新代理设置的脚本,这里有几个不同场景的解决方案:
Linux/macOS 系统的简单Shell脚本
#!/bin/bash
# 代理设置
PROXY_HOST="127.0.0.1"
PROXY_PORT="7890"
# 不需要代理的地址
NO_PROXY="localhost,127.0.0.1,::1"
# 刷新间隔(秒)
INTERVAL=300 # 5分钟
# 日志文件
LOG_FILE="/var/log/proxy_refresh.log"
# 设置代理函数
set_proxy() {
export http_proxy="http://$PROXY_HOST:$PROXY_PORT"
export https_proxy="http://$PROXY_HOST:$PROXY_PORT"
export HTTP_PROXY="http://$PROXY_HOST:$PROXY_PORT"
export HTTPS_PROXY="http://$PROXY_HOST:$PROXY_PORT"
export no_proxy="$NO_PROXY"
export NO_PROXY="$NO_PROXY"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 代理设置已刷新" >> "$LOG_FILE"
echo "代理设置已成功更新"
}
# 清除代理函数
clear_proxy() {
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY no_proxy NO_PROXY
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 代理已清除" >> "$LOG_FILE"
echo "代理设置已清除"
}
# 检查代理是否可用
check_proxy() {
timeout 3 curl -s -o /dev/null -w "%{http_code}" \
--proxy "http://$PROXY_HOST:$PROXY_PORT" \
http://www.google.com 2>/dev/null || echo "000"
}
# 主循环
echo "代理刷新脚本启动..."
echo "刷新间隔: $INTERVAL 秒"
echo "代理地址: $PROXY_HOST:$PROXY_PORT"
echo "----------------------------------------"
while true; do
# 检查代理是否可用
HTTP_CODE=$(check_proxy)
if [ "$HTTP_CODE" = "000" ] || [ "$HTTP_CODE" = "" ]; then
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 代理不可用,跳过设置"
else
set_proxy
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 代理检查通过 (HTTP $HTTP_CODE)"
fi
echo "等待 $INTERVAL 秒后再次更新..."
sleep $INTERVAL
done
带配置文件的高级版本
#!/bin/bash
# 配置文件
CONFIG_FILE="$HOME/.proxy_config"
# 默认配置
if [ ! -f "$CONFIG_FILE" ]; then
cat > "$CONFIG_FILE" << EOF
# 代理配置
PROXY_HOST=127.0.0.1
PROXY_PORT=7890
# SOCKS5代理(可选)
SOCKS5_PROXY=127.0.0.1:1080
# 排除地址
NO_PROXY=localhost,127.0.0.1,::1,.local
# 刷新间隔(秒)
INTERVAL=300
# 日志级别 (INFO, WARN, ERROR)
LOG_LEVEL=INFO
EOF
echo "已创建配置文件: $CONFIG_FILE"
fi
# 加载配置
source "$CONFIG_FILE"
# 日志文件
LOG_DIR="/var/log/proxy_refresh"
LOG_FILE="$LOG_DIR/proxy_refresh.log"
STATUS_FILE="/tmp/proxy_status"
# 创建日志目录
mkdir -p "$LOG_DIR"
# 日志函数
log() {
local level=$1
local message=$2
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
# 根据日志级别过滤
case $LOG_LEVEL in
"ERROR") [ "$level" = "ERROR" ] && echo "[$timestamp] [$level] $message" >> "$LOG_FILE" ;;
"WARN") [[ "$level" =~ ^(ERROR|WARN)$ ]] && echo "[$timestamp] [$level] $message" >> "$LOG_FILE" ;;
"INFO") echo "[$timestamp] [$level] $message" >> "$LOG_FILE" ;;
esac
echo "[$timestamp] [$level] $message"
}
# 设置系统级代理 (Ubuntu/Debian)
set_system_proxy() {
# GNOME
if command -v gsettings &> /dev/null; then
gsettings set org.gnome.system.proxy mode 'manual'
gsettings set org.gnome.system.proxy.http host "$PROXY_HOST"
gsettings set org.gnome.system.proxy.http port "$PROXY_PORT"
gsettings set org.gnome.system.proxy.https host "$PROXY_HOST"
gsettings set org.gnome.system.proxy.https port "$PROXY_PORT"
log "INFO" "GNOME系统代理已设置"
fi
# KDE Plasma
if command -v kwriteconfig5 &> /dev/null; then
kwriteconfig5 --file kioslaverc --group "Proxy Settings" --key "ProxyType" 1
kwriteconfig5 --file kioslaverc --group "Proxy Settings" --key "httpProxy" "http://$PROXY_HOST:$PROXY_PORT"
kwriteconfig5 --file kioslaverc --group "Proxy Settings" --key "httpsProxy" "http://$PROXY_HOST:$PROXY_PORT"
log "INFO" "KDE系统代理已设置"
fi
# 保存当前状态
echo "active" > "$STATUS_FILE"
}
# 设置环境变量代理
set_env_proxy() {
export http_proxy="http://$PROXY_HOST:$PROXY_PORT"
export https_proxy="http://$PROXY_HOST:$PROXY_PORT"
export HTTP_PROXY="http://$PROXY_HOST:$PROXY_PORT"
export HTTPS_PROXY="http://$PROXY_HOST:$PROXY_PORT"
export no_proxy="$NO_PROXY"
export NO_PROXY="$NO_PROXY"
# 如果配置了SOCKS5代理
if [ -n "$SOCKS5_PROXY" ]; then
export ALL_PROXY="socks5://$SOCKS5_PROXY"
export all_proxy="socks5://$SOCKS5_PROXY"
fi
log "INFO" "环境变量代理已更新"
}
# 测试代理连接
test_proxy() {
local test_urls=("https://www.google.com" "https://www.baidu.com" "https://github.com")
for url in "${test_urls[@]}"; do
local result=$(timeout 5 curl -s -o /dev/null -w "%{http_code}" \
--proxy "http://$PROXY_HOST:$PROXY_PORT" \
"$url" 2>/dev/null)
if [ "$result" = "200" ] || [ "$result" = "301" ] || [ "$result" = "302" ]; then
log "INFO" "代理测试成功: $url (HTTP $result)"
return 0
fi
done
log "WARN" "所有代理测试失败"
return 1
}
# 设置IPTABLES透明代理(可选)
setup_transparent_proxy() {
# 注意:需要root权限
if [ "$EUID" -ne 0 ]; then
return
fi
# 重定向所有HTTP流量到代理端口
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port $PROXY_PORT 2>/dev/null
iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-port $PROXY_PORT 2>/dev/null
log "INFO" "透明代理规则已添加"
}
# 主函数
main() {
log "INFO" "========== 代理刷新服务启动 =========="
log "INFO" "代理地址: $PROXY_HOST:$PROXY_PORT"
log "INFO" "刷新间隔: $INTERVAL 秒"
# 初始设置
set_env_proxy
set_system_proxy
# 初始代理测试
if test_proxy; then
log "INFO" "初始代理设置成功"
else
log "WARN" "初始代理测试失败,将重试"
fi
# 主循环
while true; do
sleep $INTERVAL
# 定时刷新
log "INFO" "正在刷新代理设置..."
set_env_proxy
set_system_proxy
if test_proxy; then
log "INFO" "代理刷新成功"
else
log "WARN" "代理刷新后测试失败"
fi
# 检查代理状态文件(可由其他进程修改)
if [ -f "$STATUS_FILE" ] && [ "$(cat "$STATUS_FILE")" = "disable" ]; then
log "INFO" "检测到禁用信号,停止代理刷新"
exit 0
fi
done
}
# 捕获退出信号
trap 'log "INFO" "代理刷新服务停止"; exit 0' SIGINT SIGTERM
# 启动主函数
main
Windows PowerShell 脚本
# proxy_refresh.ps1
param(
[string]$ProxyHost = "127.0.0.1",
[int]$ProxyPort = 7890,
[int]$Interval = 300
)
# 日志配置
$LogPath = "$env:USERPROFILE\AppData\Local\proxy_refresh.log"
$BypassList = @("localhost", "127.0.0.1", "::1")
function Write-Log {
param([string]$Message)
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$logMessage = "[$timestamp] $Message"
Write-Host $logMessage
Add-Content -Path $LogPath -Value $logMessage
}
function Set-WindowsProxy {
param(
[string]$ProxyAddress,
[int]$ProxyPort
)
try {
# 设置IE/系统代理
$regPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
Set-ItemProperty -Path $regPath -Name "ProxyEnable" -Value 1
Set-ItemProperty -Path $regPath -Name "ProxyServer" -Value "${ProxyAddress}:${ProxyPort}"
Set-ItemProperty -Path $regPath -Name "ProxyOverride" -Value ($BypassList -join ";")
# 刷新系统代理设置
$proxySetting = @"
[InternetSettings]
ProxyEnable=1
ProxyServer=${ProxyAddress}:${ProxyPort}
ProxyOverride=$($BypassList -join ";")
"@
# 通过WinHTTP API设置代理
$winhttp = New-Object -ComObject WinHttp.WinHttpRequest.5.1
$winhttp.SetProxy(1, "${ProxyAddress}:${ProxyPort}", $BypassList -join ";")
Write-Log "Windows系统代理已设置为 ${ProxyAddress}:${ProxyPort}"
return $true
}
catch {
Write-Log "设置Windows代理失败: $_"
return $false
}
}
function Get-EnvironmentProxyVariables {
# 设置环境变量
$env:http_proxy = "http://${ProxyHost}:${ProxyPort}"
$env:https_proxy = "http://${ProxyHost}:${ProxyPort}"
$env:HTTP_PROXY = "http://${ProxyHost}:${ProxyPort}"
$env:HTTPS_PROXY = "http://${ProxyHost}:${ProxyPort}"
$env:no_proxy = $BypassList -join ","
$env:NO_PROXY = $BypassList -join ","
Write-Log "环境变量代理已更新"
}
function Test-ProxyConnection {
try {
$webClient = New-Object System.Net.WebClient
$webClient.Proxy = New-Object System.Net.WebProxy("http://${ProxyHost}:${ProxyPort}")
$result = $webClient.DownloadString("https://www.google.com")
Write-Log "代理连接测试成功"
return $true
}
catch {
Write-Log "代理连接测试失败: $_"
return $false
}
}
# 主循环
Write-Log "========== 代理刷新服务启动 =========="
Write-Log "代理地址: ${ProxyHost}:${ProxyPort}"
Write-Log "刷新间隔: ${Interval}秒"
Write-Log "===================================="
# 初始设置
Set-WindowsProxy -ProxyAddress $ProxyHost -ProxyPort $ProxyPort
Get-EnvironmentProxyVariables
# 测试初始连接
if (-not (Test-ProxyConnection)) {
Write-Log "初始连接测试失败"
}
# 循环刷新
while ($true) {
Start-Sleep -Seconds $Interval
Write-Log "正在刷新代理设置..."
# 重新设置代理
Set-WindowsProxy -ProxyAddress $ProxyHost -ProxyPort $ProxyPort
Get-EnvironmentProxyVariables
# 测试连接
Test-ProxyConnection | Out-Null
# 显示当前系统代理设置
$regPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
$currentProxy = Get-ItemProperty -Path $regPath -Name "ProxyServer" -ErrorAction SilentlyContinue
Write-Log "当前系统代理: $($currentProxy.ProxyServer)"
}
使用方法
Linux/macOS:
chmod +x proxy_refresh.sh ./proxy_refresh.sh
Windows:
# 运行PowerShell脚本 .\proxy_refresh.ps1 # 或者带参数运行 .\proxy_refresh.ps1 -ProxyHost "192.168.1.100" -ProxyPort 1080 -Interval 600
设置为系统服务(Linux)
创建 systemd 服务文件 /etc/systemd/system/proxy-refresh.service:
[Unit] Description=Proxy Refresh Service After=network.target [Service] Type=simple User=root ExecStart=/usr/local/bin/proxy_refresh.sh Restart=always RestartSec=10 [Install] WantedBy=multi-user.target
然后启用服务:
sudo systemctl daemon-reload sudo systemctl enable proxy-refresh sudo systemctl start proxy-refresh
这些脚本会自动定时刷新代理设置,确保代理连接稳定,您可以根据需要修改代理地址、端口和刷新间隔等参数。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播