写一个监控端口状态并发送邮件
时间: 2024-05-08 13:18:32 浏览: 16
好的,可以使用Python语言编写一个监控脚本来实现。首先,我们需要导入相关的模块,如socket、smtplib、email等。
然后,我们可以使用socket模块来创建TCP连接,通过监测连接状态从而掌握端口的状态。如果端口处于开放状态,我们可以使用smtplib模块来发送电子邮件。
下面是一个基本的示例代码:
```
import socket
import smtplib
from email.mime.text import MIMEText
# 目标主机信息
host = '192.168.1.1' # 替换为目标IP地址
port = 80 # 替换为目标端口号
# 创建TCP连接并监测端口状态
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex((host, port))
if result == 0:
print("Port {} is open".format(port))
else:
print("Port {} is closed".format(port))
# 如果端口处于开放状态,发送邮件
if result == 0:
# 发送邮件配置
mail_server = 'smtp.xxx.com' # 替换为邮件服务器地址
mail_port = 25 # 替换为邮件服务器端口号
mail_username = 'xxx@xxx.com' # 替换为发件人邮箱地址
mail_password = 'xxx' # 替换为发件人邮箱密码
mail_from = 'xxx@xxx.com' # 替换为发件人邮箱地址
mail_to = ['xxx@xxx.com'] # 替换为收件人邮箱地址
mail_subject = 'Port {} is open'.format(port)
# 邮件内容
mail_text = 'Port {} is open on host {}'.format(port, host)
message = MIMEText(mail_text, 'plain', 'utf-8')
message['From'] = mail_from
message['To'] = ','.join(mail_to)
message['Subject'] = mail_subject
# 发送邮件
try:
smtpObj = smtplib.SMTP(mail_server, mail_port)
smtpObj.login(mail_username, mail_password)
smtpObj.sendmail(mail_from, mail_to, message.as_string())
smtpObj.quit()
print("Mail sent successfully")
except smtplib.SMTPException as e:
print("Mail sending failed:", e)
```
这个示例代码通过创建TCP连接并监测端口状态,来实现对端口的监控。如果监测到端口处于开放状态,就会发送一封邮件来通知管理员。 在使用时,我们需要将脚本中的相关配置(如目标主机信息、邮件发送配置等)替换为实际的信息。