自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 OSSIM系统——nmap的使用

显示nmap的版本语法:nmap --versionNmap默认发送一个arp(地址解析协议用来获取MAC地址)的ping数据包,来探测目标主机在1-10000范围内所开放的端口。语法:nmap < target ip addres>结果分析第一列是端口,第二列是状态,第三列是开放的服务例如80端口就是以前使用的http服务可以举例8080端口状态:Open(开放的)意味着目标机器上的应用程序正在该端口监听连接/报文。filtered(被过滤的)意味着防火墙,过滤器或.

2022-04-05 18:17:41 670

原创 OSSIM系统——mysql的使用

OSSIM系统自带了mysql软件登录通过 grep ^pass= /etc/ossim/ossim_setup.conf | cut -f 2 -d “=” | sed ‘/^$/d’ 取出密码例如我的密码是RxbYJ42JqN再登录数据库mysql -uroot -p登录成功后就能使用数据库了例如show databases;就可以看到OSSIM中的数据库表信息注意:密码不能修改,修改会导致页面进入失败...

2022-04-05 17:58:29 1343

原创 OSSIM系统的安装教程(超详细)

首先在网上下载OSSIM系统的镜像,记住自己保存的位置。打开vm,新建虚拟机。选择自定义安装。导入自己下载的镜像。虚拟机的内存建议使用8G使用桥接网络到此为止,新的虚拟机创建完毕。下面开始安装:选择第一个ossim系统,点击回车。选择语言,想选择汉语也可以,但是这里直接默认的英语,完成后点击回车。选择时区中国,other->Asia->china。选择编码,默认编码即可选择键盘,默认即可下面是网络设置,需要填写的IP需要和本机IP在同一网段。下面查询本机IP填写的

2022-01-13 19:42:57 6293

原创 Java总复习(二)

总复习1.抽象类和接口2.异常处理3.Object类中的方法1.抽象类和接口接口和类是并列的结构抽象类接口区别abstract修饰interface修饰一种事物的抽象一种行为的抽象不能实例化对象不能实例化对象实例类extends抽象类实例类implenments接口内部可以包括抽象方法内部可以包括抽象方法和常量(jdk7)类时单继承的接口是可以多继承的关于抽象类的说明:包含抽象方法的类一定是抽象类,但是抽象类中不一定包

2021-07-21 16:42:49 231

原创 Java总复习(一)

复习1.面向对象的三大特征2. 多态的实现原理3. 重载和重写的区别4.final关键字5. static关键字6. 访问限定符7. 单例设计模式1.面向对象的三大特征封装性:隐藏对象内部的复杂性,只对外公开简单的接口,便于外界调用从而提高系统的可扩展性、可维护性。继承性:减少代码的重复。多态性:也就是对象的多态性,即父类的引用指向子类的对象2. 多态的实现原理虚拟方法调用:在多态的前提下,当调用子父类同名的参数的方法时,实际执行的是子类重写父类的方法3. 重载和重写的区别重写是

2021-07-16 09:49:40 261

原创 git使用的详细过程

git的使用介绍1. git的安装2. git的操作原理3. git的具体使用(1)创建仓库(2)将文件添加到版本库中。(3)回退版本和恢复版本(4)管理修改(5)版本比较4. git分支的具体使用(1)分支使用的缘由(2)创建、切换分支(3)在分支上修改文件(4)合并分支(5)删除分支什么是git?Git是目前世界上最先进的分布式版本控制系统(没有之一)。什么是版本控制系统?版本控制是将原有的版本记录下来,并且将新版本改动的地方一并记录下来的一种控制系统。更方便我们管理。1. git的安装

2021-06-27 18:13:56 456 3

原创 awk 和sed的用法介绍

awk 和sed的用法介绍一、awk的介绍1. 作用及用法要求2. 使用方法(1)使用的命令:(2)举例说明:二、sed的介绍1. 用法介绍及常用命令2. 具体使用一、awk的介绍1. 作用及用法要求如果要格式化报文或从一个大的文本文件中抽取数据包,那么 awk 可以完成这些任务。awk 对文本操作时是由要求的,它要求文本的内容格式必须是有明确的行和列的,一种格式化的文本。eg:2. 使用方法(1)使用的命令:awk [-F field-separator] 'commands' inp

2021-06-27 10:21:03 2571

原创 String、StringBuffer、StringBuilder三者的异同

