#!/bin/sh
# 定义检查 IP 是否为公网的函数
is_public_ip() {
# 获取当前 WAN IP
WAN_IP=$(nvram get wan0_ipaddr)
echo "当前 IP: $WAN_IP"
# 检查 IP 是否在私网范围
if echo "$WAN_IP" | grep -Eq "^(10\.|172\.1[6-9]\.|172\.2[0-9]\.|172\.3[0-1]\.|192\.168\.)"; then
return 1 # 私网 IP
fi
# 检查是否为无效 IP
if [ "$WAN_IP" = "0.0.0.0" ] || [ -z "$WAN_IP" ]; then
return 1 # 无效 IP
fi
return 0 # 公网 IP
}
# 定义重拨函数
redial() {
echo "当前 IP 非公网 IP,正在重新拨号..."
# 断开 WAN 连接
nvram set wan0_enable=0
service restart_wan
sleep 5
# 启用 WAN 连接
nvram set wan0_enable=1
service restart_wan
sleep 10
}
# 主逻辑
while true; do
if is_public_ip; then
echo "已拨到公网 IP: $WAN_IP"
break
else
redial
fi
done
# 定义检查 IP 是否为公网的函数
is_public_ip() {
# 获取当前 WAN IP
WAN_IP=$(nvram get wan0_ipaddr)
echo "当前 IP: $WAN_IP"
# 检查 IP 是否在私网范围
if echo "$WAN_IP" | grep -Eq "^(10\.|172\.1[6-9]\.|172\.2[0-9]\.|172\.3[0-1]\.|192\.168\.)"; then
return 1 # 私网 IP
fi
# 检查是否为无效 IP
if [ "$WAN_IP" = "0.0.0.0" ] || [ -z "$WAN_IP" ]; then
return 1 # 无效 IP
fi
return 0 # 公网 IP
}
# 定义重拨函数
redial() {
echo "当前 IP 非公网 IP,正在重新拨号..."
# 断开 WAN 连接
nvram set wan0_enable=0
service restart_wan
sleep 5
# 启用 WAN 连接
nvram set wan0_enable=1
service restart_wan
sleep 10
}
# 主逻辑
while true; do
if is_public_ip; then
echo "已拨到公网 IP: $WAN_IP"
break
else
redial
fi
done