编程时还是新手,我正在尝试创建一个脚本,检测远程主机上的端口不可用并更改iptables&发出一个通知。
我正在运行Ubuntu 16.04,我正在使用Python3,我正在使用os模块发送电子邮件&更改IPtables
我几乎可以让它正常工作,但试图让它只发送一次电子邮件证明是一种挑战。
import socket
import sys
import time
import datetime
import os
import logging
#Variables
remote_host = "syslog1"
drop = os.system("iptables-restore < iptables.conf")
undrop = os.system("iptables-restore < DR-iptables.conf")
print ('Starting Syslog DR Plan.')
# run continuously
while True:
time.sleep(1)
for remote_port in [514]:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(60)
now = datetime.datetime.now()
now_text = now.strftime("%Y-%m-%d %H:%M:%S")
plco = 0
try:
sock.connect((remote_host, remote_port))
print((now_text, 'Port is Open on', remote_port))
except:
socket.timeout
plco = 1
if plco == 1:
undrop
logging.basicConfig(filename='/var/log/syslog',level=logging.DEBUG , format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
logging.error('#### Syslog DR Invoked - Immediate action required ####')
os.system("mail -s '# INVESTIGATE IMMEDIATELY - SYSLOG1 port 514 unreachable #' alert@test.com < ./panic.txt")
print( 'Port is closed')
else:
pass
sock.close()
我怀疑我需要做两件事之一但到目前为止都失败了。一种是将其定义为函数,然后调用函数,然后根据输出将另一个函数设置为电子邮件。
任何人都可以建议去哪里,或者更好的方法(我可能会用硬/错的方式做事)。
非常感谢
答案 0 :(得分:0)
您希望每当尝试连接到端口的套接字超时时发送电子邮件的代码。这可以通过您的代码来实现:
mySQL