String、StringBuffer、StringBuilderString、StringBuffer、StringBuilder三者的异同StringBuffer、StringBuilder的一些常用方法String、StringBuffer、StringBuilder三者的异同String:不可变的字符序列;StringBuffer:可变的字符序列,线程安全的,效率低。StringBuilder:可变的的字符序列,jdk5.0新增的,线程不安全,效率高。相同点:底层都是用char[]型数

2021-06-22 14:22:29 172

原创 字符串相关的类String

String类一、String类概述二、String类的使用1. 不可变性的体现2. 对象的创建的两种方式及存储结构2. 两种不同的连接方式的对比3. String类中的常用方法一、String类概述String类:代表字符串。String类是一个final类,代表其实不能被继承的,也是不可变的字符序列。String对象的字符内容是存储在一个字符数组value[]中的。二、String类的使用1. 不可变性的体现2. 对象的创建的两种方式及存储结构public void test2()

2021-06-21 20:37:26 134

原创 libevent库的安装与使用

一、libevent库的安装Libevent 使用源码安装的方式,源码下载地址:http://libevent.org/下载下来后,将 Libevent 的压缩包拷贝到 Linux 系统中,然后按照以下步骤执行:打开终端,并且进入到 Libevent 所在位置利用 tar 命令解压 Libevent 压缩包进入到解压开的目录中切换到 root 模式下执行命令: ./configuer --prefix=/usr使用 make 命令完成编译使用 make install 命令完成安装使用

2021-06-20 19:42:54 3031 1

原创 selenium+Edge浏览器实现web端自动化测试

概述什么是web自动化测试?操作的对象是浏览器UI,或者手机页面也可以采用Web自动化测试,但是我们讲解web端自动化测试主要是浏览器。我们采用selenium工具实现web自动化实战,selenium 是一种只能操作web自动化的技术框架库。Selenium特点:开源,免费,背后有Google 维护源代码多浏览器支持:Firefox,Chrome,IE,Opera,Edge多平台支持:Linux,Windows,MAC多语言支持:Java,Python,Ruby,C#,JavaScript

2021-06-18 11:02:20 4631 1

原创 IO复用的方法——select、poll、epoll

一、select的引入在没有select之前,tcp/ip协议工作时我们都是用多线程的方式去解决的,有人链接服务端就创建一个线程去处理,为了提高效率引入select,它是将所有链接服务端的客户端放在一个进程中处理的函数。介绍一下读写事件以tcp建立套接字为例:读事件:刚开始客户端没有发数据的时候,服务器端的缓冲区是空的,所以不能进行读事件,如果发送过来了缓冲区就有数据了,所以可以根据客户端有没有发送数据判断服务器端是否具备读事件,发送数据了,则读事件就绪。写事件:只要发送缓冲区是有空间的,写事件

2021-06-14 18:32:21 411

原创 Jmeter工具中参数化、正则表达式提取器、响应断言的实现

上一篇文章实现了用Jmeter工具实现了新增用户和学员登录两个功能,这篇文章将对前两个功能进行优化。1.实现参数化在上一篇文章中,新增用户时,用户的手机号码需要一直改正,不然会出现"用户号码已存在"的问题,这篇文章将用参数化解决这个问题。点击函数助手,按要求填写相关数据,这里以随机手机号码后8位为例:生成随机函数已经成功,现在将函数字符串粘贴进请求的参数中就可以实现参数化。点击保存,查看结果树。2.正则表达式提取器正则表达式提取器和JSON表达式提取器的作用相同,都是提取数据的。但是

2021-06-09 12:18:39 510

原创 Jmeter工具的使用——功能测试

一、Jmeter的简介Jmeter是一款纯Java编写负载功能测试和性能测试开源工具软件。二、用jmeter实现抓包首先,将jmeter工具打开,在测试计划里右击如图,添加线程组。第二,右击测试计划,添加http代理服务器。设置打开本机代理,并正确设置本机代理的ip和端口,正确设置jmeter的参数等,然后点击启动。4. 在浏览器中进行的操作将在jmeter中展现出来,并在线程组中查看。三、jmeter的功能测试(1)以学员登录接口为例:右击测试计划添加线程组,如

2021-06-05 22:02:03 1365 1

原创 接口测试——postman

接口测试策略接口测试也是属于功能测试,所以跟我们以往的功能测试流程并没有太大区别,测试流程依旧是:测试接口文档(需求文档)。根据接口文档编写测试用例(用例编写完全可以按照以往规则来编写,例如等价类划分,边界值等设计方法)。执行测试,查看不同的参数请求,接口的返回的数据是否达到预期。得到测试报告。...

