SSL封装套接字:AttributeError:'module'对象没有'wrap_socket'属性
我在OSX上用python 2.6做一个非常简单的例子,但我总是遇到这个问题:
Traceback (most recent call last):
File "ssl.py", line 1, in <module>
import socket, ssl
File "/Users/Dennis/ssl.py", line 5, in <module>
sslSocket = ssl.wrap_socket(s)
AttributeError: 'module' object has no attribute 'wrap_socket'
代码:
import socket, ssl
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('irc.freenode.net', 7000))
sslSocket = ssl.wrap_socket(s)
print repr(sslSocket.server())
print repr(sslSocket.issuer())
sslSocket.write('Hello secure socket\n')
s.close()
我到底哪里做错了呢?
3 个回答
0
如果你没有把自己的脚本命名为 ssl.py
,并且使用的是 Python 3.12 或更新的版本,那这种情况是正常的:
要去掉
ssl.wrap_socket()
这个函数,因为它在 Python 3.7 中就已经不推荐使用了。现在应该创建一个ssl.SSLContext
对象,然后调用它的ssl.SSLContext.wrap_socket
方法。任何仍然使用ssl.wrap_socket()
的包都是有问题的,并且不安全。
5
你的脚本是:ssl.py
当你执行 import ssl
时,它会调用你自己写的这个脚本,所以你会看到 AttributeError
的错误信息。
把你的脚本改个名字,这样就应该能正常运行了。
18
不要把你的脚本命名为 ssl.py
,因为如果你把脚本命名为 ssl.py
,然后再使用 import ssl
这个命令,你实际上是在导入你自己写的这个脚本,而不是导入真正的SSL库。