我正在尝试在Python中建立安全的套接字连接,而使用SSL有点麻烦。我已经找到一些有关如何与SSL建立连接的代码示例,但它们都涉及密钥文件。我尝试连接的服务器不需要接收任何密钥或证书。我的问题是,我该如何实质上包装带有SSL的python套接字连接。我知道我应该使用的密码是ADH- AES256-SHA,协议是TLSv1。这就是我一直在尝试的:
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。如果有人知道这意味着什么,或者可以提供任何帮助,将不胜感激。提前致谢!
python
sock.send(packet)
26
好的,我找出了问题所在。我真是愚蠢。two我的代码有问题。我的第一个错误是在指定应该ssl_version放入的时间TLSv1时ssl.PROTOCOL_TLSv1。第二个错误是我没有引用包装好的套接字,而是调用了我创建的原始套接字。下面的代码似乎对我有用。
two
ssl_version
ssl.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()
希望这可以帮助到别人!