很多时候内网做了公网映射,出门在外想要连回家,可以通过获取的公网IP访问回去,当然了,也可以把映射的IP指定到域名下,直接访问域名就可与访问家里局域网,但是呢,还是用获取公网IP连回去简单粗暴。

#!/usr/bin/sh
DATE="`date +%Y%m%d`"
DATE1="`date +%Y-%m-%d`"
DATE2="`date +%H:%M:%S`"
webhook='https://oapi.dingtalk.com/robot/send?access_token=tian'自己钉钉机器人的key'
OLD_IP=$(grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' checkip.txt)
NEW_IP=$(curl -s myip.ipip.net | sed s/IP://g | awk '{print $2}')
province=$(curl -s myip.ipip.net | awk '{print $4}')
city=$(curl -s myip.ipip.net | awk '{print $5}')
ISP=$(curl -s myip.ipip.net | awk '{print $6}')
function CheckIp
{
real_ip=$(echo $ip|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')
if echo $OLD_IP|grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$">/dev/null
then
if [ ${real_ip:no}=="yes" ]
then
echo "ip合法"
else
echo "ip不合法"
return 1
fi
else
echo "ip格式错误"
return 2
fi
}
function Validation {
if [ $NEW_IP = $OLD_IP ];
then
echo "IP一致,不必更新"
else
echo "IP不一致,执行更新"
echo $NEW_IP > checkip.txt #这个txt需要和脚本处在同级目录下
Update
fi
}
function Update {
curl $webhook -H 'Content-Type: application/json' -d '
{
"msgtype": "markdown",
"markdown": {
"title":"IP已更新,请注意查收!", #钉钉机器人添加IP关键字
"text": "# IP:'${NEW_IP}'\n\n---\n> 时间:'${DATE1}' '${DATE2}'\n\n> 归属地:'${province}''${city}'\n\n> 运营商:'${ISP}'"
},
"at": {
"atMobiles": [
"自己的手机号码"
],
"isAtAll": false
}
}'
}
CheckIp $OLD_IP
Validation

注意checkip.txt的路径,然后把脚本添加到系统定时任务里。

成品效果图