Просто добавляли к раствору mrjandro быстрый хак, чтобы избавиться от простых соединений ошибок/тайм-ауты.
Вы можете изменить пороговое значение переменной max_error_count и добавить уведомления любого типа.
import socket
max_error_count = 10
def increase_error_count():
# Quick hack to handle false Port not open errors
with open('ErrorCount.log') as f:
for line in f:
error_count = line
error_count = int(error_count)
print "Error counter: " + str(error_count)
file = open('ErrorCount.log', 'w')
file.write(str(error_count + 1))
file.close()
if error_count == max_error_count:
# Send email, pushover, slack or do any other fancy stuff
print "Sending out notification"
# Reset error counter so it won't flood you with notifications
file = open('ErrorCount.log', 'w')
file.write('0')
file.close()
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(2)
result = sock.connect_ex(('127.0.0.1',80))
if result == 0:
print "Port is open"
else:
print "Port is not open"
increase_error_count()
И здесь вы найдете совместимую версию Python 3 (только фиксированный синтаксис печати):
import socket
max_error_count = 10
def increase_error_count():
# Quick hack to handle false Port not open errors
with open('ErrorCount.log') as f:
for line in f:
error_count = line
error_count = int(error_count)
print ("Error counter: " + str(error_count))
file = open('ErrorCount.log', 'w')
file.write(str(error_count + 1))
file.close()
if error_count == max_error_count:
# Send email, pushover, slack or do any other fancy stuff
print ("Sending out notification")
# Reset error counter so it won't flood you with notifications
file = open('ErrorCount.log', 'w')
file.write('0')
file.close()
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(2)
result = sock.connect_ex(('127.0.0.1',80))
if result == 0:
print ("Port is open")
else:
print ("Port is not open")
increase_error_count()
Это имеет очевидные недостатки, которые должны быть отмечены: просто попытаться проверить соединение может 1) не из-за брандмауэр или временный перелив, 2) вызвать нежелательную реакцию соединить попытку в случае какой-либо активной защиты, 3) просто журналы и статистика использования ... Проверка использования специально выделенных инструментов как netstat обычно является предпочтительной. – Netch
@Netch - это действительно удобно, когда вы находитесь на коробке, в которую вы не хотите устанавливать дополнительные инструменты, и вам нужно проверить, открыт ли удаленный порт. , , –
@WyattBarnett netstat не является дополнительным инструментом (по крайней мере, на * nix) :) – Pitto