介绍
有时我们使用香港或者台湾的动态IP家宽vps,大部分商家都是支持api自助更换IP的,目前大部分的做法是设置定时任务,固定一个时间更换IP,或者是我们都是发现了IP被墙,然后手动去执行更换IP的命令,但是小白发现这样还是不够智能,如果我们能实现实时检测IP是否被墙,如果被墙了就更换IP,岂不美哉?
检测IP是否被墙脚本
我们先来写一个检测IP是否被墙的脚本,小白这里使用的是ping命令,脚本如下:
#!/bin/bash # 获取IP地址 ip_address=$(curl -s ifconfig.me) # 执行ping命令,并检查结果 if ping -c 5 -W 2 -i 0.2 www.itdog.cn | grep "100% packet loss" > /dev/null then echo "当前IP已经被封锁" else echo "当前IP未被封锁" fi
这里稍微说明下,这个脚本使用curl命令获取当前主机的公网IP地址,并将其保存在变量ip_address中。然后,它使用ping命令来ping这个网站www.itdog.cn,并在5次ping尝试中每次ping等待2秒钟。如果ping命令返回的结果中包含“100% packet loss”等错误,则说明您的IP可能被封锁了。否则,脚本将输出“当前IP未被封锁”。
小白这里采用的itdog,你可以采用其他任意网站或者境内IP,但是这里有两点说明:
1.此网站的域名必须是域名ping的,如果禁ping了,回造成一直提示当前IP已被封锁。
2.此网站必须没有境外cdn节点,因为如果这个网站存在境外cdn节点,那会一直提示当前IP未被封锁。具体可通过itdog.cn查看该网站是否存在境外cdn节点。
请注意,这个脚本可能需要适当的修改,以确保它能够正常工作并符合您的要求。同时,这个方法也可能不是100%准确,并且可能会受到网络拥堵、临时封锁等因素的影响。因此,建议您结合多种方法和工具,以获得更准确的检测结果。
我们已将脚本内容保存到test.sh,来看下实际效果:
root@debian ~ # bash test.sh 当前IP未被封锁 root@C2023 ~ # bash test.sh 当前IP已经被封锁
配合api换IP命令
现在,假设我们的api换IP名利为:
curl http://10.10.9.6/changeip/changeip.aspx
我们将换IP的命令与上面的检测IP是否被墙命令配合起来即可,具体脚本如下:
#!/bin/bash # 获取IP地址 ip_address=$(curl -s ifconfig.me) # 执行ping命令,并检查结果 if ping -c 5 -W 2 -i 0.2 www.itdog.cn | grep "100% packet loss" > /dev/null then echo "当前IP已经被封锁,正在尝试换IP..." # 执行换IP的命令 curl http://10.10.9.6/changeip/changeip.aspx echo "IP已经更换完成。" else echo "当前IP未被封锁" fi
在这个脚本中,当IP被封锁时,它会输出一条信息,指示它正在尝试更换IP,并执行换IP的命令。然后,它输出另一条信息,指示IP已经更换完成。如果IP未被封锁,则仅输出一条信息,指示当前IP未被封锁。
请注意,这个脚本中的换IP的命令是针对您特定的网络环境设置的,您需要根据您的实际情况进行修改,以确保它能够正常工作。同时,这个方法也可能不是100%准确,并且可能会受到网络拥堵、临时封锁等因素的影响。因此,建议您结合多种方法和工具,以获得更准确的检测结果。
加入定时任务
如果您希望在特定的时间间隔内自动执行这个脚本,可以使用Linux系统中的定时任务工具——crontab。您可以通过编辑crontab文件来设置定时任务,让系统在指定的时间自动执行脚本。
我们将脚本保存为script.sh
,记得给执行权限:chmod +x script.sh
以下是一个示例命令,用于打开crontab文件并添加定时任务:
crontab -e
5 * * * * /bin/bash /path/to/your/script.sh >/dev/null 2>&1
*/1 * * * * /bin/bash /path/to/your/script.sh >/dev/null 2>&1