Linux下Shell实现服务器IP监测
实验室有一个服务器放在机房,装的是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监测的更多相关文章
- .Neter玩转Linux系列之四:Linux下shell介绍以及TCP、IP基础
基础篇 .Neter玩转Linux系列之一:初识Linux .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限 .Neter玩转Linux系列之三:Linux下的分区讲解 .N ...
- 如何在linux下安装tomcat服务器
linux作为现在比较主流的服务器操作系统,使用的机器广泛,安全稳定.tomcat作为应用容器当然可以有linux版本的tomcat.在linux上安装tomcat的方式也很简单,只需要运行脚本基本配 ...
- Linux下的SVN服务器搭建
Linux下的SVN服务器搭建 鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总 ...
- Linux下安装Tomcat服务器和部署Web应用
一.上传Tomcat服务器
- Linux下部署FTP服务器
Linux下部署FTP服务器 下载安装包 在这里介绍的是离线部署FTP,首先下载对应的rpm包,下载链接为: 下载vsftpd服务 下载FTP客户端 安装ftp服务器 关闭防火墙 service ip ...
- Linux下设置网卡静态ip
Linux下设置网卡静态ip 如果是服务器版,没有图形界面只用用命令行修改配置文件 如果是客户端版本,可以用图形界面 配置的前提是要在root用户下才能重启网卡服务 图形界面: system-conf ...
- 转】Linux下安装Tomcat服务器和部署Web应用
原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4097608.html 感谢! 一.上传Tomcat服务器
- Linux下的SVN服务器搭建(转)
Linux下的SVN服务器搭建 鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此 ...
- Linux下视频流媒体直播服务器搭建详解
目标: 搭建网络直播流媒体服务器系统(Linux操作系统) 背景: 用于OTT-TV大并发的直播和点播的一套流媒体服务器系统.支持N x 24小时录制回看和直播的服务器端解决方案. 解决方案: l ...
随机推荐
- Java学习笔记--异常机制
简介 在实际的程序运行过程中,用户并不一定完全按照程序员的所写的逻辑去执行程序,例如写的某个模块,要求输入数字,而用户却在键盘上输入字符串:要求打开某个文件,但是文件不存在或者格式不对:或者程序运行时 ...
- 五、python学习-面向对象
1.面对对象程序开发基础(oop) 面对对象:高内聚 低耦合 面向过程: 优点:效率高,执行速度快 缺点:维护性,移植性差,表达不出一类的语义 面向对象: 优点:可读性,可移植性,可维护性高 缺点:执 ...
- C/C++中的const
1 C中的const C中const修饰的变量是只读变量,在使用const关键字声明定义变量时会给该变量分配内存空间. const修饰的全局变量默认是外部链接的,即其它源文件可以直接使用该变量. co ...
- springboot项目整合druid数据库连接池
Druid连接池是阿里巴巴开源的数据库连接池项目,后来贡献给Apache开源: Druid的作用是负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个: D ...
- Spring 学习笔记(四):Spring AOP
1 概述 本文主要讲述了AOP的基本概念以及在Spring中AOP的几种实现方式. 2 AOP AOP,即Aspect-Oriented Programming,面向切面编程,与OOP相辅相成.类似的 ...
- ElasticSearch-03-远行、停止
在Windows下执行elasticsearch.bat 在Linux下运行./elasticsearch 指定集群名称和节点名称: ./elasticsearch --cluster.name my ...
- synchronized锁由浅入深解析
一:几种锁的概念 1.1 自旋锁 自旋锁,当一个线程去获取锁时,如果发现锁已经被其他线程获取,就一直循环等待,然后不断的判断是否能够获取到锁,一直到获取到锁后才会退出循环. 1.2 乐观锁 乐观锁,是 ...
- 哈工大LTP基本使用-分词、词性标注、依存句法分析、命名实体识别、角色标注
代码 import os from pprint import pprint from pyltp import Segmentor, Postagger, Parser, NamedEntityRe ...
- Mybatis一级缓存和结合Spring Framework后失效的源码探究
1.在下面的案例中,执行两次查询控制台只会输出一次 SQL 查询: mybatis-config.xml <?xml version="1.0" encoding=" ...
- 机器人走方格-51nod解题
M * N的方格,一个机器人从左上走到右下,只能向右或向下走. 有多少种不同的走法? 注意:给定 M, N 是一个正整数. 示例 输入: 1行, 2个数M,N,中间用空格隔开.(2 <= m,n ...