小编典典

在Python中打开SSL套接字连接

python

我正在尝试在Python中建立安全的套接字连接,而使用SSL有点麻烦。我已经找到一些有关如何与SSL建立连接的代码示例,但它们都涉及密钥文件。我尝试连接的服务器不需要接收任何密钥或证书。我的问题是,我该如何实质上包装带有SSL的python套接字连接。我知道我应该使用的密码是ADH- AES256-SHA,协议是TLSv1。这就是我一直在尝试的:

import socket
import ssl

# SET VARIABLES
packet, reply = "<packet>SOME_DATA</packet>", ""
HOST, PORT = 'XX.XX.XX.XX', 4434

# CREATE SOCKET
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)

# WRAP SOCKET ???
ssl.wrap_socket(sock, ssl_version="TLSv1", ciphers="ADH-AES256-SHA")

# CONNECT AND PRINT REPLY
sock.connect((HOST, PORT))
sock.send(packet)
print sock.recv(1280)

# CLOSE SOCKET CONNECTION
sock.close()

运行此代码时,没有任何错误,但响应为空。当尝试在命令行中调试此代码时,通过在python终端中键入并逐行粘贴代码,我得到的是我在运行时假设的状态代码sock.send(packet)。我得到的整数响应是26。如果有人知道这意味着什么,或者可以提供任何帮助,将不胜感激。提前致谢!


阅读 259

收藏
2020-12-20

共1个答案

小编典典

好的,我找出了问题所在。我真是愚蠢。two我的代码有问题。我的第一个错误是在指定应该ssl_version放入的时间TLSv1ssl.PROTOCOL_TLSv1。第二个错误是我没有引用包装好的套接字,而是调用了我创建的原始套接字。下面的代码似乎对我有用。

import socket
import ssl

# SET VARIABLES
packet, reply = "<packet>SOME_DATA</packet>", ""
HOST, PORT = 'XX.XX.XX.XX', 4434

# CREATE SOCKET
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)

# WRAP SOCKET
wrappedSocket = ssl.wrap_socket(sock, ssl_version=ssl.PROTOCOL_TLSv1, ciphers="ADH-AES256-SHA")

# CONNECT AND PRINT REPLY
wrappedSocket.connect((HOST, PORT))
wrappedSocket.send(packet)
print wrappedSocket.recv(1280)

# CLOSE SOCKET CONNECTION
wrappedSocket.close()

希望这可以帮助到别人!

2020-12-20