This commit is contained in:
sushen339
2025-11-18 04:17:40 +08:00
parent 3c44f41dc2
commit 43c7d79e09
+28 -25
View File
@@ -143,33 +143,9 @@ ban_ip() {
# 查询新IP的国家信息
COUNTRY_CODE=$(curl -s --max-time 2 "https://ipinfo.io/$BASE_IP/country" 2>/dev/null | tr -d '\n\r ')
[ -n "$COUNTRY_CODE" ] && [ ${#COUNTRY_CODE} -ne 2 ] && COUNTRY_CODE=""
# 趁API可用时,为文件中没有国家信息的旧IP补充查询(最多补充3个,避免耗时过长)
if [ -f "$PERSIST_FILE" ] && [ -s "$PERSIST_FILE" ]; then
UPDATE_COUNT=0
TEMP_UPDATE="/tmp/block_ip_update_$$"
cp "$PERSIST_FILE" "$TEMP_UPDATE"
while IFS= read -r line; do
[ "$UPDATE_COUNT" -ge 3 ] && break
# 只处理不含'|'的IPv4单IP行
if ! echo "$line" | grep -q '|' && ! echo "$line" | grep -q ':' && ! echo "$line" | grep -q '/'; then
OLD_IP="$line"
OLD_COUNTRY=$(curl -s --max-time 2 "https://ipinfo.io/$OLD_IP/country" 2>/dev/null | tr -d '\n\r ')
if [ -n "$OLD_COUNTRY" ] && [ ${#OLD_COUNTRY} -eq 2 ]; then
# 在临时文件中替换该行
sed -i "s|^$OLD_IP$|$OLD_IP|$OLD_COUNTRY|" "$TEMP_UPDATE"
UPDATE_COUNT=$((UPDATE_COUNT + 1))
log "[补充地区] IP=$OLD_IP 国家=$(get_country_name "$OLD_COUNTRY")"
fi
fi
done < "$PERSIST_FILE"
# 如果有更新则覆盖原文件
[ "$UPDATE_COUNT" -gt 0 ] && mv "$TEMP_UPDATE" "$PERSIST_FILE" || rm -f "$TEMP_UPDATE"
fi
fi
# 先保存新IP到文件
if [ "$SAVE_DISK" -eq 1 ]; then
# 检查是否已存在(支持带国家代码的格式)
if ! grep -qE "^$TARGET_IP(\||$)" "$PERSIST_FILE" 2>/dev/null; then
@@ -182,6 +158,33 @@ ban_ip() {
log "[执行封禁] IP=$TARGET_IP 已封禁"
fi
fi
# 新IP保存后,趁API可用时为文件中没有国家信息的旧IP补充查询(最多补充3个)
if [ "$SHOULD_QUERY" -eq 1 ] && command -v curl >/dev/null 2>&1; then
if [ -f "$PERSIST_FILE" ] && [ -s "$PERSIST_FILE" ]; then
UPDATE_COUNT=0
TEMP_UPDATE="/tmp/block_ip_update_$$"
cp "$PERSIST_FILE" "$TEMP_UPDATE"
while IFS= read -r line; do
[ "$UPDATE_COUNT" -ge 3 ] && break
# 只处理不含'|'的IPv4单IP行,且不是刚添加的IP
if [ "$line" != "$TARGET_IP" ] && ! echo "$line" | grep -q '|' && ! echo "$line" | grep -q ':' && ! echo "$line" | grep -q '/'; then
OLD_IP="$line"
OLD_COUNTRY=$(curl -s --max-time 2 "https://ipinfo.io/$OLD_IP/country" 2>/dev/null | tr -d '\n\r ')
if [ -n "$OLD_COUNTRY" ] && [ ${#OLD_COUNTRY} -eq 2 ]; then
# 在临时文件中替换该行
sed -i "s|^$OLD_IP$|$OLD_IP|$OLD_COUNTRY|" "$TEMP_UPDATE"
UPDATE_COUNT=$((UPDATE_COUNT + 1))
log "[补充地区] IP=$OLD_IP 国家=$(get_country_name "$OLD_COUNTRY")"
fi
fi
done < "$PERSIST_FILE"
# 如果有更新则覆盖原文件
[ "$UPDATE_COUNT" -gt 0 ] && mv "$TEMP_UPDATE" "$PERSIST_FILE" || rm -f "$TEMP_UPDATE"
fi
fi
elif [ "$SAVE_DISK" -ne 2 ]; then
log "[执行封禁] IP=$TARGET_IP 已封禁"
fi