目前博客运行在家里的E5服务器上,微信登录接口的白名单会检测E5服务器的出口IP,家用IP经常出现公网IP发生变化的情况,当出口IP发生变化微信接口的白名单会拦截非白名单的IP。想实时监控出口的IP是否变化并及时修改整理的本次脚本
[root@blog ~]# cat /opt/ip_wechat.sh
#!/bin/bash
#保存要发送人员的账号,在通讯录可获取,多个人员之间使用空格分隔,以下为展示数据
user="abcdocker"
#企业微信ID:企业微信管理界面-’我的企业‘页面中获取
corpid="xxxwwc135adbb1d7c752d"
#应用秘钥:在‘自建应用’-‘创建应用’-‘应用管理’中获取
corpsecret="f2MBUMIhLrpM3NPTHo_xxxxxxxxx"
#企业应用ID:在'自建应用'-'创建应用'-'应用管理'中获取
agentld=1000004
#------------------------以上变量需要自行修改-----------------------------------
#curl -s 静默模式,就是不显示错误和进度
A=`curl -s https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$corpid\&corpsecret=$corpsecret`
#解析json格式 并获取access_token值
token=`echo $A | jq -c '.access_token'`
#去除变量值两边的双引号
token=${token#*\"}
token=${token%*\"}
#请求地址
URL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$token"
# 保存当前公网IP的文件
CURRENT_IP_FILE="/opt/current_ip.txt"
# 获取当前公网IP
NEW_IP=$(curl -s http://ipinfo.io/ip)
# 检查是否有变化
if [ ! -f "$CURRENT_IP_FILE" ]; then
# 如果文件不存在,保存当前IP并退出
echo "$NEW_IP" > "$CURRENT_IP_FILE"
echo "Initial IP saved: $NEW_IP"
exit 0
fi
# 加载当前保存的IP
OLD_IP=$(cat "$CURRENT_IP_FILE")
# 比较新旧IP
if [ "$NEW_IP" != "$OLD_IP" ]; then
# IP有变化,保存新IP并通知
echo "$NEW_IP" > "$CURRENT_IP_FILE"
echo "IP changed from $OLD_IP to $NEW_IP"
# 这里可以添加发送通知邮件或者其他操作
#请求地址
URL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$token"
msg='公网IP发生变化,新IP:'$NEW_IP' \n发生时间: '`date '+%Y-%m-%d-%H:%M:%S'`
for I in $user;do
#发送的JSON内容
JSON="{\"touser\": \"$I\",\"msgtype\": \"text\",\"agentid\": \"$agentld\",\"text\": {\"content\": \"$msg\"},\"safe\":0 }"
#以POST的方式请求
curl -d "$JSON" "$URL" >/dev/null 2>&1
done
else
echo "IP is still $NEW_IP"
fi
将脚本保存后新增定时任务
crontab -e
*/30 * * * * sh /opt/ip_wechat.sh &>/dev/null
当IP没有发生变化,执行结果如下
当IP发生变化,执行结果如下
告警内容如下