公网IP检测

   脚本如下:

#!/bin/bash
#author firxiao
#monitor IP change
#date:20141128
ip_old=ip_old.txt   
ip_now=ip_now.txt
mail_sender=xxx@xxx.com    #发件人
mail_user=xxx@xxx.com      #收件人
mail_subject=IP_MONITOR    #邮件标题
#init ip.old
while [ ! -f $ip_old ]; do
/usr/bin/curl ifconfig.me > $ip_old
done
#get ip now
/usr/bin/curl ifconfig.me > $ip_now
#compare
/usr/bin/diff $ip_now $ip_old
#if different change ip_old and send mail
if [ $? != 0 ];then
cat $ip_now >$ip_old
echo "IP has changed , the new IP is $(cat $ip_now ) !!!" |mail -s "$mail_subject" -S from=$mail_sender "$mail_user"
fi

使用方法:

   将此内容复制至 ip_monitor.sh  可自定义 修改发件人 收件人 邮件标题  

   chmod+x ip_monitor.sh

   添加计划任务

   例如每五分钟检测一次

*/5 * * * * /root/ip_monitor.sh >/dev/null 2>&1

注意: 此脚本邮件功能依赖 mail  centos安装 yum install mail



新加python版的,详见: 

http://my.oschina.net/firxiao/blog/490542 

转载于:https://my.oschina.net/firxiao/blog/349727

#!/bin/bash # PPPoE公网IP自动检测与重拨脚本 MAX_RETRY=10 RETRY_DELAY=25 # 重拨后等待时间(建议大于拨号耗时) SLEEP_INTERVAL=10 count=0 success=false echo "[$(date '+%Y-%m-%d %H:%M:%S')] PPPoE公网IP检测启动..." while [[ $count -lt $MAX_RETRY ]]; do # 1. 获取公网IP(带重试机制) public_ip="" for i in {1..3}; do public_ip=$(curl -s --connect-timeout 10 https://4.ipw.cn) [[ -n "$public_ip" ]] && break echo "[$(date '+%Y-%m-%d %H:%M:%S')] 获取公网IP失败,重试中... ($i/3)" sleep 2 done # 2. 获取本地PPPoE接口IP current_ip=$(ip -o -4 addr show dev pppoe-wan 2>/dev/null | awk '{gsub(/\/.*/, "", $4); print $4}') # 3. 检测IP有效性 if [[ -z "$public_ip" ]]; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] 错误: 无法获取公网IP" elif [[ -z "$current_ip" ]]; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] 警告: PPPoE接口无IP地址" elif [[ "$public_ip" == "$current_ip" ]]; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] 成功: 公网IP匹配 ($public_ip)" success=true break else echo "[$(date '+%Y-%m-%d %H:%M:%S')] 检测到非公网IP: 公网=$public_ip, 本地=$current_ip" fi # 4. 需要时执行重拨 if [[ -z "$public_ip" ]] || [[ -z "$current_ip" ]] || [[ "$public_ip" != "$current_ip" ]]; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] 执行网络重拨..." # 安全执行ifdown if ! ifdown wan; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] 错误: ifdown执行失败!" exit 1 fi sleep 5 # 安全执行ifup if ! ifup wan; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] 错误: ifup执行失败!" exit 1 fi ((count++)) echo "[$(date '+%Y-%m-%d %H:%M:%S')] 重拨完成 (尝试: $count/$MAX_RETRY)" sleep $RETRY_DELAY # 关键:等待拨号完成 else sleep $SLEEP_INTERVAL fi done if $success; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] 脚本执行成功" exit 0 else echo "[$(date '+%Y-%m-%d %H:%M:%S')] 错误: 超过最大重试次数($MAX_RETRY)" exit 1 fi
最新发布
07-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值