2021-06-02 12:19:44 195 1

原创 Fiddler4抓包工具的使用

Fiddler4抓包工具的使用1.抓包工具的定义及工作原理2.抓包工具的使用(1)下载抓包工具(2)改写浏览器的代理(3)开始抓包1.抓包工具的定义及工作原理抓包工具是拦截查看网络数据包内容的软件。作用:通过抓包工具改写HTTP代理,让数据从它那通过,来监控并且截取到数据。相当于一个中间商。2.抓包工具的使用本篇介绍的抓包工具是Fiddler4。(1)下载抓包工具(2)改写浏览器的代理本篇以电脑自带的微软浏览器抓取百度为例,其他浏览器和其相仿。步骤:打开浏览器点击右上角的三个点。

2021-06-02 10:25:34 1292

原创 Linux 线程的创建与同步

1.线程的定义线程:进程内部的一条执行路径。是资源调度和执行的基本单位。进程:一个正在执行的程序。是资源分配的基本单位。一个进程里面可以包含多条线程,当子线程被创建开始就和主线程并发运行。2.线程的创建和使用在学习线程的时候需要掌握的知识。我们要理解线程的并发运行。并发运行就会产生冲突,所以我们还要学会对进程进行控制。创建线程的方法:pthread_create()退出线程的方法:pthread_exit,exit是退出进程的,单独要退出某一个线程用pthread_exit。合

2021-06-01 13:03:34 226 2

原创 tcp、udp协议连接的建立和释放

