shell编程之实战----MAC记录与端口扫描脚本、开发系统监控脚本

一、MAC记录与端口扫描脚本

1.需求描述

  • 编写名为 system.sh 的小脚本,记录局域网中各主机的 MAC 地址,保存到/etc/ethers 文件中;若此文件已存在,应先转移进行备份;每行一条记录,第 1 列为 IP 地址,第 2 列为对应的 MAC 地址。

  • 检查有哪些主机开启了匿名 FTP 服务,扫描对象为/etc/ethers 文件中的所有 IP 地址, 扫描的端口为 21。

2、命令测试

  • 分析:记录局域网中各主机的MAC地址,保存到/etc/ethers文件中;若此文件已存在,应先转移进行备份;检查有哪些主机开启了匿名FTP服务,扫描对象为/etc/ethers文件中的所有IP地址,扫描的端口为21
  • arping - c2-w 1ip :发送MAC地址解析请求
  • arp-n : 纪录MAC
  • awk : 打印ip与MAC地址
  • 使用wget下载的方法测试FTP服务

3.实现步骤

vim 
#!/bin/bash
if [ -e /etc/ethers ] 
then
 echo "文件已存在"
 cp /etc/ethers /etc/ethers.bak
fi 

for((i=120;i<180;i++))
do
ping -c 3 -i 0.2 -w 2 192.168.220.$i &>/dev/null

if [ $? -eq 0 ] ; then 

arp -n | grep "192.168.220.*" | awk '{print $1,$3}' | sed '/ens33/d' > /etc/ethers

fi

done

rpm -q nmap &>/dev/null
if [ $? -eq 0 ]
then
   echo "nmap已安装"
else
   echo "nmap未安装"
   yum install -y nmap &>/dev/null
fi

host=$(cat /etc/ethers | awk '{print $1}')
echo "以下主机开启ftp服务:"
for iP in $host
do
    nmap -sT $iP | grep "21/tcp" &>/dev/null
	if [ $? -eq 0 ]
	then 
	echo "$iP"
	fi
done

二、 开发系统监控脚本

1.需求描述

  • 编写名为 sysmon.sh 的 Shell 监控脚本。

  • 监控内容包括 CPU 使用率、内存使用率、根分区的磁盘占用率。

  • 百分比只需精确到个位,如 7%、12%、23%等。

  • 出现以下任一情况时告警:磁盘占用率超过 90%、CPU 使用率超过 80%、内存使用率超过 90%,告警邮件通过 mail 命令发送到指定邮箱。

  • 结合 crond 服务,每半小时执行一次监控脚本。

2、思路与命令测试

  • 分析:监控内容包括CPU使用率、内存使用率、根分区的磁盘占用率
  • df命令
  • awk命令
  • mpstat 命令(需安装sysstat软件包)
  • free命令
  • crontab命令
  • 使用i语句判断上述监控项目是否超标,将需要告警的信息保存到/tmp/alert.txt文件;若该存在则作为告警邮件发送
  • 调试优化并设置crontab计划

3.实现步骤

[root@localhost ~]# vi /root/sysmon.sh 
#!/bin/bash  
DUG=$(df -h | grep "/$" | awk '{print $5}' | awk -F% '{print $1}') 
CUG=$(mpstat | grep "all" | awk '{print $4}' | awk -F. '{print $2}') 
MUG=$(expr $(free | grep "Mem:" | awk '{print $3}') \* 100 / $(free | grep "Mem:" | awk '{print $2}')) 

\# 设置告警日志文件、告警邮箱 

ALOG="/tmp/alert.txt"
AMAIL="root@localhost" 

\# 判断是否记录告警 

if [ $DUG -gt 90 ] 
then 
echo "磁盘占用率:$DUG %" >> $ALOG 
fi 
if [ $CUG -gt 80 ] 
then 
echo "CPU 使用率:$CUG %" >> $ALOG 
fi 
if [ $MUG -gt 90 ] 
then 
echo "内存使用率:$MUG %" >> $ALOG 
fi 

\# 判断是否发送告警邮件,最后删除告警日志文件 

if [ -f $ALOG ] 
then 
cat $ALOG | mail -s "Host Alert" $AMAIL 
rm -rf $ALOG 
fi 
[root@localhost ~]# chmod +x /root/sysmon.sh 

(2)测试 sysmon.sh 脚本的执行情况 
首先确认有可用的邮件服务器(如 Postfix、Sendmail 等),然后调低监控阈值,执行 sysmon.sh 脚本进行测试。 
[root@localhost ~]# **/root/sysmon.sh** 
然后查收 root@localhost 的邮箱,确认告警邮件内容。 
[root@localhost ~]$ mail 

(3)设置 crontab 计划任务 
首先确认系统服务 crond 已经运行。 
[root@localhost ~]# /etc/init.d/crond status 
crond (pid 5839) 正在运行... 
然后,添加 crontab 计划任务配置,每半小时调用一次 sysmon.sh 脚本程序。 
[root@localhost ~]# **crontab -e** 
*/30 * * * * /root/sysmon.sh 
发布了69 篇原创文章 · 获赞 32 · 访问量 3444

猜你喜欢

转载自blog.csdn.net/qq_28361541/article/details/103462042