很多时候内网做了公网映射,出门在外想要连回家,可以通过获取的公网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需要和脚本处在同级目录下 Updatefi}
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_IPValidation注意checkip.txt的路径,然后把脚本添加到系统定时任务里。
成品效果图
