尝试&除了在while循环中

时间:2017-02-23 14:07:08

标签: python-3.x sockets while-loop try-catch

编程时还是新手,我正在尝试创建一个脚本,检测远程主机上的端口不可用并更改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()

我怀疑我需要做两件事之一但到目前为止都失败了。一种是将其定义为函数,然后调用函数,然后根据输出将另一个函数设置为电子邮件。

任何人都可以建议去哪里,或者更好的方法(我可能会用硬/错的方式做事)。

非常感谢

1 个答案:

答案 0 :(得分:0)

您希望每当尝试连接到端口的套接字超时时发送电子邮件的代码。这可以通过您的代码来实现:

mySQL