tcp协议连接的建立和释放一、tcp协议(1)tcp的头部结构(2)tcp的三次握手(重点)(3)tcp的四次挥手(重点)(4)tcp的状态转移图一、tcp协议TCP/IP(传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。(1)tcp的头部结构16位端口号:告知主机

2021-05-31 21:21:05 2478 3

原创 简单排序、堆排序

二、选择排序(1)主要思想(2)代码实现#include <stdio.h>#include <assert.h>#include <stdlib.h>void SelectSort(int arr[], int len){ int minindex; //记录最小数的下标 int tmp = 0; for (int i = 0; i < len; i++) { int minindex = i; for (int j =

2021-05-27 10:26:57 101

原创 朴素算法、冒泡排序

一、朴素算法朴素算法也叫字符串匹配算法,它主要是在主串中查找和子串相同的串,并返回从查找位置开始的相同串首的一种算法。eg1:主串:“sdjfklashguiew”,子串:“shgui”朴素算法可以在主串中找到shgui,并且返回s字母所在位置6(下标从0开始)。eg2:主串:“abcdef”,子串:“gthjj”没有找到子串,就打印出没找到字符。(1)主要思想从主串中第一个元素开始比较,元素相同接着往下比较,元素不同从主串第二个元素开始重新开始比较。(2)代码实现#include&

2021-05-26 20:26:11 869

原创 http协议

一、tcp协议1.简介HTTP协议是Hyper Text Transfer Protocol(超文本传输协议),是基于TCP/IP通信协议来传递数据的(HTML文件,图片文件,查询结果等)。2.基本的工作原理(1)请求http的消息格式:由请求行(request line)请求头(header)空行和请求数据四部分构成。请求行请求行又分为:请求方法、URL、协议版本构成。请求方法有多种,其中最重要的两个是get和post方法。方法描述GET请求指定的页面信息,并

2021-05-26 19:21:58 111

原创 软件测试基础知识

一、软件测试1.含义及目的在规定的条件下对程序进⾏操作,以发现程序错误,衡量软件质量,并对其 是否能满⾜设计要求进⾏评估的过程。目的:尽可能多的发现软件缺陷。但是并不作为衡量测试能力的标准。测试⽬的不仅仅为了找出错误,通过分析错误产⽣的原因和错误的分布特征,帮助项⽬管理者发现当 前所采⽤的软件过程的缺陷,以便改进。2.软件测试V模型V 模型是软件测试过程中的常⻅⼀种模型,它反映了开发过程和测试过程的关系,在测试软件中起着重要作⽤。V模型的左半部分是开发人员的要做的事,右半部分是测试人员需要

2021-05-26 10:50:25 141 3

原创 二路归并算法

二路归并1.基本思想2.举例说明3.方法实现4.性能分析1.基本思想二路归并排序就是将两个有序子表归并成一个有序表,归并排序是“分治法”的一个非常典型的应用,同时它也是递归算法的一个好的实例。它将问题分成一些小的问题然后递归求解,而治就是把分阶段的答案拼起来。假如给定一组整型数字需要排序,二路归并就是将所有数据一个一个看做单独的组,相邻两组进行排序合并。2.举例说明3.方法实现#include <stdio.h>#include <assert.h>#inclu

2021-05-23 11:43:30 2299

原创 直接插入排序、希尔排序

一、朴素算法朴素算法也叫字符串匹配算法,它主要是在主串中查找和子串相同的串,并返回从查找位置开始的相同串首的一种算法。eg1:主串:“sdjfklashguiew”,子串:“shgui”朴素算法可以在主串中找到shgui,并且返回s字母所在位置6(下标从0开始)。eg2:主串:“abcdef”,子串:“gthjj”没有找到子串,就打印出没找到字符。(1)主要思想从主串中第一个元素开始比较,元素相同接着往下比较,元素不同从主串第二个元素开始重新开始比较。(2)代码实现#include&

2021-05-21 10:48:03 242

原创 两个队列实现一个栈

两个栈实现一个队列1.主要思想2.结构设计3.基本操作(1)初始化(2)入栈(3)获取栈顶第一个元素的值,但不删除(4)获取栈顶第一个元素的值并删除(5)判空(6)判满(7)获取队列有效元素个数(8)清空(9)销毁4.完整代码1.主要思想栈的特点:先进后出。队列的特点:先进先出。我们在用两个队列实现栈的时候是用顺序队列。2.结构设计既然是用两个队列实现栈的操作,所以定义的结构体中的成员就是两个队列。typedef struct{ SqQueue q1; SqQueue q2;}TQSt

2021-05-15 19:53:40 3109

原创 两个栈实现一个队列

一、两个栈实现一个队列1.主要思想栈的特点:先进后出。队列的特点:先进先出。我们在用两个栈实现队列的时候是用顺序栈,链栈本身就是可以实现先进先出的,只不过时间复杂度为O(n).2.结构设计既然是用两个栈实现队列操作,所以定义的结构体中的成员就是两个栈。typedef struct TSQueue{ Stack s1; Stack s2;}TSQueue, *PTSQueue;3.基本操作我们要实现的是一个对列,所以所有的操作都是基于队列的基础上,队列有什么操作,我们实现的就有什

2021-05-13 18:06:12 1235

原创 链式队列

一、什么是队列?队列是一种先进先出FIFO的一种线性结构,也有链式和顺序之分。入队的一端称为队尾,出队的一端称为对头。1.链式队列的设计typedef struct Node{ int data;//数据域,没存放节点的值 struct Node* next;//指针域,存放下一个节点的地址}Node, * PNode;//重新设计的头结点typedef struct LQueue{ struct Node* prior;//指向头结点; struct Node* tail

2021-05-12 19:47:06 357

原创 顺序队列

什么是队列?队列是一种先进先出FIFO的数据结构,也是一种受到限制的顺序表。类比:排队买饭

2021-05-09 20:00:44 349 1

原创 Linux下进程间通信——管道

进程间通信进程间通信的方式(ipc机制):管道、信号量、消息队列、共享内存、套接字。利用我们学过的知识完成进程间通信用到的操作:一个程序像文件中写数据,用另一个文件来读取。由此,如果我们能将数据写入内存中,效率将会高很多。所以我们可以用管道的方式来进行进程间通信。进程间通信——管道优点:管道是一种直接想内存中写入数据和读取数据的工具。管道是可以让读写数据进行同步控制的一种工具。注意:管道分为有名管道和无名管道。写入管道的数据存储在内存中。有名管道和无名管道的区别:有名管道可

2021-05-09 16:58:04 409

原创 链栈

链栈利用带头结点的单链表实现。栈顶:入栈和出栈的操作都在栈顶,链栈栈顶在表头(根据时间复杂度确定的,都是O(1))。链栈的设计typedef struct LSNode{ int data; struct LSNode* next;//类似单链表的设计界结构;}LSNode,*PLStack;//因为栈顶在表头,所以不需要top指针,表头的后面就是栈顶;链栈的基本操作初始化void InitStack(PLStack ps){ assert(ps != NULL); if

2021-05-08 20:49:37 662

原创 顺序栈

栈的定义栈是限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有其特殊含义,成为栈顶,相应的,表头成为栈底。不含元素的栈成为空栈。顺序栈的操作栈是一种先进后出,后进先出的数据结构。(访问受限)对于栈的操作都是从栈顶开始操作,即插入删除都是从栈顶开始操作。顺序栈设计typedef struct Stack{ int* base; //用来申请动态内存; int stackSize; //当前栈总体个数; int top; //栈顶指针,实际为下

2021-05-07 14:36:18 211

原创 Linux下多文件链接执行及调试技术

多文件链接的方法多文件链接的一般方法给出所要调用的函数声明及实现方法cat max.hint max(int x,int y); //max函数的声明cat max.c#include"max.h"int max(int x,int y){ return x>y?x:y;} //max函数的实现方法cat add.hint add(int x,int y); //add函数的声明cat add.c#inc

2021-05-06 16:23:39 574

原创 双向链表

双向链表特点:有两个指针域,一个指向直接前驱,一个指向直接后继。双向链表的设计因为链表能够双向移动,所以得有两个指针域。typedef int ELEMTYPE;typedef struct DNode{ ELEMTYPE data; //数据域 DNode* next; //指向直接后继 DNode* prior; //指向直接前驱}DNode, * Dlist; //Dlist == DNode*双向链表的基本操作初始化

2021-05-05 19:52:58 464

原创 循环链表

循环链表循环链表的特点:循环链表是将表中最后一个结点的指针域指向头结点,整个链表形成一个环,所以表中任意结点出发均能找到表中其他结点。循环链表和单链表的区别:循环链表尾结点的next不在指向nullptr,而是指向头结点(不是第一个结点)。循环链表的设计循环链表和单链表的基本操作都是类似的,单链表结构体成员和循环链表结构体成员也是相同的。typedef int ELEMTYPE;typedef struct CNode{ ELEMTYPE data; //数据域

2021-05-05 17:17:46 4779 2

原创 动态开辟二维数组的两种方案及位体

先来回顾一下动态开辟一位数组的方法:#include<stdio.h>#include<stdlib.h>int main(){ int n = 0; int* ip = nullptr; scanf_s("%d", &n); ip = (int*)malloc(sizeof(int) * n); if (nullptr == ip)exit(1); for (int i = 0; i < n; ++i) { ip[i] = i; } fr

2021-05-04 22:40:34 651

原创 位运算、左右移运算

位运算位运算是只适合于整型,并且是对应于二进制进行的一种计算方法,包括位与&、位或|、异或^、取反~。位运算的使用要进行位运算,首先要将数据转化为二进制数。位与运算:当两数同时为1时,结果为1,否则为0。#include<stdio.h>int main(){ char a = 20, b = 12; char c = 0; c = a & b; printf("c=%d\n", c); return 0;}运行结果:位或运算:两数中任意一

2021-04-27 21:01:20 198

原创 快速排序

快速排序的思想及代码实现第一种方式:两边同时比较数据int Parition(int* br, int left, int right){ assert(br != nullptr); int i = left, j = right; int sum = br[i]; while (i <= j) { while (i<j && br[j]>sum)--j; if (i < j)br[i] = br[j]; while (i<j

2021-04-27 01:25:43 167

原创 Linux下对文件的操作及添加新用户

对文件的操作打包压缩文件解压缩文件对文件操作的其他命令命令作用cat1.小文件打印查看,2.可以合并文件cat file1 file2>file3,3.向文件中写入内容:cat >main.cmore分屏显示,仅一次less反复查看,q退出head显示一个文件的前十行,eg: head -3 passwd 显示文件前三行tail显示文件末尾的n行find查找文件, find -namegrep过滤文件,grep+

2021-04-26 20:45:24 477 1

原创 类型专题

数据类型整型数据类型对于整型数据而言,它们默认都是有符号的。int main(){ char; //1byte short; //2byte int ; //4byte long int; //4byte long long; //8byte //无符号类型unsigned unsigned char; //1byte unsigned short; //2byte unsigned int ; //4byt

2021-04-24 00:24:09 404 1

原创 单链表:头结点和头指针的实现方式

链式存储是什么样的结构?链式存储结构的特点使用任意的存储单元存储线性表的数据元素,存储单元可以使连续的也可以是不连续的,因此,为了表示每个数据元素和下一个元素的关系,除了存储本身的信息之外,还需要存储下一个元素的位置信息,将两部分信息组成的存储映像叫结点。它包括两个域,即数据域和指针域。单链表有两种:带头结点的单链表,带头指针的单链表。带头结点的单链表结点的定义定义结点时,头结点的数据域用于记录链表的长度。typedef struct Node{ union /

2021-04-22 18:37:33 969

空空如也

空空如也

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

TA关注的人

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