我正在尝试在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()
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,我没有收到任何错误,但我得到一个空白的响应.当尝试在命令行中调试此代码时,通过在python终端中键入并逐行粘贴代码,我得到的是我在运行时假设的状态代码sock.send(packet).我得到的整数响应是26.如果有人知道这意味着什么,或者无论如何可以提供帮助,我们将不胜感激.提前致谢!
我目前正在实现以下代码,以将数据包发送到Parallels PVA XML API。我正在尝试将两个 XML数据包发送到服务器。第一个是指定用户凭据的登录数据包,第二个是包含有关API请求信息的数据包。这些数据包应该以空字节分隔\0。通常,服务器会发回多个数据包,第一个数据包是登录成功的说明,第二个数据包包含有关API请求的信息。
我遇到的问题是似乎第二个数据包没有被发送。我得到的唯一响应是第一个说明登录成功的数据包,但我没有得到包含有关API请求信息的数据包。我认为这可能是因为我要发送一个空字节,所以我尝试在base64中对所有内容进行编码,但最终得到了相同的结果。
因此,在我看来,要么连接被关闭,服务器没有足够的时间发送第二个数据包,要么由于空字节而完全忽略了该数据包。
任何帮助或评论将不胜感激。先感谢您!
import socket
import base64
def client(string):
HOST, PORT = '[IP_ADDRESS]', 4433
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
sock.connect((HOST, PORT))
sock.send(base64.b64encode(string))
reply = sock.recv(131072)
sock.close()
return reply
packet = "<packet></packet>\0<packet></packet>"
print client(packet)
Run Code Online (Sandbox Code Playgroud)
请不要故意在数据包中没有信息,因为它包含敏感信息,并且ip地址被“ [IP_ADDRESS]”故意取代了