errno

2019-2020-1 20175203 20175206 实验五 通讯协议设计

半世苍凉 提交于 2020-02-28 06:45:11
实验五 通讯协议设计-1 任务详情 在Ubuntu中完成http://www.cnblogs.com/rocedu/p/5087623.html中的作业 提交运行结果截图 作业: 研究OpenSSL算法,测试对称算法中的AES,非对称算法中的RSA,Hash算法中的MD5 基于Socket实现TCP通信,一人实现服务器,一人实现客户端 选用合适的算法,基于混合密码系统实现对TCP通信进行机密性、完整性保护。 学有余力者,对系统进行安全性分析和改进 因为之前作业中使用过openssl,所以无需再次下载 openssl: 多用途的命令行工具,包openssl,可以执行交互或批量命令。 openssl的加密算法: OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。 OpenSSL一共实现了4种非对称加密算法,包括DH算法

linux 网络编程:客户端与服务器通过TCP协议相互通信 + UDP

感情迁移 提交于 2020-02-24 14:26:28
1、TCP编程的客户端一般步骤: 1、创建一个socket,用函数socket(); 2、设置socket属性,用函数setsockopt();* 可选; 3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选; 4、设置要连接的对方的IP地址和端口等属性; 5、连接服务器,用函数connect(); 6、收发数据,用函数send()和recv(),或者read()和write(); 7、关闭网络连接; 2、TCP编程的服务器端一般步骤: 1、创建一个socket,用函数socket(); 2、设置socket属性,用函数setsockopt(); * 可选; 3、绑定IP地址、端口等信息到socket上,用函数bind(); 4、开启监听,用函数listen(); 5、接收客户端上来的连接,用函数accept(); 6、收发数据,用函数send()和recv(),或者read()和write(); 7、关闭网络连接; 8、关闭监听; 3、客户端源代码(tcpclient.c): #include <stdio.h> #include <string.h> #include <errno.h> #include <sys/socket.h> #include <stdlib.h> #include <netinet/in.h> #include <arpa

centos7 中 yum [Errno 256] No more mirrors to try 错误

元气小坏坏 提交于 2020-02-23 19:25:19
进入这个文件夹: cd /etc/yum.repos.d/ 然后删除这个文件夹下所有文件 找一个能用的centos7机器,把那台机器的 /etc/yum.repos.d/ 下的文件都拷贝到这台机器上 然后: yum update 即可 来源: CSDN 作者: 骑鱼的猫咪 链接: https://blog.csdn.net/qq_39820860/article/details/104464519

Python异常详解:基类、具体异常、异常层次结构

