我正在尝试学习python,对于一个我需要创建作业的课程。此分配指出我需要使用自签名证书创建服务器。我需要让这个服务器监听端口“int(sys.argv [1])”abd将linux命令“who”的结果发送回客户端。
我们可以像下面一样测试我们的脚本:
在1端子上运行示例端口1234上的脚本
在另一个终端运行以下命令: (测试:openssl s client -host localhost -port 1234)
当我在第二个终端上执行第二个命令时,我会收到证书上的所有信息,但不会收到发送回客户端的命令的输出。
这是我的代码到目前为止: http://pastebin.com/yFKLtyMW
请帮忙!
PS:我正在运行python 2.6
答案 0 :(得分:1)
connstream = ssl.wrap_socket(newsocket, server_side=True, certfile="cert.pem", keyfile="test.key" )
将套接字封装到SSLSocket
后,您应该只使用connstream而不是newsocket。
所以你的代码应该是这样的:
try:
#data = connstream.read(1024)
output = commands.getoutput("who")
connstream.write(output)
请注意,您不需要读取任何数据,因为另一端只等待命令的输出。因此,保留read语句将使您的SSL服务器在发送who
命令的输出之前等待来自另一端的数据