自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 收藏
  • 关注

转载 Wireshark分析DHCP

版权声明:欢迎转载,转载注明出处。    https://blog.csdn.net/qq_24421591/article/details/50936469DHCP,DNS和HTTP是3种常见的高层协议。一,动态主机配置协议DHCP1,DHCP简介DHCP(Dynamic Host Configuration Protocol),动态主机配置协议,是一个应用层协议。当我们将客户主机ip...

2018-11-20 17:31:47 551

转载 openssl 证书操作命令

生成Self Signed证书# 生成一个key,你的私钥,openssl会提示你输入一个密码,可以输入,也可以不输,# 输入的话,以后每次使用这个key的时候都要输入密码,安全起见,还是应该有一个密码保护> openssl genrsa -des3 -out selfsign.key 4096# 使用上面生成的key,生成一个certificate signing re

2017-12-04 16:38:04 547

转载 Https 建立安全连接的过程(SSL原理)

文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用。接着对数字证书做一个详细的解释,并讨论一下windows中数字证书的管理,最后演示使用makecert生成数字证书。如果发现文中有错误的地方,或者有什么地方说得不够清楚,欢迎指出! 1、基础知识      这部分内容主要解释一些概念和术语,最好是先理解这部分

2017-12-04 14:38:32 30594 15

转载 99%的人都理解错了HTTP中GET与POST的区别

GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。当你在面试中被问到这个问题,你的内心充满了自信和喜悦。你

2017-02-20 16:13:55 325

转载 HTTP 的重定向301,302,303,307(转)

HTTP 的重定向301,302,303,307(转) (2012-12-11 11:55:04)转载▼标签: 杂谈分类: 网络301 永久重定向,告诉客户端以后应从新地址访问.302 作为HTTP1.0的标准,以前叫做Moved Temporarily ,现在叫Found. 现在使用只是为了兼容性的处理,包括

2017-02-20 16:02:00 699

原创 关于认证,基本认证和摘要认证(翻译tr069 3.4.4 和3.4.5)

3.4.4  认证    如果CPE没有用TLS认证,ACS必须用HTTP来认证CPE。如果TLS用来加密,ACS应该用基本认证。如果TLS没有用来做加密,ACS必须使用摘要认证。  CPE必须支持HTTP的基本和摘要认证。CPE通过提供的基本认证和摘要认证的有点来确定认证方案。如果使用TLS加密,CPE应该主动发送基本认证身份。

2017-01-12 11:53:26 1199

原创 ACS 方法(翻译 TR069 A.3.3)

A.3.3  ACS支持在这个章节定义的方法,只有CPE 才能调用这些方法A.3.3.1 Inform无论会话是否建立,CPE必须调用Inform方法来初始化一个传输序列(交流)。这种方法的调用论据在table37中定义,回应的论据在table38中定义。table371,DeviceId  类型为DeviceldStruct,可以唯一标识CPE的结构体,在table3

2016-12-27 21:44:42 1280

原创 事件类型

一,“0 BOOTSTAP”   指出由于CPE第一次安装或是ACS的URL改变而引起会话建立。这种特殊的情况有:1)出厂后CWMP端第一次与ACS连接;2)出厂设置后,CWMP端第一次与ACS连接;3)由于某种原因ACS的URL改变后CWMP端第一次与ACS连接。注意,BOOTSTARP可能和其他事件代码一起组成是事件代码组,例如,在出厂后CPE初始启动时,CPE发送BOOTSTARP和BOOT

2016-12-27 20:40:18 645

原创 会话建立(翻译tr069 3.7.1.1 )

3.7.1.1 会话建立    根据3.2.1章节罗列的条件,CPE会与ACS建立一个会话,一旦连接成功建立,CPE会通过发送一个初始化Inform请求来建立会话。这样会通知ACS CPE当前的状态同时表明CPE 已经准备接受ACS的请求。

2016-12-14 21:06:11 663

原创 session 终止 (翻译TR069 3.7.1.4 & 3.7.2.4)

3.7.1.4 会话终止  当遇到以下所有情况时,CPE必须终止会话。  1、ACS不再有请求发给CPE,只有当最近的HTTP应答是空的CPE才能做出此结论;  2、CPE不再有请求发给ACS且已经发给ACS空的HTTP应答同时HoldRequests为0(HoldRequests为0 指的是CPE不再有请求发给ACS),如果这种情况没有遇到,CPE不再有请求或应答,它必须发出一个空的

2016-12-14 20:09:21 618

原创 ACS 主动发起连接 相关事件和注意事项(TR069协议翻译)

本文翻译取自TR-069_Amendment-5.pdf  section 3.2.2     ACS 可以在任意时间利用连接请求机制发起连接,CPE支持该机制,ACS建议支持该机制。      该机制依赖于ACS拥有可到达CPE的IP,如果CPE在防火墙后面,或者在ACS与CPE之间有NAT设备,ACS 便不能访问CPE,Annex k 定义了一种机制,该机制允许ACS访问CPE 但是不

