锅炉信息网 > 锅炉知识 > 锅炉百科

检测80端口

一、前言主要以Python和Shell方式在Centos7.9操作系统上编写脚本。脚本大概思路是通过netstat、grep、wc判断80端口的行数,行数为0

一、前言

主要以Python和Shell方式在Centos7.9操作系统上编写脚本。脚本大概思路是通过netstat、grep、wc判断80端口的行数,行数为0则启动httpd服务。

二、脚本思路

  • 使用netstat -lntp监听所有端口
  • 使用grep ':80' 只筛选出80端口
  • 使用wc -l统计出包含80端口的行数
  • 判断包含80端口的行数是否为0,如果是0,则由163邮箱发送告警消息到qq邮箱

三、环境模拟

3.1 准备工作

1.关闭防火墙

(1)临时关闭防火墙

$ systemctl stop firewalld

(2)永久关闭防火墙

$ systemctl disable firewalld

2.关闭selinux

(1)临时关闭selinux

$ setenforce 0

(2)永久关闭selinux

$ sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

3.安装netstat

$ yum install net-tools

3.2 模拟环境搭建

1.安装 Apache

$ yum install httpd -y

2.关闭Apache

$ systemctl stop httpd

四、脚本编写

4.1 Shell脚本

1.编写python脚本

$ vim 6-mail.py nimport smtplibnfrom email.mime.text import MIMETextnnsender = "123456789@163.com"npassword = "AAAAAAAAAAAAA"nreceiver = "123456789@qq.com"nnmessage = MIMEText("告警信息:80端口未开启,已自动开启80端口")nmessage["Subject"] = "告警信息"nmessage["From"] = sendernmessage["To"] = receivernnsmtp_server = smtplib.SMTP("smtp.163.com", 25)nsmtp_server.login(sender, password)nsmtp_server.sendmail(sender, receiver, message.as_string())nsmtp_server.quit()

上面代码详细分析:

(1)导入库

import smtplibnfrom email.mime.text import MIMEText

  • smtplib 库:提供了基本的 SMTP 功能
  • email 库:提供了复杂的邮件内容构造功能

(2)定义了三个变量:sender、password 和 receiver。分别存储了发件人的邮件地址、密码以及收件人的邮件地址。

sender = "123456789@163.com"npassword = "AAAAAAAAAAAA"nreceiver = "123456789@qq.com"

注意这里的password不是邮箱登录密码。而是授权码!

(3)利用 MIMEText 库构造了邮件的内容

message = MIMEText("告警信息:80端口未开启,已自动开启80端口")nmessage["Subject"] = "告警信息"nmessage["From"] = sendernmessage["To"] = receiver

  • MIMEText("告警信息:系统出现故障,请立即处理")` 构造了一个文本邮件
  • message["Subject"] = "告警信息" 设置了邮件的主题
  • message["From"] = sender设置了发件人的邮件地址,这里指163邮箱
  • message["To"] = receiver设置了收件人的邮件地址,这里指qq邮箱

(4)登录执行发邮件并退出163邮箱

smtp_server = smtplib.SMTP("smtp.163.com", 25)nsmtp_server.login(sender, password)nsmtp_server.sendmail(sender, receiver, message.as_string())nsmtp_server.quit()

2.编写shell脚本

$vim 6.sh n#!/bin/bashnwhile :ndon num=`netstat -lntp | grep ':80' | wc -l`n if [ $num -eq 0 ]n thenn systemctl start httpdn python3.8 6-mail.pyn fin sleep 30ndone

上面netstat参数说明如下:

  • -l:仅列出在监听的服务状态
  • -n:直接使用IP地址,不通过域名服务器
  • -t:显示TCP传输协议的连线状况
  • -p:显示正在使用Socket的程序识别码和程序名称

上面wc参数说明如下:

  • -l:统计行数

上面代码详细分析:

(1)创建了一个无限循环。: 是一个 shell 内置命令,不执行任何操作,因此循环将始终为真。

while :

(2)使用 netstat 命令显示网络连接及其状态,使用 grep 过滤输出以显示包含 :80 的行。最后,使用 wc -l 计算过滤行的数量。结果存储在 num 变量中。

don num=`netstat -lntp | grep ':80' | wc -l`

(3)检查 num 变量的值是否等于 0。如果值为 0,则表示端口 80 上没有运行服务。

if [ $num -eq 0 ]

(4)前面的条件为真,这一行使用 systemctl 命令启动 Apache Web 服务器。并运行一个 Python 脚本(6-mail.py),该脚本可能用于发送电子邮件通知。

systemctl start httpdn python3.8 6-mail.py

(5)fi 关闭 if 语句,sleep 30 命令在重新启动循环之前暂停脚本 30 秒。

fin sleep 30ndone

3.执行shell脚本

$ bash 6.sh

4.登录qq邮箱,查看告警信息邮件,这里我就不截图了。

上一篇:80万秦军被灭

下一篇:爱你80秒

锅炉资讯

锅炉资讯

锅炉学习

锅炉学习

锅炉视频

锅炉视频

锅炉百科

锅炉百科