python socket ssl编程
来源:互联网 发布:软件开发有什么软件 编辑:程序博客网 时间:2024/05/17 15:36
http://blog.csdn.net/hongqun/article/details/6833412
首先,使用如下命令生成证书和key:
openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout key.pem接下来实现服务器:
- import socket, ssl, time
-
-
-
-
-
-
- bindsocket = socket.socket()
- print( "socket create success" )
- bindsocket.bind(('10.0.0.9', 10023))
- print( "socket bind success" )
- bindsocket.listen(5)
- print( "socket listen success" )
-
- def do_something(connstream, data):
- print("data length:",len(data))
- return True
-
- def deal_with_client(connstream):
- t_recv=0
- t_send=0
- n = 0
- t1=time.clock()
- data = connstream.recv(1024)
- t2=time.clock()
- print("receive time:",t2-t1)
-
- while data:
- if not do_something(connstream, data):
-
-
- break
- n = n + 1
- t1=time.clock()
- connstream.send(b'b'*1024)
- t2=time.clock()
- t_send += t2-t1
- print("send time:",t2-t1)
- t1=time.clock()
- data = connstream.recv(1024)
- t2=time.clock()
- t_recv +=t2-t1
- print("receive time:",t2-t1)
- print("avg send time:",t_send/n,"avg receive time:",t_recv/n)
-
-
- while True:
- newsocket, fromaddr = bindsocket.accept()
- print( "socket accept one client" )
-
-
-
-
-
- connstream = ssl.wrap_socket(newsocket, "key.pem", "cert.pem", server_side=True, ssl_version = ssl.PROTOCOL_TLSv1)
-
- try:
- deal_with_client(connstream)
- finally:
- connstream.shutdown(socket.SHUT_RDWR)
- connstream.close()
以上代码中,标注了python版本,可以在这些版本中切换客户端代码:
- import socket, ssl, pprint,time
-
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- print( "socket create success" )
-
- ssl_sock = ssl.wrap_socket(s,
- ca_certs="cert.pem",
- cert_reqs=ssl.CERT_REQUIRED)
- ssl_sock.connect(('10.0.0.9', 10023))
- print( "socket connect success" )
-
- pprint.pprint(ssl_sock.getpeercert())
-
- n=0
- t_send=0
- t_recv=0
- while n <10:
- n = n+1
- t1=time.clock()
- ssl_sock.send(b'a'*100)
- t2=time.clock()
- t_send += t2-t1
- print("send time:",t2-t1)
- t1=time.clock()
- data=ssl_sock.recv(1024)
- t2=time.clock()
- t_recv += t2-t1
- print("receive time:",t2-t1)
-
- print("avg send time:",t_send/n,"avg receive time:",t_recv/n)
-
- ssl_sock.close()
0 0