实验室有一个服务器放在机房,装的是Ubuntu Server,IP为自动分配,因此一旦IP有变化就无法远程操作,必须去机房记录新的IP。学了几天Shell之后想,是不是可以定时检测其IP的变化,一旦有变化就发送到邮箱呢?。首先分析一下这次任务,无非是几块内容:

1、查询当前IP;

2、查询变化前的IP;

3、如二者不想等则,读取邮件列表;

4、对列表发送邮件;

4. 定时执行脚本;

当然,在学校的上网认证系统大行其道的环境下又加了一条,那就是自动登陆上网认证系统,这又是后话了。

首先是查询当前IP,会点Linux的童鞋们应该对ifconfig不陌生,输入一下得到:

eth0      Link encap:以太网  硬件地址 00:30:48:f9:b7:18  
          inet 地址:223.2.36.217  广播:223.2.47.255  掩码:255.255.240.0
          inet6 地址: fe80::230:48ff:fef9:b718/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1
          接收数据包:439851 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:410241 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:1000 
          接收字节:76752373 (76.7 MB)  发送字节:177467784 (177.4 MB)
          中断:16 Memory:faee0000-faf00000 


lo        Link encap:本地环回  
          inet 地址:127.0.0.1  掩码:255.0.0.0
          inet6 地址: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  跃点数:1
          接收数据包:583701 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:583701 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:0 
          接收字节:179155467 (179.1 MB)  发送字节:179155467 (179.1 MB)

但是我只要其中IP,对于其他一大堆东西不感兴趣,那怎么办。这下就需要我们的grep登场了,grep是文本查找的“高手”,支持正则表达式,它将会返回结果的行。我们观察到我们需要的IP:223.2.36.217的行前面为“inet
地址”,于是我们可以grep "inet 地址"。这样就剩下两行了:

inet 地址:223.2.36.217  广播:223.2.47.255  掩码:255.255.240.0
         inet 地址:127.0.0.1  掩码:255.0.0.0

但是还有两行,于是我们可以使用grep -v "127.0.0.1" 反向选择删除localhost,就只剩我们目标行了。

接下来是要获取列,我们观察到目标行分隔是通过:和空格分的,所以咱使用下一个工具,cut,使用cut -d:
-f2用:和空格分隔,获取从第二列开始的数组,这就获取了IP。最后使用awk '{print $1}'将值赋予IP,于是形成完整的IP获取:

IP=`ifconfig|grep 'inet 地址'|grep -v '127.0.0.1'|cut -d: -f2|awk '{print $1}'`

那怎么知道IP有没有变化呢?我的做法就是第一次的时候把IP记录下来,即echo
"$IP">IP_CONF,IP_CONF为一个叫ip.conf的文件,每次读这个文件就知道之前的ip了,接下来就是邮件列表,记录net-report.conf,要发邮件的时候从它们里面读取,并发送邮件:

cat $MAIL_LIST|while read mailist
    do
      echo "Sending mail to $mailist"
      echo "New IP is:$IP"|mail -s newIP $mailist    
    done

这就基本完成了,
但是多说一句,首先发送邮件得确定安装sendmail或mailutils,并在/etc/host里面改一下域名。你收到的邮件地址会是你的“用户名@域名”,另外对外网邮箱,现在大多有设置反垃圾机制,尝试了一下qq邮箱和新浪邮箱,均被拦截了。想要收到邮件得设置白名单。

最后是怎么定时执行shell,使用crontab吧,具体的看我转载的文章http://blog.csdn.net/kaixin89/article/details/45199003

下面给出完整的脚本:

#!/bin/bash
IP_CONF='ip.conf'
MAIL_LIST='net-report.conf'
IP=`ifconfig|grep 'inet 地址'|grep -v '127.0.0.1'|cut -d: -f2|awk '{print $1}'`
if [ ! -d $IP_CONF ]
then
touch $IP_CONF
fi
#ip is newest
OLD_IP=`cat $IP_CONF|grep [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*`
echo "IP:$IP OLD_IP:$OLD_IP"
if [ -z "$OLD_IP" ] || [ "$OLD_IP" != "$IP" ]
then
echo "$IP">$IP_CONF
cat $MAIL_LIST|while read mailist
do
echo "Sending mail to $mailist"
echo "New IP is:$IP"|mail -s newIP $mailist
done
fi

用自动化的方式解决最实际的问题,虽然还是很菜,但是很有成就感啊

