住宅IP可用性监控脚本,批量检测代理连通性自动下线坏IP

住宅IP代理池在使用一段时间后,经常会出现部分IP响应缓慢、连接超时或者直接被目标站点屏蔽的情况。
如果这些坏IP还留在池子里,不仅会拖慢业务,还会增加大量无效重试。
本文提供一个轻量的住宅IP可用性监控脚本,能批量检测代理连通性,并自动下线失效IP,适合刚接触代理池维护的用户直接部署使用。
整个方案只需要一个脚本、一个IP列表和一台能执行bash命令的Linux服务器,不需要额外安装复杂组件。

脚本思路:先测通,再判定,最后下线

监控脚本的核心逻辑只有三步:读取代理IP列表 → 逐个发起连接测试 → 把失败或超时的IP标记并下线
这里说的“下线”并不是删除记录,而是把失效IP移入一个单独的坏IP文件,或者修改上游的加载名单,让程序不再调度这些IP。

在动手写脚本前,你需要准备三样东西:

  • 一个包含住宅IP、端口、用户名、密码的文本文件,每行一条记录,字段之间用冒号分隔,例如 1.2.3.4:8080:user:pass
  • 一个可用的测试目标地址,比如 http://httpbin.org/ip,用来验证代理是否真的能访问外网
  • 一台Linux服务器,能执行bash脚本即可,不挑发行版

批量检测脚本与自动下线逻辑

下面这段脚本适合放在服务器上直接运行,它会循环检测每个IP的连通性,失败次数达到阈值后自动写入下线名单。
请把 proxy_list.txt 替换成你的代理列表文件路径。

#!/bin/bash
# 住宅IP可用性监控脚本
PROXY_FILE="/opt/proxy_check/proxy_list.txt"
BAD_FILE="/opt/proxy_check/bad_ip.txt"
TEST_URL="http://httpbin.org/ip"
FAIL_THRESHOLD=2
TIMEOUT=10

temp_file="${PROXY_FILE}.tmp"
: > "$temp_file"
: > "$BAD_FILE"

while IFS= read -r line; do
  [ -z "$line" ] && continue
  ip=$(echo "$line" | cut -d':' -f1)
  port=$(echo "$line" | cut -d':' -f2)
  user=$(echo "$line" | cut -d':' -f3)
  pass=$(echo "$line" | cut -d':' -f4)

  fail_count=0
  for i in $(seq 1 $FAIL_THRESHOLD); do
    if curl -x "http://${user}:${pass}@${ip}:${port}" --connect-timeout "$TIMEOUT" -o /dev/null -s -w "%{http_code}" "$TEST_URL" | grep -q 200; then
      fail_count=0
      break
    else
      fail_count=$((fail_count+1))
    fi
  done

  if [ "$fail_count" -ge "$FAIL_THRESHOLD" ]; then
    echo "$line" >> "$BAD_FILE"
    echo "[下线] $ip:$port"
  else
    echo "$line" >> "$temp_file"
  fi
done < "$PROXY_FILE"

mv "$temp_file" "$PROXY_FILE"
echo "检测完成,有效IP已保留,失效IP已写入 bad_ip.txt"

完成检测后,源文件 proxy_list.txt 会自动移除所有检测失败的IP,被移除的IP会聚集在 bad_ip.txt 里。
你可以在业务端加上一个定时任务,比如每隔10分钟执行一次脚本,就能持续保持代理池可用。
建议先把脚本保存为 check_proxy.sh,然后执行 chmod +x check_proxy.sh 赋予权限。

部署时容易踩的几个坑

第一次运行脚本时,最常遇到的问题是curl 未安装认证信息含特殊字符误杀慢IP
这里给你三条避坑建议:

  • 检测前先执行 which curl 确认curl存在,没有就安装:apt install curl -yyum install curl -y
  • 如果用户名或密码中包含 @:% 等特殊字符,curl 会解析异常,建议先用 --proxy-user "user:pass" 参数替代直接拼接URL格式
  • 住宅IP本身延迟波动比较大,阈值建议保持在2次测试,超时时间不要低于5秒,否则容易把正常IP误判为坏IP

另外,如果你使用的是宝塔面板,执行脚本前记得在Supervisor或cron里设置正确的环境变量,避免脚本因PATH问题找不到curl命令。

怎么验证脚本真的生效

脚本跑完不能只看输出,需要实际确认IP是否已经无法使用。
你可以分别查看正常工作名单和失效名单里的IP,手动测试一个被下线的IP:

curl -x "http://user:pass@下线IP:port" --connect-timeout 5 http://httpbin.org/ip

正常情况下,这个请求会超时或返回代理错误,说明下线判断准确。
与此同时,随机抽验 proxy_list.txt 里剩余的IP,应该都能正常返回目标网页内容。
如果业务端有监控面板,也可以观察代理池请求成功率是否上升。
建议首次运行前先备份 proxy_list.txt,避免脚本逻辑异常导致有效IP被误删。

关于住宅IP监控的常见疑问

脚本能否同时检测 IPv4 和 IPv6 住宅IP? 可以,只要你的服务器支持对应网络栈,并保证curl能通过IPv6地址连接代理即可。
但注意IPv6地址中包含冒号,不能简单用冒号作字段分隔符,建议改用逗号或竖线分隔。

如何让下线IP自动重新上线? 坏IP有可能是临时抖动,不一定永久失效。
你可以把 bad_ip.txt 里的IP单独再做一次延迟测试,连续通过后再手动加回正式列表。
追求自动化的用户,可以配合一个第二脚本定期重测坏IP,恢复条件设为连续三次检测成功。

监控频率设多久比较合理? 住宅IP的稳定性随服务商和地区差异较大,一般业务建议10到15分钟检测一轮。
频率太高容易触发目标站点反爬,反而增加误封风险;
频率太低则无法及时清理失效IP。

住宅IP代理池的维护重点不是出问题后的紧急替换,而是常态化的自动检测。
这套脚本帮你把最耗时的探测和下线动作自动化,之后只需要定期观察坏IP文件和整体代理池规模,就能比较省心地保持业务稳定运行。
如果在生产环境使用,建议同时保留一份历史日志,方便定位某段时间代理池质量下滑的原因。

分享到:
上一篇
香港CN2 GIA服务器业务常见攻击,流量异常应急处理
下一篇
IDC业务客户自动化管理面板开发思路
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意