146 lines
6.4 KiB
Bash
146 lines
6.4 KiB
Bash
#!/bin/sh
|
||
#############
|
||
# 脚本说明:
|
||
# 1. 执行./naive.sh start,启动naiveproxy
|
||
# 2. 执行./naive.sh stop,停止naiveproxy
|
||
# 3. 执行脚本会创建文件夹naiveproxy,并下载naiveproxy到naiveproxy目录下
|
||
# 4. 脚本会自动判断当前环境是M1还是x86,下载对应的naiveproxy
|
||
# 5. 脚本会自动创建配置文件config.json,并写入配置
|
||
# 6. 脚本会自动检测设定的端口是否被占用,如果被占用,则杀掉占用进程
|
||
# 7. 脚本会自动检测naiveproxy进程是否存在,如果存在,则杀掉进程
|
||
#############
|
||
# 定义变量
|
||
SOCKS_PORT="1080"
|
||
HTTP_PORT="1099"
|
||
PAC_URL="https://pac.disbaidu.com/gfw.pac"
|
||
PAC2_URL="https://pac.disbaidu.com/gfw2.pac"
|
||
NAIVE_DOWNLOAD_ARM64="https://sync.disbaidu.com/naive/naiveproxy-mac-arm64.tar.xz"
|
||
NAIVE_DOWNLOAD_X64="https://sync.disbaidu.com/naive/naiveproxy-mac-x64.tar.xz"
|
||
CONFIG_PROXY_URL="https://onghan:onghan@o.disbaidu.com" # 这个也建议作为变量
|
||
|
||
# 判断是否mac系统
|
||
if [ "$(uname)" != "Darwin" ]; then
|
||
echo "当前系统不是MacOS。"
|
||
exit 1
|
||
fi
|
||
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||
cd "$SCRIPT_DIR" || { echo "错误:无法切换到脚本所在的目录。"; exit 1; }
|
||
|
||
# 判断当前是否存在naiveproxy目录,如果不存在,则创建
|
||
if [ ! -d "naiveproxy" ]; then
|
||
mkdir -p naiveproxy || { echo "错误:无法创建 naiveproxy 目录。"; exit 1; }
|
||
echo "创建$(pwd)/naiveproxy目录"
|
||
fi
|
||
cd naiveproxy || { echo "错误:无法切换到 naiveproxy 目录。"; exit 1; }
|
||
|
||
# 判断是否存在naive文件,如果不存在,则下载
|
||
if [ ! -f "naive" ]; then
|
||
echo "naive文件不存在,开始下载"
|
||
# 判断当前环境是M1还是x86,下载对应的naiveproxy
|
||
if [ $(uname -m) = "arm64" ]; then
|
||
echo "当前环境是M1,下载M1版naiveproxy"
|
||
curl -L -o naive.tar.xz "$NAIVE_DOWNLOAD_ARM64"
|
||
else
|
||
echo "当前环境是x86,下载x86版naiveproxy"
|
||
curl -L -o naive.tar.xz "$NAIVE_DOWNLOAD_X64"
|
||
fi
|
||
# 解压naive文件
|
||
echo "解压naive文件"
|
||
tar -xf naive.tar.xz
|
||
mv naiveproxy-* naivetmp
|
||
cp naivetmp/naive naive
|
||
rm -rf naivetmp
|
||
rm naive.tar.xz
|
||
fi
|
||
# 判断config.json文件是否存在,如果不存在,创建配置文件并写入配置
|
||
if [ ! -f "config.json" ]; then
|
||
echo "config.json文件不存在,创建配置文件并写入配置"
|
||
echo '{ "listen": ["socks://127.0.0.1:'"$SOCKS_PORT"'","http://127.0.0.1:'"$HTTP_PORT"'"], "proxy": "'"$CONFIG_PROXY_URL"'", "log": "o.log"}' >config.json
|
||
sleep 2
|
||
fi
|
||
# 检测第一个参数是否为启动参数或是空,如果是,则启动naiveproxy
|
||
if [ "$1" = "start" ] || [ -z "$1" ]; then
|
||
echo "启动naiveproxy"
|
||
# 启动naiveproxy
|
||
# 是否存在naive进程,如果存在,则杀掉进程
|
||
if pgrep -f "naive"; then
|
||
echo "naiveproxy进程存在,杀掉进程"
|
||
killall naive
|
||
sleep 2
|
||
fi
|
||
# 检测socks的端口是否被占用,如果被占用,则杀掉占用进程
|
||
if lsof -i:"$SOCKS_PORT" | grep -q "LISTEN"; then
|
||
echo "注意:$SOCKS_PORT 端口被占用。"
|
||
read -r -p "是否杀掉占用 $SOCKS_PORT 端口的进程?(y/N) " response
|
||
if [[ "$response" =~ ^([yY])$ ]]; then
|
||
echo "杀掉占用 $SOCKS_PORT 端口的进程"
|
||
lsof -i:"$SOCKS_PORT" | awk '{print $2}' | xargs kill -9
|
||
sleep 2
|
||
else
|
||
echo "用户取消,不杀掉占用 $SOCKS_PORT 端口的进程。脚本退出。"
|
||
exit 1 # 如果端口被占用且用户选择不杀掉,通常脚本无法继续,所以选择退出
|
||
fi
|
||
fi
|
||
# 检测http端口是否被占用,如果被占用,则杀掉占用进程
|
||
if lsof -i:"$HTTP_PORT" | grep -q "LISTEN"; then
|
||
echo "注意:$HTTP_PORT 端口被占用。"
|
||
read -r -p "是否杀掉占用 $HTTP_PORT 端口的进程?(y/N) " response
|
||
if [[ "$response" =~ ^([yY])$ ]]; then
|
||
echo "杀掉占用 $HTTP_PORT 端口的进程"
|
||
lsof -i:"$HTTP_PORT" | awk '{print $2}' | xargs kill -9
|
||
sleep 2
|
||
else
|
||
echo "用户取消,不杀掉占用 $SOCKS_PORT 端口的进程。脚本退出。"
|
||
exit 1 # 如果端口被占用且用户选择不杀掉,通常脚本无法继续,所以选择退出
|
||
fi
|
||
fi
|
||
echo "开始启动naive 代理..."
|
||
nohup "$SCRIPT_DIR"/naiveproxy/naive "$SCRIPT_DIR"/naiveproxy/config.json >/dev/null 2>&1 &
|
||
sleep 2
|
||
# 测试socks代理是否正常工作
|
||
REQUESTS=$(curl -x socks5h://127.0.0.1:"$SOCKS_PORT" -m 5 -sL https://pac-9d7.pages.dev/access)
|
||
if [ -z "$REQUESTS" ]; then
|
||
echo "naiveproxy启动失败!"
|
||
osascript -e 'tell app "System Events" to display dialog "代理启动失败!" buttons {"OK"}'
|
||
exit 1
|
||
fi
|
||
# 测试http代理是否正常工作
|
||
REQUESTS=$(curl -x http://127.0.0.1:"$HTTP_PORT" -m 5 -sL https://pac-9d7.pages.dev/access)
|
||
if [ -z "$REQUESTS" ]; then
|
||
echo "naiveproxy启动失败!"
|
||
osascript -e 'tell app "System Events" to display dialog "代理启动失败!" buttons {"OK"}'
|
||
exit 1
|
||
fi
|
||
|
||
if pgrep -f "naive"; then
|
||
# 设置pac自动代理
|
||
echo "设置PAC的http代理。。。"
|
||
networksetup -setautoproxyurl Wi-Fi "$PAC_URL"
|
||
echo "naiveproxy启动成功!"
|
||
osascript -e 'tell app "System Events" to display dialog "代理启动成功,已设置PAC代理。直接打开浏览器就可以自由上网。\n本地代理为:http://127.0.0.1:'"$HTTP_PORT"'\n代理测试结果:'"$REQUESTS"'" buttons {"OK"}'
|
||
exit 0
|
||
else
|
||
echo "naiveproxy启动失败!"
|
||
exit 1
|
||
fi
|
||
elif [ "$1" = "stop" ]; then
|
||
# 取消pac自动代理
|
||
networksetup -setautoproxystate Wi-Fi off
|
||
echo "停止naiveproxy"
|
||
# 停止naiveproxy
|
||
if pgrep -f "naive"; then
|
||
killall naive
|
||
else
|
||
echo "naiveproxy进程不存在"
|
||
fi
|
||
# 检测设定的端口是否被占用,如果被占用,则杀掉占用进程
|
||
if lsof -i:"$SOCKS_PORT" | grep -q "LISTEN"; then
|
||
echo "$SOCKS_PORT端口被占用,杀掉占用进程"
|
||
lsof -i:"$SOCKS_PORT" | awk '{print $2}' | xargs kill -9
|
||
fi
|
||
osascript -e 'tell app "System Events" to display dialog "已关闭代理服务器,关闭PAC代理。" buttons {"OK"}'
|
||
|
||
else
|
||
echo "参数错误,请输入 ./naive start或 ./naive stop"
|
||
fi
|