Я работаю над функцией «Проверить соединение», чтобы проверить, доступен ли удаленный сервер системного журнала на основе данных конфигурации, введенных пользователем.Основными сведениями, предоставляемыми пользователем, являются ip
и port
, на которых работает сервер Syslog.Переключатель, указывающий, включен ли сервер Syslog TLS/SSL
, и место для загрузки открытого сертификата серверов Syslog, если включен TLS/SSL
.
Один крайний случай, который оказался трудным (и я считаю невозможным)) - это когда сервер Syslog настроен на использование TLS, но клиентское приложение отправляет тестовое сообщение без включения TLS/SSL
.Пока ip
и port
верны, сообщение отправляется успешно.Сервер Syslog даже регистрирует сообщение, хотя это просто мусор, потому что он не был зашифрован.
Задача состоит в том, чтобы иметь возможность обнаружить эту ситуацию и сообщить пользователю, что ему необходимо включить TLS/SSL
.Я не думаю, что это возможно, потому что нет способа читать с сервера Syslog (о котором я знаю), и до тех пор, пока пакет TCP, содержащий сообщение, будет подтвержден, нет ничего, на чем можно основывать это решение.
Вот сценарий быстрого прототипа, который я написал для проверки соединения, но я не смог вызвать сбой, если сервер системного журнала просто недоступен.
def send():
with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
sock.connect((hostname, 6514))
sock.send('Testing Syslog')
for x in range(10):
send()
time.sleep(1)
Что я хотел бы получить в ответеодно из следующего:
- Подтверждение того, что это случай, который не может быть обработан программно
- Ссылка на какую-то документацию системного журнала, описывающую, как клиент мог проверить, было ли получено сообщение, ирасшифрован правильно.
- Сценарий Python или набор
openssl
команд, которые можно использовать для проверки существования этой конфигурации.