Linux下Shell实现服务器IP监测的更多相关文章

  1. .Neter玩转Linux系列之四:Linux下shell介绍以及TCP、IP基础

    基础篇 .Neter玩转Linux系列之一:初识Linux .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限 .Neter玩转Linux系列之三:Linux下的分区讲解 .N ...

  2. 如何在linux下安装tomcat服务器

    linux作为现在比较主流的服务器操作系统,使用的机器广泛,安全稳定.tomcat作为应用容器当然可以有linux版本的tomcat.在linux上安装tomcat的方式也很简单,只需要运行脚本基本配 ...

  3. ​Linux下的SVN服务器搭建

    ​Linux下的SVN服务器搭建 鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总 ...

  4. Linux下安装Tomcat服务器和部署Web应用

    一.上传Tomcat服务器

  5. Linux下部署FTP服务器

    Linux下部署FTP服务器 下载安装包 在这里介绍的是离线部署FTP,首先下载对应的rpm包,下载链接为: 下载vsftpd服务 下载FTP客户端 安装ftp服务器 关闭防火墙 service ip ...

  6. Linux下设置网卡静态ip

    Linux下设置网卡静态ip 如果是服务器版,没有图形界面只用用命令行修改配置文件 如果是客户端版本,可以用图形界面 配置的前提是要在root用户下才能重启网卡服务 图形界面: system-conf ...

  7. 转】Linux下安装Tomcat服务器和部署Web应用

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4097608.html 感谢! 一.上传Tomcat服务器

  8. Linux下的SVN服务器搭建(转)

    Linux下的SVN服务器搭建   鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此 ...

  9. Linux下视频流媒体直播服务器搭建详解

    目标: 搭建网络直播流媒体服务器系统(Linux操作系统) 背景: 用于OTT-TV大并发的直播和点播的一套流媒体服务器系统.支持N x 24小时录制回看和直播的服务器端解决方案. 解决方案: l  ...

随机推荐

  1. OOUnit2Summary

    一.前三次作业内容分析 前言 第二单元的作业以多线程为主题,以电梯调度为背景,分三次要求逐步增加,难度逐步提高.这三次作业,更新了我对于面向对象编程的认知,也进一步提高了我编程和调试的能力. 一下是我 ...

  2. BUAA_OO_2020_第一单元总结

    BUAA_OO_2020_第一单元总结 OO第一单元作业主题为表达式求导,主要学习目标为熟悉面向对象思想,学会使用类来管理数据,感受分工协作的行为设计,建立程序鲁棒性概念.如今,第一单元的学习已落下帷 ...

  3. 动态语言 VS 静态语言

    静态语言 VS 动态语言 动态语言 是一类在运行时可以改变其结构的语言:例如新的函数.对象.甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化.通俗点说就是在运行时代码可以根据某些条件改变自 ...

  4. Install Tensorflow object detection API in Anaconda (Windows)

    This blog is to explain how to install Tensorflow object detection API in Anaconda in Windows 10 as ...

  5. Spring Security OAuth2 实现登录互踢

    背景说明 一个账号只能一处登录,类似的业务需求在现有后管类系统是非常常见的. 但在原有的 spring security oauth2 令牌方法流程(所谓的登录)无法满足类似的需求. 我们先来看 To ...

  6. 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作ubuntu16.04-16

    自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作ubuntu16.04-16 欢迎加QQ群:1026880196 进行交流学习   制作Ope ...

  7. 【pytest官方文档】解读fixtures - 10. fixture有效性、跨文件共享fixtures

    一.fixture有效性 fixture有效性,说白了就是fixture函数只有在它定义的使用范围内,才可以被请求到.比如,在类里面定义了一个fixture, 那么就只能是这个类中的测试函数才可以请求 ...

  8. 案例分析–Note-taking Management Softwares

    项目 内容 这个作业属于那个课程 2021春季学期软件工程(罗杰.任健) 这个作业的要求在哪里 案例分析 我在这个课程的目标是 团队协作,利用软件工程的思维和方法开发出一款具有实用价值的软件 这个作业 ...

  9. IDEA中集成Git

    一.新建项目,绑定GIT 1.新建spring boot项目 2.路径选择git本地文件地址 3.新的项目文件绑定git,将远程的git文件拷贝至项目中  二.修改文件,使用IDEA操作GIT 1.提 ...

  10. 2.1.1- css产生的原因

    CSS的发展历程 从HTML被发明开始,样式就以各种形式存在.不同的浏览器结合它们各自的样式语言为用户提供页面效果的控制.最初的HTML只包含很少的显示属性.随着HTML的成长,为了满足页面设计者的要 ...