python socket ssl编程

2023-11-02

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

# python 3.3 begin
#context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
#context.load_cert_chain(certfile="cert.pem", keyfile="key.pem")
# python 3.3 end

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)
    # empty data means the client is finished with us
    while data:
        if not do_something(connstream, data):
            # we'll assume do_something returns False
            # when we're finished with client
            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)
    # finished with client

while True:
    newsocket, fromaddr = bindsocket.accept()
    print( "socket accept one client" )
    # python 3.3 begin
    #connstream = context.wrap_socket(newsocket, server_side=True)
    # python 3.3 end
    
    # python 2.x begin
    connstream = ssl.wrap_socket(newsocket, "key.pem", "cert.pem", server_side=True, ssl_version = ssl.PROTOCOL_TLSv1)
    # python 2.x end
    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" )
# require a certificate from the server
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())
# note that closing the SSLSocket will also close the underlying socket
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(len(data))
print("avg send time:",t_send/n,"avg receive time:",t_recv/n)
#ssl_sock.send(b'')
ssl_sock.close()


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python socket ssl编程 的相关文章

  • 反射获取类的成员变量值

    public class ClassFieldTest public ClassFieldTest List
  • machine unlearning 论文阅读笔记

    文章目录 前言 概要 导论 unlearning 定义 SISA 系统 时间复杂度 实验测试 总结 前言 做一篇发表在顶会S P 4 2 n d 42 nd
  • Connection reset by peer

    今天升级完openssh8 6以后突然发现无法连接服务器了 注意前提是升级成功了 连接时报错如下 Connection reset by peer 解决方案 使用root执行命令 echo sshd ALL gt gt etc hosts
  • 【mcuclub】水流量检测模块-YF-S401

    一 实物图 型号 YF S401 二 原理图 编号 名称 功能 1 VCC 电源正 红色线 2 GND 电源地 黑色线 3 OUT 输出引脚 黄色线 三 简介 水流量传感器主要由塑料阀体 水流转子组件和霍尔传感器组成 它装在电器的进水端 用
  • JVM--调优--03--开发配置

    JVM 调优 03 开发配置 1 本地配置 Xmx1g Xms1g Xmn900m XX UseG1GC Xloggc gc log XX PrintGCDetails 2 linux tomcat 配置 进入tomcat的bin目录 修改
  • 软工作业 双人项目代码规范

    双人项目代码编写规范 蔡东杰 房林尧 以下共分为四个部分 缩进代码 命名规则 代码注释 异常处理 部分规范已做实例说明 后续编代码时需要严格遵守 一 关于缩进代码 一行里面只写一行代码 包括定义变量 一行只定义一个 左括号和后一个字符之间不

