在 Linux 下,可以通过一条简单的 Shell 命令获取当前拨号接口的 IP,并把它发送到指定邮箱。下面的例子适用于 ADSL 拨号后出现 ppp0 接口的情况。
NOW_IP=`/sbin/ifconfig ppp0 | grep inet | awk {'print $2'} | cut -f2 -d:`
echo $NOW_IP | mail -s "IP" your@emailaddress
其中:
ifconfig ppp0:查看ppp0接口信息;grep inet:筛选包含 IP 地址的行;awk {'print $2'}与cut -f2 -d::取出 IP 地址字段;mail -s "IP" your@emailaddress:以IP为邮件标题,把结果发送到指定邮箱。
如果系统已经使用较新的 ip 命令,也可以用下面这种写法获取 ppp0 的 IPv4 地址:
NOW_IP=$(ip -4 addr show ppp0 | awk '/inet / {print $2}' | cut -d/ -f1)
echo "$NOW_IP" | mail -s "IP" your@emailaddress
使用前需要确认本机可以正常发送邮件。可以先执行:
echo "test" | mail -s "mail test" your@emailaddress
如果收不到邮件,需要先检查 mail 命令是否存在,以及本机的邮件发送服务是否配置正确。
如果是 ADSL 拨号,可以将以上命令加入 /etc/ppp/ip-up.local 文件末尾,让系统在每次拨号成功后自动执行:
vi /etc/ppp/ip-up.local
保存后,确保脚本有执行权限:
chmod +x /etc/ppp/ip-up.local
也可以定时执行,将脚本添加进计划任务 crontab 中。例如每 10 分钟执行一次:
*/10 * * * * /path/to/send-ip.sh
具体设置可参见:CentOS 定时将路由器的外网 IP 发送到指定电子邮箱中。