2016-12-03 18:11:53 7358 1

原创 InternetGatewayDevice.TraceRouteDiagnostics.下的几个参数理解

1、DiagnosticsState  (表明诊断数据的可用性)None (READONLY) Requested Complete (READONLY) Error_CannotResolveHostName (READONLY) Error_MaxHopCountExceeded (READONLY)      如果ACS把该参数设置成Requested,CPE必须把相关诊断测

2016-11-29 21:49:33 2748

原创 用FTP传输做上传诊断

1、为FTP的传输连接打开一个TCP套接字2、依据获取到的连接回应             如果获取到FTP的积极响应,发送FTP USER 命令:把user的值设成“anonymous”             错误条件:如果接收到FTP的消极响应或是出现超时,把DiagnosticsState设置成Error_InitConnectionFailed 并终止测试。

2016-11-29 21:11:58 570 1

原创 用FTP传输下载诊断事件与相关动作

1、为FTP的传输连接打开一个TCP套接字2、依据获取到的连接回应             如果获取到FTP的积极响应,发送FTP USER 命令:把user的值设成“anonymous”             错误条件:如果接收到FTP的消极响应或是出现超时,把DiagnosticsState设置成Error_InitConnectionFailed 并终止测试。3、依据接受到

2016-11-29 20:41:10 1759

原创 c语言实现读取txt文件内容到结构体数组中

#include #include #define N 10typedef struct { char work_ID[5]; char name[20]; char phone_nu[12];}student;int main(int argc, char *argv[]){ student st[N];

2016-07-19 15:40:38 27369 3

原创 格式控制字符串

输入与输出共有的:%d 用来输入、出十进制数据。%ld 用来输入长整型数据。%hd  用来输入短整型整数。%c用来输入单个字符。%s  用来输入字符串。%f用来输入实数%lf  用来输入double 型实数。输出增加项:%u 用来输出unsigned 型数据%m.nf  用来指定输出实数数据的形式,m表示列数,n表示小数点位数%m.ne  用来输

2016-04-17 19:26:12 1085

原创 条件运算符的使用

条件运算符用法:条件?候选1:候选2例如//输入一个字符,如果是大写,变为小写输出,否则直接输出#include #include int main(){ char ch; puts("intput a character:"); scanf("%c", &ch); /*if(ch >= 'A' && ch <='Z') { ch = ch - 'A' + '

2016-04-17 15:27:05 640

原创 vs2008调试遇到的问题

很长时间没有调程序,今天遇到几个问题,顺便记下来,以便以后查找问题1:调试开始后,发现没有watch窗口办法:调试开始后,在调试-》窗口上查找。问题2:用F10可以单步调试,怎样跳出循环办法:在循环外边再另外设置一个断点,执行ctrl+F10可跳到该断点处,则就跳出了循环。问题3:到某一函数时,想看看函数内部怎样执行,用F10实现不了办法:调试到该函数时,执行F11可以进入

2016-04-17 14:34:03 353

原创 用opencv画虚线框矩形

#include using namespace std;using namespace cv; void drawDashRect(CvArr* img,int linelength,int dashlength,CvRect* blob,CvScalar color,int thickness){ int w=cvRound(blob->width);//width int

2016-04-08 15:50:30 10385

原创 实现排序后寻找出现次数最多的数

#include #include using namespace std;#define N 10void generate(int *a, int n){ for(int i = 0; i < n; i++) { a[i] = rand()%3; }}void print(int *a, int n){ for(int i = 0; i < n; i++) {

2015-09-28 20:52:42 458

原创 模板函数 c++

所谓函数模板实际上是建立一个通用函数,其函数类型和参数类型不具体指定,用一个虚拟的类型来代表,这个通用函数就是函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需要在模板中定义一次即可。在调用函数时,系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。例1.实现两数相加的模板函数#include #include using n

2015-09-20 15:57:29 238

原创 new 和 delete

1、delete p 用于删除数组利用的空间#include #include using namespace std;int main(){ int *p = new int[10]; for(int i = 0; i < 10; i++) { p[i] = i; cout<<p[i]<<" "; } delete p;//删除数组利用的空间 //也可用d

2015-09-17 19:27:13 262

原创 引用

一、引用的用途1、变量的引用是变量的别名,与变量占用同一段内存空间,引用在定义时需要初始化,不能为空。在函数内部使用#include #include using namespace std;int main(){ int a = 5; int &ra(a); ra = 3; cout << a <<endl; return 0;}输出3,ra 和 a是一个东

2015-09-17 14:50:22 251

原创 二分查找-递归和非递归