随机推荐

  • Java分支和循环语句及方法的使用

    1 分支语句No3 顺序语句 分支语句 循环语句 1 1 分支语句 选择结构 分支语句满足某种条件则执行某一部分 满足另一种条件则执行另一部分 1 2 if语句 简单分支语句 if boolean类型表达式 语句 如果小括号中的表达式成立
  • STM32中断知识点简介

    中断服务函数存放路径为启动文件 startup stm32f10x hd 1 常用的中断服务函数 外部中断服务函数 EXTI0 IRQHandler EXTI0 IRQn EXTI1 IRQHandler EXTI1 IRQn EXTI2
  • jenkins默认会存放目录

    jenkins默认会存放在用户主目录下的 jenkins文件夹中 如 Linux root用户 root jenkins 注意 这是linux版本的 windows系统请自行更改 这个值在Jenkins运行时是不能更改的 请先将Jenkin
  • 自定义coco数据集

    1 环境 anaconda环境安装配置 2 工具 安装labelme工具 3 安装软件 3 1 打开anaconda控制台 3 2 创建虚拟环境 conda create n labelme python 3 7 3 3 激活环境 cond
  • 函数调用栈

    函数调用栈 我们在编程中写的函数 会被编译器编译为机器指令 写入可执行文件 程序执行的时候 会把这个可执行文件加载到内存 在虚拟地址空间中的代码段存放 如果在一个函数中调用另一个函数 编译器就会对应生成一条call指令 当程序执行到这条ca
  • 不使用mybatis的@Param有的报错有的却不报错问题

    前几天更换电脑重新安装新的idea发现在dao层 有的同事没有使用 Param注解 导致系统报错 错误如下 org mybatis spring MyBatisSystemException nested exception is org
  • 显示实例化和显示具体化

    struct man int age double salary 显示具体化 指定模板函数中类型 意思是不要使用swap模板来生成函数定义 而是要使用专门为job类型显示定义的函数定义 因为job是一个结构体 所以swap不可能是直接的利用
  • Flutter的Stepper

    文章目录 Flutter的Stepper的简介 Stepper的详细介绍 使用方法 导入flutter material dart包 创建状态变量 创建Stepper 创建一个Step widget列表 典型用法 Step对象的创建 例子
  • 2023 1.2 Scala变量与数据类型

    学习目标 学会变量声明 掌握数据类型 初学Scala时 建议读者在Scala命令行模式中操作 最终程序的编写可以在IDE中进行 在Windows的CMD窗口中或CentOS的Shell命令中执行scala命令 即可进入Scala的命令行操作
  • uni-app列表组件 list组件,简单好用通用

    随着技术的发展 开发的复杂度也越来越高 传统开发方式将一个系统做成了整块应用 经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改 造成牵一发而动全身 通过组件化开发 可以有效实现单独开发 单独维护 而且他们之间可以
  • Dockerfile 中 配置安装 php 扩展

    我的个人博客 逐步前行STEP 以下配置实现了 在docker环境中安装scwl中文分词的php扩展 scwl RUN curl http www xunsearch com scws down scws 1 2 3 tar bz2 o s
  • 管理回收站+启用/禁用回收站+查看回收站信息+清空回收站对象

    管理回收站 1启用 禁用回收站 1 关闭回收站 alter session set recyclebin off show parameter recyclebin 2 启用回收站 alter session set recyclebin
  • Mockito 的 MockMvc:零基础教程

    Mockito 的 MockMvc 零基础教程 大家好 今天 我们将一起学习 Mockito 的 MockMvc 在这篇零基础教程中 我们将介绍 MockMvc 的概念 应用场景 快速上手方法 常用特性 注意事项以及原理概述 让我们以轻松幽
  • 【手把手教你用Matlab做双目摄像头标定】Ubuntu环境

    手把手教你用Matlab做双目摄像头标定 Ubuntu20 04环境 准备工作 你需要一个标定板 你需要一个双目摄像头 获取双目摄像头的设备号 跑起来看看 分割图像并完成拍照 使用Matlab进行标定 准备工作 你需要一个标定板 一个高精度
  • gcc warning: warning: 'tick' may be used uninitialized in this function

    是因为没有初始化tick 详见 http blog csdn net max415 archive 2008 05 17 2454165 aspx
  • 152. Maximum Product Subarray dynamic programming

    Find the contiguous subarray within an array containing at least one number which has the largest product For example gi
  • Linux——操作文件的底层系统调用,探究父子进程是否可以共享文件

    linux操作系统奉行一切皆文件的理念 所有文件设备几乎都可以用一套系统调用即open close write read 等来操作 系统调用和C库调用操作文件类似 Linux自带的man手册是最权威的 通过查看man手册来查看系统调用用法
  • fabric 学习笔记

    Fabric 的学习 定义 Fabric provides a missing object model forcanvas as well as an SVG parser layer of interactivity and a who
  • conda和pip查看、配置源

    目录 conda查看 配置源 pip查看 配置源 conda查看 配置源 国内conda源 源 地址 清华大学 conda config add channels https mirrors tuna tsinghua edu cn ana
  • python socket ssl编程

    http blog csdn net hongqun article details 6833412 首先 使用如下命令生成证书和key openssl req new x509 days 365 nodes out cert pem ke