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

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

时间: 2024-10-14 00:08:26

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

linux下shell简单修改ip的脚本

#!/bin/bash #2017-7-13 #by  ip_file=/etc/sysconfig/network-scripts/ifcfg-eth0 zt=`grep "static" $ip_file|wc -l` Bf_file=/data/ifcfg-eth/`date "+%y_%m_%d"`/ IPADDR="192.168.25.107" netmask="255.255.255.0" getaway=&qu

linux下smb文件共享服务器详解

1.smb服务器,netbios工作端口137/udp,138/udp,139/tcp,共享文件工作端口445/tcp 2.smb服务器主要是运行在linux与windows之间的文件共享服务, 安全级别有user,share,server,domain四种 user:相当于使用用户认证 share:相当于匿名访问 server:相当于在另一台服务器上用户认证 domain:相当于使用windows AD域用户认证 3.smb认证用户有3种,分为本地系统,非本地服务器上的帐号和windows的A

(轉載)Linux下安装Oracle11g服务器

轉載:http://www.cnblogs.com/zhangyongli2011/archive/2012/04/04/2431953.html 安装环境 Linux服务器:SuSe10 sp2 64位 Oracle服务器:Oracle11gR2 64位 系统要求 Linux安装Oracle系统要求 系统要求 说明 内存 必须高于1G的物理内存 交换空间 一般为内存的2倍,例如:1G的内存可以设置swap 分区为3G大小 硬盘 5G以上 2.修改操作系统核心参数 在Root用户下执行以下步骤:

Linux下安装Oracle11g服务器【转】

Linux下安装Oracle11g服务器[转] 出处:http://www.cnblogs.com/zhangyongli2011/ 安装环境 Linux服务器:SuSe10 sp2 64位 Oracle服务器:Oracle11gR2 64位 系统要求 Linux安装Oracle系统要求 系统要求 说明 内存 必须高于1G的物理内存 交换空间 一般为内存的2倍,例如:1G的内存可以设置swap 分区为3G大小 硬盘 5G以上 2.修改操作系统核心参数 在Root用户下执行以下步骤: 1)修改用户

Linux下搭建DHCP服务器

一.DHCP所需软件包dhcp-common-4.1.1-34.Pl.el6.centos.x86_64dhcp-4.1.1-34.pl.el6.centon.x86_64二.编辑主配置文件 vi/etc/dhcp/dhcpd.conf ddns-update-style interim; ignore client-updates; shared-network ifs {        option domain-name     "ifs.com";        option 

在linux下配置tftp服务器和nfs服务器

提示:该实验平台是在RedHatb6下进行的 配置成功的前提有三个: (1):在window下能ping的通linux (2):关闭linux 防火墙      执行指令:/etc/init.d/iptables stop (3):使SElinux处于宽容模式   执行指令:setenforce permissive 一.配置tftp服务器步骤 (1):挂载磁盘,安装tptp-server软件包 mount /dev/cdrom    /mnt/                        

Linux下搭建Apache服务器(完整版)

Linux下搭建Apache服务器(完整版) 什么是Apache? Apache Licence是著名的非盈利开源组织Apache采用的协议.该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件).需要满足的条件也和BSD类似 Apache主要特点 1.开放源代码.跨平台应用 2.支持多种网页编程语言 3.模块化设计 .运行稳定.良好的安全性 Apache软件版本 1.X  1.目前最高版本是1.3,运行稳定  2.向下兼容性较好,但缺乏一些较新

Linux 下安装 Redis 服务器

本文简单介绍了 Linux 下安装 Redis 服务器的步骤,同时简要介绍服务器的配置.启动以及状态检测.另外还介绍了 32 位 CentOS 下安装 Redis 时遇到的一些问题的解决.        一. 查看 Linux 相关信息        版本查看cat /etc/issueCentOS release 5.5 (Final)        位数查看getconf LONG_BIT32        二. 安装 tcl        先装好 tcl,不然 redis 的 make t

linux下搭建samba服务器

服务器IP:192.168.4.5 1.安装samba服务软件包 [[email protected] 桌面]# yum -y install samba [[email protected] 桌面]# rpm -q samba samba-3.6.9-164.el6.x86_64 [[email protected] 桌面]# rpm -q samba-client 2.修改配置文件smb.conf 对配置文件做备份 [[email protected] 桌面]# cp /etc/samba/