网络安全学习(1):概述、信息收集
渗透测试基本流程
确定目标
信息收集
漏洞探寻
漏洞分析
漏洞利用
信息整理
形成报告
计算机网络基础
HTTP
请求行
基本概念:
url: 统一资源定位符,即我们在浏览器上地址栏的一长串
例:https://www.bilibili.com/video/BV1YT411A7fy/
uri: 统一资源标识符,去除传输协议(例:https)、去除域名(例:www.bilibili.com)后留下的部分
例:/video/BV1YT411A7fy/
请求方式
HTTP请求方式有七种,常用get、post
get请求 请求参数在url地址中,url有长度限制
post请求 请求参数在请求体中,无大小限制
请求头
Host:请求主机域名/ip地址
User-Agent:提供浏览器的版本信息,供服务器解决浏览器兼容问题
Accept:传输文件类型(text/html,application/xhtml+xml,application/xml)
Referer:跳转前的地址,可以用于统计用户来源和防止盗链
Accept-Encoding:浏览器申明自己可接收的编码方法
Accept-La ...
Java笔记(11):比较器、集合、Lambda表达式
比较器
当我们需要实现对象的排序问题的时候,就要使用到Java的比较器。
Java实现对象排序的接口有两个:
自然排序:java.lang.Comparable
定制排序:java.util.Comparator
自然排序
String、包装类等都默认实现了Comparable接口,重写了comparaTo(obj)方法,因此都可以直接使用自然排序。
自定义类若想实现自然排序,我们需要去实现Comparable接口,然后重写comparaTo(obj)方法方法,重写comparaTo(obj)方法具有一定的规则:
如果当前对象this大于形参对象obj,则返回正整数;如果当前对象this小于形参对象obj,则返回负整数;如果相等,则返回0。
12345678910111213public int compareTo(Object o) { if(o instanceof Goods){//判断是否为Goods类型 Goods goods = (Goods) o;//将Object类型转换为Goods类型 if(this.price > ...
Java笔记(10):枚举类与注解
枚举类
Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等等。
自定义枚举类
方式一:通过一般类
声明对象的属性:private final修饰
私有化类的构造器,并给对象属性初始化
提供当前枚举类的多个对象:public static final修饰
可选:获取枚举类的属性 getXXX() 或 toString()
例:
1234567891011121314151617181920212223class Season{ //3.提供当前枚举类的多个对象 public static final Season SPRING = new Season("Spring"); public static final Season SUMMER = new Season("Summer"); public static final Season AUTUMN = new Season("Autumn"); p ...
Java笔记(9):多线程
多线程
多线程的创建
方式一:继承于Thread类
创建一个继承于Thread类的子类
重写Thread类的run()方法(将线程执行的操作写在里面)
创建Thread类子类的对象
通过此对象调用start()方法(不能通过直接调用run()方法启动线程)
12345678910111213141516171819202122public class Demo { public static void main(String[] args) { TestThread testThread = new TestThread(); testThread.start(); for (int i = 0; i < 100; i++) { if(i % 2 == 0){ System.out.println(Thread.currentThread().getName() + ":" + i); } } }}class TestThread extends Thre ...
Java笔记(8):异常处理
异常处理
概述
异常是程序在执行过程中发生不正常的情况。
Java程序的异常情况分为两类:
**Error:**Java虚拟机无法解决的严重问题。如JVM内部错误、资源耗尽等。一般不编写针对性代码处理。
**Exception:**其他由于编程出错或者偶发性的外在因素导致的一般性错误,则可以通过针对性的代码进行处理。如:空指针访问,试图读取不存在的文件,网络中断,数组越界等等情况。
对于异常,我们拥有两种办法:第一种是不处理,直接终止程序运行。另外一种就是在编写程序的过程中,将异常的处理方法写入代码中。
常见异常
运行时异常
NullPointerException 空指针
12int[] arr = null;System.out.println(arr[3]);
ArrayIndexOutOfBoundsException 数组越界
12int[] arr = new int[2];System.out.println(arr[2]);
ClassCastException 类型转换错误
12Object obj = new Date();String str = ...
Java笔记零碎补充(2):包装类、单例、代码块
包装类
包装类是针对八种基本数据类型定义相应的引用类型。
基本数据类型
包装类
byte
Byte
short
Short
int
Lnteger
long
Long
float
Float
double
Double
boolean
Boolean
char
Character
其中Byte Short Lnteger Long Float Double拥有一个父类Number。
包装类的出现,使得基本数据类型可以封装起来,作为一个类使用,完善了Java面向对象的特性。
包装类、基本数据类型、String相互转换
使用构造器将基本数据类型装箱
12345678Integer i1 = new Integer(1);System.out.println(i1.toString());//out:1Integer i2 = new Integer("1");System.out.println(i2.toString());//out:1Boolean b2 = new Boolean("true12 ...
Git入门笔记(3):分支管理
Git入门笔记(三)
分支管理
分支管理是Git中非常重要的管理,使用分支可以使你在开发主线中分离出来,在不影响开发主线的情况下继续工作,例如开发测试版、测试功能之类的。接下来介绍几个基础操作。
创建分支
现在我们需要创建一个叫test的分支,并切换至分支:
1git checkout -b test
实际上这是两条命令的简写:
12git branch testgit checkout test
第一条命令,代表创建一个test分支;
第二个命令,代表切换到test分支。
查看所有分支
我们使用不带任何参数的git branch命令即可查看所有分支,并且该命令会将当前分支用*号标注出来。
删除分支
1git branch -d test
这样我们就删除了test分支了。如果test分支包含我们未合并到分支的更改,它会报出错误:
12error: The branch 'test' is not fully merged.If you are sure you want to delete it, run 'git branch -D test' ...
Git入门笔记(2):远程仓库
Git入门笔记(二)
远程仓库
克隆项目到本地
很简单,git clone <url>在url填入远程仓库的地址就可以clone到本地了,url处有两种地址,一种是通过SSH进行克隆,另外一种是通过HTTPS的方式进行克隆。
上面为SSH的方式,下面为HTTPS的方式。
初始化远程仓库
HTTPS
以GitHub为例子,具体账号与仓库创建不再赘述。
仓库创建好了之后,我们看到我们的仓库是没有初始化的,GitHub页面上会出现一个初始化的教程。
我们照着教程上初始化即可,简单来说,它的初始化过程就是,先生成一个README.md,接着创建一个本地仓库,提交README.md到本地仓库,然后将本地仓库推送到远程仓库,即可完成初始化。
配置SSH
Git支持多种协议,其中包括SSH,SSH速度相当不错,比HTTPS效果更佳。我们来配置一下SSH。
第一步,我们检查一下电脑上是否已经存在SSH Key。
12cd ~/.sshls
如果显示出存在id_rsa.pub或 id_dsa.pub文件时,则证明已经存在SSH Key,可以跳过第二步。
第二步,创建SSH Key。
1 ...
Git入门笔记(1):基本知识与基本操作
Git入门笔记(一)
Git是一个非常常用的版本控制软件,很多被广泛使用的软件项目都是使用Git进行版本控制的。
本教程将不包括基础的安装流程。
Git文件的三种状态
使用Git进行操作软件时,文件状态有三种:
状态
描述
已提交(committed)
表示文件已经保存在本地Git库中。
已修改(modifiled)
表示文件已修改,但暂未保存到Git库中。
已暂存(staged)
表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
由于Git提交文件到Git库时,并不是直接从工作区直接到Git库的,中间存在一个暂存区(staging area),这个过程的文件就被称之为已暂存。
Git项目的三个工作区域
针对Git文件的三种状态,Git项目分为三个区域:
区域
描述
工作区
简单来说就是本地看到的目录。
暂存区(stage / index)
一般存放在.git目录下,里面包含了Git自动创建的第一个分支master,以及指向master的一个指针HEAD。
Git仓库(版本库)
工作区下隐藏的目录.git,是Git的 ...
Java笔记(7):反射
反射
据我们所知,Java是一种静态语言。但是Java却可以通过Reflection(反射)实现动态语言的特性,反射机制允许在执行期间借助Reflection API取得任何类的内部信息,并且能直接操作任意对象的内部属性及方法。
反射对象相当于是一面镜子,通过镜子,"反射"得到对象的信息:某个类的属性、方法、构造器、实现的接口。
获得反射对象
通过对象获得
1Class c1 = person.getClass();
通过forname获得
1Class c2 = Class.forName("cn.icewindy.test.Person");
通过类名.class获得
1Class c3 = Person.class;
验证一下:
1System.out.printf("c1:%s,c2:%s,c3:%s\n", c1.hashCode(), c2.hashCode(), c3.hashCode());//output:c1:295530567,c2:295530567,c3:295530567
基本内置类型的包装类都有一 ...