1、非递归实现int search(int a[], int n, int key){ int h = 0; int t = n-1; int m; while(h < t) { int m = (h + t)>>1; if(a[m] == key) { return m; } else if(a[m] > key) { t = m-1; }

2015-09-16 19:21:17 268

原创 函数重载

重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能1、重载条件:参数类型不同,参数个数不同,参数顺序不同,返回值不限制(返回值在计算到最后才会知道是什么类型的,但是在计算到最后之前必须知道调用的是哪个函数)2、函数默认参数#include

2015-09-16 18:06:18 297

原创 c++初始化

初识c++,需要知道两点内容1、c语言类型检查较弱,而c++注重类型,强类型,严格检查类型2、c++初始化#include #include using namespace std;int main(){ int a(5); double b(3.5); char *str("hello"); wchar_t *str1(L"china");//宽字符 cout<<

2015-09-16 15:58:36 472

原创 sizeof与strlen

1、sizeof用来返回类型以及静态分配的对象、结构或数组所占的空间,其值在编译时即计算好了。strlen返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL2、sizeof是运算符,strlen是函数。sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧3、

2015-09-15 08:35:59 194

原创 关于字符串常考函数

1、strcpy原型声明:char *strcpy(char* dest, const char *src);头文件:#include string.h> 和 #include 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回

2015-09-14 21:41:48 340

原创 可变参数

#include #include int add(int n,...){ va_list v;//保存可以边长的参数列表 va_start(v, n);//从n之后的所有参数保存之 int i; int sum = 0; for(i = 0; i < n; i++) { int data = va_arg(v, int); printf("%d\n",data);

2015-09-14 20:10:08 216

原创 优先级与结合性

优先级:同一个操作数,优先执行。例如:1+2-3+8*9,先执行8*9结合性:优先级相等的情况下,计算的方向,例如:int a, b, c; a=b=c=10;从右向左#include int main(){ int a[5] = {1, 3, 5, 7, 9}; int *p = a; printf("%d\n", *p++);//1, ++的优先级大于* return

2015-09-13 18:20:35 885

原创 简单的打印图形

#include #include int main(){ int i, j, k, n; printf("input the n:\n"); scanf("%d", &n); for(i = 0; i < n; i++)//控制行数 { for(j = 0; j <= i; j++)//控制*数 { printf("*"); for(k = 0; k < i

2015-09-11 18:24:09 356

原创 c实现面向对象

c语言的结构体里面没有函数,但是c++里面有函数,所以今天实现一个c语言面向对象的程序#include #include #include typedef struct cmd{ char *p; void (*prun)(struct cmd *pcmd);//函数指针 void (*pprint)(struct cmd *pcmd);}newcmd;void run(new

2015-09-10 18:03:16 226

原创 const

1、const 定义常量,只能在初始化时赋值#include #include int main(){ int num = 10;//变量 num = 3; printf("%d\n",num); return 0;}输出3 ,num是变量,可以赋值const int data = 10;//常量 printf("%d\n",data); retu

2015-09-09 11:02:44 225

原创 文件读取

1、获得文件大小int getfilesize(char *path){ FILE *pf;//文件指针 pf = fopen(path, "r"); if(pf == NULL) { return -1; } else { fseek(pf, 0, SEEK_END);//文件指针移动到末尾 int num = ftell(pf);//用于得到文件位置指针当前位置

2015-09-08 20:59:13 254

原创 数组的初始化和元素的删除

以前只是知道,数组元素删除与链表中元素删除相比很麻烦,知道其中的原理,没有真正做过,为了避免眼高手低,特来练练#include #include #define length 10int main(){ int a[length]; int i, j, num, n; n = length; for(i = 0; i < length; i++) { printf("%5

2015-09-06 11:14:33 301

原创 二维数组的访问方法

int main(){ int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; int (*p)[4] = a; int i, j; for(i = 0; i < 3; i++) { for(j = 0; j < 4; j++) { //printf("%d\t",a[i][j]);//方式一 //printf(

2015-09-06 09:07:52 852

原创 指针与数组

1、指针数组访问int main(){ int str[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int *p; for(p = str; p < str + 10; p++) { printf("%d\n",*p); } return 0;}#include #include int main(){ char *st

2015-09-05 11:42:18 360

转载 链表的插入排序

/*========================== 功能:直接插入排序(由小到大) 返回:指向链表表 头的指针==========================*//* 直接插入排序的基本思想就是假设链表的前面n-1个节点是已经按键值 (就是用它排序的字段,我们取学号num为键值)排好序的,对于节点n在 这个序列中找插入位置,使得n插入后新序列仍然有序。按照这种思想,依次

2015-09-04 16:47:53 382

原创 链表的增删改查

1、增加(尾插)void backnode(node** ppnode, int num, typedata data )//尾插{ node *pnewnode = (node *)malloc(sizeof(node)); pnewnode->num = num;//赋值 pnewnode->data = data; pnewnode->next = NULL; if(*ppnod

2015-09-04 08:57:53 304

原创 递归的顺序和逆序

实现十进制到二进制转化#include #include void int2two(int n){ if(n) { int l; l = n % 2; n = n/2; int2two(n); printf("%d",l); }}int main(){ int n = 10; int2two(n); return 0;}输出:1010print

2015-09-01 20:19:00 511

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除