守給你的承諾、 提交于 2020-02-23 09:33:26
在 Python 中,所有异常必须为一个派生自 BaseException 的类的实例。 在带有提及一个特定类的 except 子句的 try 语句中,该子句也会处理任何派生自该类的异常类(但不处理 它 所派生出的异常类)。 通过子类化创建的两个不相关异常类永远是不等效的,既使它们具有相同的名称。 下面列出的内置异常可通过解释器或内置函数来生成。除非另有说明,它们都会具有一个提示导致错误详细原因的“关联值”。 这可以是一个字符串或由多个信息项(例如一个错误码和一个解释错误的字符串)组成的元组。 关联值通常会作为参数被传递给异常类的构造器。 用户代码可以引发内置异常。 这可被用于测试异常处理程序或报告错误条件,“就像” 在解释器引发了相同异常的情况时一样;但是请注意,没有任何机制能防止用户代码引发不适当的错误。 内置异常类可以被子类化以定义新的异常;鼓励程序员从 Exception 类或它的某个子类而不是从 BaseException 来派生新的异常。 关于定义异常的更多信息可以在 Python 教程的 用户自定义异常 部分查看。 当在 except 或 finally 子句中引发(或重新引发)异常时, __context__ 会被自动设为所捕获的最后一个异常;如果新的异常未被处理,则最终显示的回溯信息将包括原始的异常和最后的异常。 当引发一个新的异常(而不是简单地使用 raise

Mysql错误编码和解释表

倾然丶 夕夏残阳落幕 提交于 2020-02-20 05:54:22
Mysql错误编码和解释表 1.错误消息的组成 一共由三部分组成 mysql数字错误代码,这个数字的mysql的特定值,不可以移植到其它数据库系统。 一个五位长度的sqlstate值,这些值取自ANSI SQL和ODBC,并且更加标准化。并不是所有的MySQL错误号都具有相应的SQLSTATE值。在这些情况下,使用'HY000' (一般错误)。 错误的消息描述 2.一些额外的说明 如果需要错误检查,请使用错误代码,而不是错误消息。 如果数据库管理员更改语言设置,则会影响错误消息的语言。 错误代码在给定的MySQL系列的GA版本中是稳定的。在系列达到GA状态之前,新的代码可能仍在开发中,可能会发生变化。 错误消息信息在share/errmsg-utf8.txt文件中。 %d并分别%s表示数字和字符串,当它们被显示时被替换成Message值。 share/errmsg-utf8.txt中列出的错误值被用来生成的定义 include/mysqld_error.h和 include/mysqld_ername.hMySQL的源文件。 share/errmsg-utf8.txt列出的SQLSTATE值用于生成include/sql_state.hMySQL源文件中的定义 。 3.错误码和解释 错误:1000SQLSTATE: () HY000 ER_HASHCHK 消息:hashchk 错误

VIC运行笔记2020.1.13

孤街浪徒 提交于 2020-02-07 19:33:05
[07:13:56][root@DESKTOP-5GD45DM]~# vic_classic.exe -g/home/VIC_hanjiang/parameters/global_param.hanjiang.txt VIC Driver : Classic VIC Version : 5.0.1 February 1, 2017 VIC Git Tag : Compiled : by root on DESKTOP-5GD45DM (LINUX) Jan 12 2020 17:59:50 Compiler : gcc version : 5.4.0 Variable Infiltration Capacity (VIC) macroscale hydrologic model version 5.0.1, Copyright (C) 2016 Computational Hydrology Group, Dept. of Civil and Environmental Engineering, University of Washington. VIC comes with ABSOLUTELY NO WARRANTY. This is free software, you may redistribute it under certain conditions; see

会用errno,事半功倍

旧巷老猫 提交于 2020-02-06 01:57:36
参考一 参考二 参考三 参考四 一、 errno 二、 把errno的数字转换成相应的文字说明 1、 使用strerror函数 2、 使用perror函数 三、 errno的线程/进程安全性 附录 一、 errno 包含了头文件 errno.h 后就能直接使用该变量。 该变量在头文件中的定义 #ifndef errnoextern int errno;#endif 该头文件在 /usr/include/errno.h : 该变量用于保存程序的错误码,如果程序执行正确,则该变量不会更新。这些错误码通常是被定义在errno.h中以E开头的宏。 #define EDOM 33 该头文件在 /usr/include/asm/errno.h ,在 Ubuntu 16.04-64 系统上,该头文件路径是 /usr/include/asm-generic/errno.h 如下图: 以及 因为,errno可以把最后一次调用C的错误代码保留,如果最后一次调用C函数成功,则不会更改errno,所以如果你要使用之前, 可以先清空errno,然后通过errno判断下面要执行的函数是否成功 。 二、 把errno的数字转换成相应的文字说明 1、 使用strerror函数 函数原型: char * strerror(int errno) 使用方法: fprintf(stderr, "%s", strerror

nginx worker进程循环

梦想的初衷 提交于 2020-02-04 12:46:09
  worker进程启动后,其首先会初始化自身运行所需要的环境,然后会进入一个循环,在该循环中不断检查是否有需要执行的事件,然后处理事件。在这个过程中,worker进程也是需要与master进程交互的,更有甚者,worker进程作为一个子进程,也是可以接收命令行指令(比如kill等)以进行相应逻辑的处理的。那么worker进程是如何与master或者命令行指令进行交互的呢?本文首先会对worker进程与master进程交互方式,以及worker进程如何处理命令行指令的流程进行讲解,然后会从源码上对worker进程交互的整个工作流程进行介绍。      1. worker与master进程交互方式      这里首先需要说明的是,无论是master还是外部命令的方式,nginx都是通过标志位的方式来处理相应的指令的,也即在接收到一个指令(无论是master还是外部命令)的时候,worker会在其回调方法中设置与该指令相对应的标志位,然后在worker进程在其自身的循环中处理完事件之后会依次检查这些标志位是否为真,是则根据该标志位的作用执行相应的逻辑。      对于worker进程与master进程的交互,其是通过socket管道的方式进行的。在ngx_process.h文件中声明了一个ngx_process_t结构体,这里我们主要关注其channel属性:      typedef

highcharts 使用实例

心已入冬 提交于 2020-02-03 04:21:17
后端使用django实现,返回的数据可以修改为从数据库获取或其他方式获取,实例里是写死的数据。 urls配置: url(r'^outip/chart/$', views.charts), url(r'^outip/getchart/$', views.get_chart), url(r'^outip/getlast/$', views.get_last), url(r'^outip/detail/$', views.get_detail_chart), View Code 所有实例浏览器访问的后端方法:charts @csrf_exempt def charts(request): return render_to_response('html/chart.html') View Code 所有实例使用的html代码:chart.html <html> <head> <meta charset="utf-8"> <style> </style> <script type="text/javascript" src="/outip/staticfiles/js/jquery-2.1.4.js"></script> <script type="text/javascript" src="/outip/staticfiles/highcharts/js/highcharts.js"><

2017-2018-1 20155321 《信息安全系统设计基础》实验五——实时系统

…衆ロ難τιáo~ 提交于 2020-02-02 06:00:33
2017-2018-1 20155321 《信息安全系统设计基础》实验五——实时系统 任务一 两人一组 基于Socket实现TCP通信,一人实现服务器,一人实现客户端 研究OpenSSL算法,测试对称算法中的AES,非对称算法中的RSA,Hash算法中的MD5 选用合适的算法,基于混合密码系统实现对TCP通信进行机密性、完整性保护。 学有余力者,对系统进行安全性分析和改进 实验步骤 实验前的准备 下载OpenSSL最新版本: 参考网址 解压源代码:输入命令 tar xzvf openssl-1.0.2n.tar.gz 进入源代码目录:输入命令 cd openssl-1.0.2n 编译安装:依次输入命令 ./config 、 make 和 sudo make install 测试是否安装成功:输入命令 make test 由上图可以发现,安装成功 Socket实现TCP通信 主要是实现TCP/IP协议中的三次握手 在实际实现的过程中按照下图所示的步骤,调用系统函数即可: 此项实践内容在实验三中已经实现 服务端 /*将buf中的字节内容写入文件描述符fd*/ ssize_t writen(int fd, const void * vptr, size_t n){ size_t nleft; ssize_t nwritten; const char * ptr; ptr = vptr;