Программа Python не получает ответ при подключении и отправке данных в сокет SSL - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь подключиться к сокету SSL, расположенному на внешнем сервере, отправить данные, и служба должна ответить, что я пытаюсь перехватить.Однако программа будет ждать ответа, а затем тайм-аут.

На базовом уровне я пытаюсь повторить нижеприведенное соединение openssl.Я могу отправить ping и сервер отвечает pong, чтобы я знал, что все работает.

openssl s_client -quiet -connect server.server:443

import socket
import ssl

hostname = "server.server"
context = ssl.create_default_context()

with socket.create_connection((hostname, 4433)) as sock:
    sock.settimeout(5)
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
        ssock.send(b'ping')
        response = ssock.recv(1024)
        print(response)
    sock.close()
    print("SSL Socket Closed")

1 Ответ

0 голосов
/ 20 декабря 2018

О программе сервера ничего не известно.Но я предполагаю, что сервер будет читать строку и отвечать только после того, как строка была прочитана.При попытке ввода openssl s_client вы вводите ping, а затем клавишу <Enter>, которая отправляет на сервер ping, за которым следует символ новой строки ('\ n').С ssock.send(b'ping') в вашем коде вы вместо этого будете отправлять только ping на сервер и символ новой строки, который, вероятно, ожидается сервером.Из-за этого сервер зависает, все еще пытаясь прочитать полную строку (которая должна заканчиваться \n).Таким образом, попробуйте отправить b'ping\n' вместо только b'ping'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...