• 什么是Tor?Tor浏览器更新有什么用?什么是Tor?Tor浏览器更新有什么用?
  • 难怪马斯克裁掉整个安全部门,推特540万用户数据在暗网公开难怪马斯克裁掉整个安全部门,推特540万用户数据在暗网公开
  • 中华人民共和国网络安全法中华人民共和国网络安全法
大横幅1
大横幅2
到期时间:永久 到期时间:推广
到期时间:推广 小横幅4
今日发布2篇文章 | 本站共发布了1899篇文章
  • b树与b+树的区别

    数据存储方式 B树:B树的每个节点既存储数据也存储索引。这意味着B树的非叶子节点既包含索引键也包含对应的数据。 B+树:B+树的非叶子节点仅存储索引键,而数据全部存储在叶子节点。B+树的所有叶子节点通过指针连接成一个有序链表,便于范围查询。 叶子节点关联性 B树:B树的叶子节点和非叶子节点没有直接关联,各自独立存在。 B+树:B+树的叶子节点之间通过链表相连,形成了一个有序的链表。这有助于范围查询,因为数据按顺序排列。 范围查询效率 B树:在B树上进行范围查询相对较慢,因为需要访问非叶子节点和叶子节点。 B+树:B+树在范围查询时非常高效,因为只需遍历叶子节点的链表。 非叶子节点的索引键 B树:非叶子节点的索引键可以是重复的,可能导致不必要的冗余数据。 B+树:B+树的非叶子节点的索引键一般是不重复的,确保了索引的唯一性。 叶子节点个数 B树:B树的叶子节点数量和数据记录数量相等。 B+树:B+树的叶子节点数量比数据记录数量多,因为叶子节点主要用于存储数据和维护链表,而非叶子节点用于索引。 B+树 B树 ...

    2023-11-10 值得一看 122
  • TCP和UDP区别是什么

    连接导向 vs 无连接 TCP是一种面向连接的协议,它在数据传输前需要建立连接,确保数据的可靠性和有序性,然后在传输完成后释放连接。 UDP是一种无连接的协议,它不需要在传输数据前建立连接,也不维护连接状态,数据包之间相互独立,不会保证数据的可靠性和有序性。 可靠性 TCP提供可靠的数据传输。它使用序号、确认和重传机制来确保数据包的正确性,确保数据不丢失和按顺序传输。 UDP不提供可靠性。它只是简单地将数据包从源发送到目标,不提供确认、重传或错误检查。 数据量 TCP适用于大量数据的可靠传输,如文件传输、网页访问等。 UDP适用于需要快速传输和可以容忍一些数据丢失的应用,如实时音视频流、在线游戏等。 开销 TCP协议在建立和维护连接时有较高的开销,因为它需要进行三次握手、四次挥手等操作,以确保可靠性。 UDP协议的开销较低,因为它不涉及连接的建立和维护。 适用场景 TCP适用于需要可靠数据传输和流控制的场景,如HTTP、FTP等传统应用。 UDP适用于对实时性要求较高、可以容忍一些数据丢失的应用,如音频/视频流、在线游戏、DNS查询等。 总结 ...

    2023-11-10 值得一看 126
  • get和post区别

    数据传输方式 GET:通过URL将数据附加在请求中,数据暴露在URL中,通常用于请求数据,对请求参数有长度限制,通常在2048字符以内。 POST:通过请求正文传输数据,数据不暴露在URL中,通常用于发送数据,对请求参数没有固定的长度限制,可以传输大量数据。 安全性 GET:传输的数据在URL中可见,因此不适合传输敏感信息,如密码。 POST:传输的数据在请求正文中,相对更安全,适合传输敏感信息。 缓存 GET:请求可以被缓存,对相同URL的多次GET请求可以从缓存中获取响应,具有幂等性(多次请求产生相同结果)。 POST:请求不能被缓存,每次POST请求都会向服务器发送数据,不具有幂等性。 幂等性 GET:GET请求通常应该是幂等的,即多次执行相同的GET请求应该产生相同的结果。 POST:POST请求通常不是幂等的,多次执行相同的POST请求可能会导致不同的结果。 书签和浏览器历史 GET:可以被添加为书签,可以在浏览器历史中记录。 POST:通常不会被添加为书签,不会出现在浏览器历史中。 数据类型 GET:通常用于请求资源,如网页、图片等。 POST:通常用于提交表单数据、上传文件等。 总结 ...

    2023-11-10 值得一看 119
  • Linux常用命令之systemctl用法详解

    Linux systemctl命令是系统和服务管理器的主要命令之一,它可以启动、停止、重启、重新加载和查询系统服务状态等操作。 语法格式: systemctl 参数 [动作] [服务名] 常用参数: -a 显示所有单位 -f 覆盖任何冲突的符号链接 -H 设置要连接的主机名 -M 设置要连接的容器名 -n 设置要显示的日志行数 -o 设置要显示的日志格式 -q 静默执行模式 -r 显示本地容器的单位 -s 设置要发送的进程信号 -t 设置单元类型 –help 显示帮助信息 –version 显示版本信息 常用动作: start 启动服务 stop 停止服务 restart 重启服务 enable 设置服务开机自启 disable 取消服务开机自启 status 查看服务状态 list 显示所有已启动服务 举例: 1、查看特定服务的状态 systemctl status httpd 2、启动特定服务 systemctl start httpd 3、停止特定服务 systemctl stop httpd 4、重新加载服务 必须在服务启动的情况下,重新加载服务,不然报错,它并不支持所有的服务,比如 network systemctl reload httpd 5、将特定服务设置成开机启动 systemctl enable httpd 6、取消开机启动 systemctl disable httpd 7、查看服务是否设置成开机启动 看输出结果,就知道是否是开机启动,enabled 代表开机启动,disabled 代表开机不启动 systemctl is-enabled httpd 8、注销指定服务 注销服务后,服务就没法启用了,这对于禁用高危服务相当有用 systemctl mask httpd 9、取消注销指定服务 重新启用注销的服务 systemctl unmask httpd 10、列出所有可用单元 systemctl list-unit-files  11、列出所有已启动的服务列表信息 systemctl list-units --type=service ...

    2023-11-09 技术教程 102
  • Linux常用命令之ls用法详解

    Linux ls(英文全拼: list directory contents)命令用于显示指定工作目录下之内容(列出目前工作目录所含的文件及子目录)。 语法格式: ls [参数] [文件名] 常用参数: -a 显示所有文件及目录 -A 不显示当前目录和父目录 -d 显示目录自身的属性信息 -i 显示文件的inode属性信息 -l 显示文件的详细属性信息 -m 以逗号为间隔符,水平显示文件信息 -r 依据首字母将文件以相反次序显示 -R 递归显示所有子文件 -S 依据内容大小将文件排序显示 -t 依据最后修改时间将文件排序显示 -X 依据扩展名将文件排序显示 –color 显示信息带有着色效果 例子: 列出/home目录下的所有文件和目录 ls/home 显示当前目录所有文件和目录,包含隐藏文件 ls-a 除了文件名以外,还列出文件类型,权限,拥有者,文件大小等 ls-l 按时间先后顺序列出,新建立的最先显示 ls -t 按文件首英文字母,相反次序列出 ls -r 列出该目录下所有文件和目录,目录的名称后加 “/” ls -F 参数可以多个,按时间先后顺序把文件或目录的详细信息列出 ls -rlt ...

    2023-11-09 技术教程 127
  • Linux常用命令之echo详解

    Linux echo命令可以用于向标准输出或文件写入一行或多行文本。 通常用来输出一些提示信息或测试脚本的输出,也可以用于输出变量的值或执行命令的结果。 语法格式: 语法格式:echo [参数] 字符串或$变量名 常用参数: -e “\a” 发出警告音 -e “\b” 删除前面的一个字符 -e “\c” 结尾不加换行符 -e “\f” 换行后光标仍停留在原来的位置 -e “\n” 换行后光标移至行首 -e “\r” 光标移至行首但不换行 -E 禁止反斜杠转义 -n 不输出结尾的换行符 –version 显示版本信息 –help 显示帮助信息 例子 输出“hello world”,下面的双引号可省略 echo "hello world" 定义变量 string string="Linux" 输出 string 的值 echo $string 取 string 的长度 echo ${#string} 截取字符串,字符串索引从 0 开始,输出 nux echo ${string:2} 从第三个字符,截取 1 个字符,输出 n echo ${string:2:1} 替换字符,把第一个 i 替换成 a,输出 Lanux echo ${string/i/a} 替换所有的 i 为 a,输出 Lanuxa string="Linuxi" echo ${string//i/a} ...

    2023-11-09 技术教程 132
  • 什么是猴子补丁,有什么用

    一、什么是猴子补丁? 猴子补丁:Monkey Patch,主要功能就是动态的属性的替换,模块运行时替换的功能。 说直接点就是程序功能的追加或者变更。 二、Monkey Patch功能简介 Monkey Patch允许在程序运行期间动态的修改一个类或者模块。 三、举个例子 之前一个做游戏的,在很多地方都用了**import json,后来发现ujson比Python自带的json快很多,于是问题来了,几十几百个文件难道要一个一个的把import json替换成import ujson as json吗? 那也太痛苦了,其实只需要在进程开始的地方使用monkey patch**就行了,它是会影响整个进程空间的,同一进程空间中一个module只会被执行一次。 """ file:json_serialize.py """ import time import json # 时间测试装饰器 def run_time(func): def inner(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f'程序用时:{end_time - start_time}') return result return inner @run_time def json_dumps(obj): return json.dumps(obj) # 生成测试字典 test_dict = {i: 1 for i in range(1, 10000001)} 使用json模块执行原程序: """ file:run.py """ from json_serialize import json_dumps, test_dict print(f'json.dumps编码用时:', end='') r1 = json_dumps(test_dict) 原程序的性能太低,我们可以使用ujson将json替换掉! 使用monkey patch修改后: """ file:run.py """ import json import ujson from json_serialize import json_dumps, test_dict def monkey_patch_json(): json.dumps = ujson.dumps monkey_patch_json() print(f'使用猴子补丁之后json.dumps编码用时:', end='') json_dumps(test_dict) 这个时候在这个项目中json模块就被monkey patch修改为了ujson模块。 ...

    2023-11-09 值得一看 100
  • Spring Boot与HttpClient:轻松实现GET和POST请求

    1. HttpClient介绍 HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。   1.1. HttpClient作用 发送HTTP请求 接收响应数据 思考:为什么要在Java程序中发送Http请求?有哪些应用场景呢? 1.2. HttpClient应用场景 当我们在使用扫描支付、查看地图、获取验证码、查看天气等功能时 其实,应用程序本身并未实现这些功能,都是在应用程序里访问提供这些功能的服务,访问这些服务需要发送HTTP请求,并且接收响应数据,可通过HttpClient来实现。 1.3 HttpClient的maven坐标 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency> 1.4. HttpClient的核心API HttpClient:Http客户端对象类型,使用该类型对象可发起Http请求。 HttpClients:可认为是构建器,可创建HttpClient对象。 CloseableHttpClient:实现类,实现了HttpClient接口。 HttpGet:Get请求类型。 HttpPost:Post请求类型。 1.5. HttpClient发送请求步骤 创建HttpClient对象 创建Http请求对象 调用HttpClient的execute方法发送请求 2. SpringBoot快速入门HttpClient 对HttpClient编程工具包有了一定了解后,那么,我们使用HttpClient在Java程序当中来构造Http的请求,并且把请求发送出去,接下来,就通过入门案例分别发送GET请求和POST请求,具体来学习一下它的使用方法。 项目结构 创建HttpClient-demo,并导入对应依赖到pom.xml 完整项目结果   pom.xml 依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>spring-boot-starter-parent</artifactId> <groupId>org.springframework.boot</groupId> <version>2.7.15</version> </parent> <groupId>com.zbbmeta</groupId> <artifactId>HttpClient-demo</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>3.0.2</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency> </dependencies> </project> 2.1. GET方式请求 实现步骤: 创建HttpClient对象 创建请求对象 发送请求,接受响应结果 解析结果 关闭资源 在com.zbbmeta.controller包下创建HttpClientController接口类,并创建testGET()方法 package com.zbbmeta.controller; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicHeader; import org.apache.http.util.EntityUtils; import org.junit.jupiter.api.Test; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Arrays; /** * @author springboot葵花宝典 * @description: TODO */ @RestController @RequestMapping(value = "/httpclient") @Slf4j @Api(tags = "HttpClient测试接口") public class HttpClientController { @GetMapping("/httpget") @ApiOperation(value = "http员工状态") public String testGET() throws Exception{ //创建httpclient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); //创建请求对象 HttpGet httpGet = new HttpGet("http://localhost:8899/admin/employee/status"); //发送请求,接受响应结果 CloseableHttpResponse response = httpClient.execute(httpGet); //获取服务端返回的状态码 int statusCode = response.getStatusLine().getStatusCode(); System.out.println("服务端返回的状态码为:" + statusCode); HttpEntity entity = response.getEntity(); String body = EntityUtils.toString(entity); System.out.println("服务端返回的数据为:" + body); //关闭资源 response.close(); httpClient.close(); return "服务端返回的数据为:" + body; }n "服务端返回的数据为:" + body; } } 启动项目,PostMan访问http://localhost:8899/httpclient/httpget请求 测试结果   2.2. POST方式请求 在HttpClientTest中添加POST方式请求方法,相比GET请求来说,POST请求若携带参数需要封装请求体对象,并将该对象设置在请求对象中。 实现步骤: 创建HttpClient对象 创建请求对象 发送请求,接收响应结果 解析响应结果 关闭资源 在com.zbbmeta.controller包下创建HttpClientController接口类,并创建testPost()方法 @PostMapping("/httppost") @ApiOperation(value = "http员工登录") public String testPost() throws Exception{ //创建httpclient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); //创建请求对象 HttpPost httpPost = new HttpPost("http://localhost:8899/admin/employee/login"); JSONObject jsonObject = new JSONObject(); jsonObject.put("username","admin"); jsonObject.put("password","123456"); StringEntity entity = new StringEntity(jsonObject.toString()); //指定请求编码方式 entity.setContentEncoding("utf-8"); //数据格式 entity.setContentType("application/json"); httpPost.setEntity(entity); //发送请求 CloseableHttpResponse response = httpClient.execute(httpPost); //解析返回结果 int statusCode = response.getStatusLine().getStatusCode(); System.out.println("响应码为:" + statusCode); HttpEntity entity1 = response.getEntity(); String body = EntityUtils.toString(entity1); System.out.println("响应数据为:" + body); //关闭资源 response.close(); httpClient.close(); return body; } 测试结果 ...

    2023-11-09 技术教程 176
  • 记一次某年代久远的某云漏洞到获得cnvd证书

    一、前言 去年在做云安全运维时,忙的都没有空挖漏洞。为了弥补去年一年cnvd证书的空缺,某一天晚上我打开了FOFA搜索关键字"系统",找到了某个系统网站进行测试。 二、思路历程 找到该系统时,首先用插件看了下网站接口是否存在未授权访问。 看了圈都是下载相关的页面,接着就用dirsearch进行目录扫描。 其中在检查扫描到的目录/login.php时,访问该网页时跳出 然后一堆代码一闪而过后,跳转到如下页面 看到上面的情形我猜测网站环境可能是不支持php的,php源码会直接打印出来 接着抓包访问/login.php,果不其然登录页面源码出现了: 在登录的源码中,最有利用价值的莫过于是数据库的账号密码、数据库名称,但是3306端口不一定就是开在公网上的 于是我把FOFA上所有的该系统都扒下来,放进goby中只检测开放了3306端口的系统 在企查查发现该系统的开发商注册资产超过5000万,漏洞目标又有10+,满足申请cnvd证书的条件 已知数据库为KDM3ADB,账号为root,密码为kdc 直接使用sqlmap对数据库进行注入: python3 sqlmap.py -d "mysql://root:kdc@X.X.X.X:3306/KDM3ADB" --tables 这样一张证书就到手了。 验证是dba的权限,以为能一把梭得到源码再审计一波 不过这个注入的地方虽然是dba的权限,但是却没有文件上传的权限,所以无法getshell   拿到数据库了,可以再测试一波弱口令 翻了下密码是这样的,很抽象应该是自己写了加密 回到之前login.php源码泄露里面,其中在登录时有对密码进行解密的源码,看着很头疼,想起了学密码学时候那些交换变换的算法 // 密码加密函数 function EncryptStr($strSo ...

    2023-11-09 技术教程 192
  • 某博不经意间的随拍✨ ​​​

    点击围观  ...

    2023-11-09 福利分享 139
  • HTML毛玻璃拟态UI个人主页源码

    毛玻璃拟态UI个人主页html源码开源版,毛玻璃拟态UI个人主页是小枫原创的一款简约风格开源的新UI主页设计 很漂亮,如果用这种风格写一套资源站的前端我感觉不错。 当然你们可以说这个是拟态UI5.0的版本! ...

    2023-11-08 实用工具 206
  • 超级漂亮的 AI 官网源码 AI 网站首页自适应源码

    如今 AI 正处于火热的时代,有一款超级漂亮的 AI 官网首页自适应源码,非常适合用于设计一个吸引人的首页。这个源码具有自适应的特性,可以适应不同的屏幕大小和设备类型。 这款 AI 官网首页源码设计精美,呈现出现代化和专业化的感觉。它的自适应功能使得网站在各种设备上都能够展示出最佳的效果,无论是在电脑、平板还是手机上浏览网页,都能够获得出色的用户体验。 ...

    2023-11-08 实用工具 182
  • 简单好看个人引导页毛玻璃页面 HTML 源码

    毛玻璃个人引导页源码,界面简洁,已测可完美搭建,UI非常不错的,有兴趣的自行去安装体验吧,其它就没什么好介绍的了。 ...

    2023-11-08 实用工具 165
  • 刚刚扒取的乐摄图网站导航源码,免费分享给大家!

    扒取乐摄图网站的导航源码,免费分享给大家,另外扒站工具一起分享给大家,无毒安全放心使用。 1.乐摄图网站的导航源码 ...

    2023-11-08 实用工具 158
  • Linux常用打包、解包,压缩、解压相关命令

    1. 文件、文件包、压缩包 打包是把多个文件做成一个文件包,文件大小是不变的。 压缩会改变文件的大小 2. tar命令 2.1 命令功能 用于文件的打包和压缩。 2.2 命令格式 tar [OPTION...] [FILE]... 2.3 命令选项 选项 说明 -c 创建新包 -r 往包里新增文件 -u 往包里更新文件 -t 列出包里文件 -f 指定包名 -v 详情列出处理的文件 -x 解包 2.4 常用功能 2.4.1 打包 # 创建新包 tar -cvf myfile.tar test1.txt test2.txt test # 往包里新增文件 tar -rvf myfile.tar test3.txt # 往包里更新文件 tar -uvf myfile.tar test1.txt # 列出包里文件 tar -tf myfile.tar 2.4.2 解包 选项 说明 -C 文件解压到指定目录 # 解包 tar -xvf myfile.tar # 解包到指定目录,该目录得存在 tar -xvf myfile.tar -C temp 2.4.3 压缩 Linux系统常见 选项 作用 包名格式 备注 -z gzip方式压缩 包名.tar.gz   -j bzip2方式压缩 包名.tar.bz2 安装bzip2 -J xz方式压缩 包名.tar.xz   # gzip方式压缩 tar -zcvf test1.tar.zip myfile.tar # bzip2方式压缩 tar -jcvf test2.tar.bz2 myfile.tar # xz方式压缩 tar -Jcvf test3.tar.xz myfile.tar # 不需要tar包,直接从文件进行打包压缩 tar -zcvf myfile.tar.zip test* 2.4.4 解压 tar -xvf test1.tar.zip tar -xvf test2.tar.bz2 tar -xvf test3.tar.xz tar -zcvf myfile.tar.zip 3. zip命令 Linux系统不一定自带,得安装 3.1 命令功能 将一个或多个文件压缩成一个zip文件 3.2 命令格式 zip [-r] 文件... 3.3 命令选项 -r 被压缩的内容中含有目录文件,需要使用-r选项 3.4 示例 zip -r test.zip test* 4. unzip命令 Linux系统不一定自带,得安装 4.1 命令功能 解压zip压缩包 4.2 命令格式 unzip [-d] zip压缩包名 4.3 命令选项 -d 指定解压文件存放目录 4.4 示例 unzip test.zip </div> ...

    2023-11-08 技术教程 144
  • 印第安小斑鸠,人教人教不会事教人一次就好

    印第安小斑鸠,人教人教不会事教人一次就好  6p ...

    2023-11-07 福利分享 130
  • 如何在Vim编辑器中剪切、复制和粘贴

    剪切、复制和粘贴文本是文本编辑中最基本的任务之一,我们都知道 Vim 有不同的处理方式。 这意味着,在你掌握它之前,你会害怕它,一旦你掌握了它,它就只是一个兔子洞。 虽然我将详细介绍剪切、复制和粘贴,但这里是本教程的基本摘要,以帮助你开始使用: 按键 描述 yiw 复制当前单词。 yy 复制整行。 diw 剪切当前单词。 dd 剪掉整行。 p 粘贴文本。 别担心,Vim 为你提供的选项比我上面提到的要多得多。 在本教程中,我将引导你完成以下内容: 如何在 Vim 中复制文本 如何在 Vim 中剪切文本 如何在 Vim 中粘贴文本 如何使用可视模式在 Vim 中剪切和复制文本 那么让我们从第一个开始。 如何在 Vim 编辑器中复制文本 虽然我们使用术语“复制”,但 Vim 有一个不同的术语,称为 “扽出yank”,因此从现在开始,我将使用“扽出”而不是“复制”。 正如我之前提到的,你可以使用多种方法在 Vim 中扽出文本,以下是一些有用的方法: 命令 描述 nyy或nY 扽出(复制)当前行和接下来的 n-1行。例如,3yy复制当前行及其下面的两行。 yaw 扽出(复制)光标所在的当前单词。 yy或Y 扽出(复制)整个当前行。 y$ 扽出(复制)从光标到行尾的文本。 y^或y0 扽出(复制)从光标到行首的文本。 要在 Vim 中扽出,请执行以下 3 个简单步骤: 按 Esc键切换到正常模式 移动到要复制的行或单词 按上表中的相关命令,你的文本将被复制 想学习交互式复制行的方式吗? 跳到本教程的最后一部分。 如何在 Vim 编辑器中剪切文本 在 Vim 中,你没有任何删除文本的选项。取而代之的是剪切文本,因此删除和剪切文本与 Vim 中的操作类似。 要在 Vim 中剪切文本,请按 d命令。但你永远不会在没有任何选项的情况下使用d命令。你总是会添加一些东西来做更多操作。 因此,你可以使用以下一些实用方法使用 d命令剪切文本: 命令 描述 dd 剪切整个当前行。 d$ 将文本从光标剪切到行尾。 d^或d0 将文本从光标剪切到行首。 ndd或dN 剪切当前行和接下来的 n-1行。例如,3dd剪切当前行及其下面的两行。 daw 剪切光标所在的当前单词。 假设我想从文件中剪切前 4 行,然后我需要使用 4dd,我是这样做的: 如何在 Vim 编辑器中粘贴文本 在 Vim 中复制或剪切文本后,只需按 p键即可粘贴它。 你可以多次按 p键多次粘贴文本,也可以使用np,其中n是要粘贴文本的次数。 例如,在这里,我粘贴了之前复制了三遍的行: 就是这么简单! 如何通过选择文本来剪切和复制文本 如果你使用过 GUI 文本编辑器,那么你肯定习惯于通过选择文本来复制和剪切文本。 让我们从如何通过在 Vim 中选择文本来复制开始。 通过选择文本复制 要在可视模式下复制文本,请执行以下 3 个简单步骤: 移动到要开始选择的地方 按 Ctrl + v启用可视模式 使用箭头键进行选择 按 y键复制所选文本 例如,在这里,我使用可视模式复制了 4 行: 如果你注意到,当我按下 y键,它就会显示有多少行被扽出(复制)。就我而言,有 4 行被复制。 在 Vim 中选择文本来剪切文本 要在 Vim 中以可视模式剪切文本,你所要做的就是遵循 4 个简单步骤: 移动到要剪切的位置 按 Ctrl + v切换到可视模式 使用箭头键选择要剪切的行 按 d键剪切选定的行 假设我想剪掉 4 行,那么我会这样做: 挺容易。是吧? ...

    2023-11-07 技术教程 143
  • 什么是端口,作用及范围

    在计算机网络中,数据通过网络传输,每个数据包都需要知道如何正确到达目的地。 为了实现这一目标,网络使用IP地址和端口号来定位目标设备上的特定应用程序或服务。 IP地址用于定位设备,而端口号用于定位设备上的特定应用程序或服务。 每个设备都有许多不同的端口,用于处理不同类型的数据流。 例如,Web服务器通常使用端口80来处理HTTP请求,而安全的Web服务器使用端口443来处理HTTPS请求。 电子邮件服务器使用端口25来接收传入的电子邮件,而端口110用于接收传出的电子邮件。 这些端口号是被广泛接受和约定的,以便不同设备和应用程序之间能够正确地通信。 端口的作用 端口的主要作用是将数据包正确地路由到目标应用程序或服务。当数据包到达设备时,操作系统使用目标端口号来确定将数据包传递给哪个应用程序或服务。这样,多个应用程序可以在同一设备上并行运行,而不会互相干扰。 此外,端口还可以用于实现安全性和访问控制。防火墙和路由器可以配置为允许或阻止特定端口上的数据流量,从而保护网络免受潜在的威胁。这是网络安全的一个重要方面。 端口号的范围 如前所述,端口号是一个16位的整数,范围从0到65535。 这个范围被划分为三个主要部分:   熟知端口(Well-Known Ports):端口号范围从0到1023。这些端口号已被互联网指定为特定的应用程序或服务,因此它们具有广泛的公认含义。例如,端口80用于HTTP服务,端口25用于SMTP服务,等等。 注册端口(Registered Ports):端口号范围从1024到49151。这些端口号通常由软件开发者或组织用于特定应用程序或服务。它们没有被广泛接受,但可以在需要时注册。 动态和私有端口(Dynamic and Private Ports):端口号范围从49152到65535。这些端口号通常用于动态分配,例如客户端应用程序用于与服务器通信时可以随机选择一个空闲的端口。 ...

    2023-11-07 值得一看 131
  • 什么是SYN FLOOD洪水攻击,原理是什么?

    同Tear Drop泪滴攻击一样,SYN Flood也是一种拒绝服务攻击,其目标是通过发送大量伪造的TCP连接请求(SYN包)来消耗目标系统的资源,从而使得被攻击方资源耗尽而无法响应合法的连接请求的攻击方式。 SYN FLOOD攻击原理 SYN FLOOD攻击发生在OSI参考模型的传输层,它的攻击原理是利用TCP协议的三次握手过程协议缺陷来实现的。 正常情况下,客户端和服务器建立TCP连接三次握手过程是这样的:   1)建立连接时,客户端发送一个SYN同步报文给服务器端,该报文中包含了本端的初始化序列号,同时设置本段的连接状态为SYN-SENT。 2)服务器端收到SYN同步报文后,给客户端回应SYN+ACK 报文,该报文中包含本段的初始化序列号。同时设置本端连接状态为SYN-RCVD。 3)客户端收到服务器端的SYN+ACK后,向服务器端发送ACK报文进行确认,此包发送完毕,客户端和服务器进入ESTABLISHED状态。 三次握手的完成标志着一个TCP连接的成功建立。 但是,当客户端向服务器端发送SYN包后,对服务器端回应的SYN+ACK包不进行处理,会出现什么结果呢,如下图? 服务器端发送完SYN+ACK 报文后,会建立一个半连接状态的socket套接口,同时会启动一个定时器,若在超时时间内未收到客户端回应的ACK报文,服务器端将会进行超时重传SYN+ACK报文给客户端,默认重传次数为5次。 第1次重传:1秒 第2次重传:2秒 第3次重传:4秒 第4次重传:8秒 第5次重传:16秒 第5次重传后还要等待32秒,若仍收不到 ACK 报文,才会关闭连接。 这样等等待时间=(1+2+4+8+16)+32=63秒,也就是大于1分钟的时间。 这样,若客户端不停的发送SYN报文并对服务端回应的报文不回答,就会导致服务器端不停的创建半连接状态的**socket **而耗尽资源,从而服务器端无法处理正常的客户端的连接请求,造成拒绝服务攻击,即SYN FLOOD洪水攻击。 SYN FLOOD攻击的特点 攻击手段简单:SYN FLOOD攻击是一种常见的DoS攻击手段。 防不胜防:SYN FLOOD是一种难以防范的攻击方式,因为其攻击行为在某些情况下很难被察觉和区分。例如,一个SYN FLOOD攻击可能会伪造合法的IP地址,使得攻击行为看起来像是来自正常的网络流量。这使得防火墙、IDS等安全设备很难对其进行有效的检测和拦截。 攻击效果显著:SYN FLOOD攻击能够快速地使目标系统资源耗尽,导致其无法响应合法的连接请求。这使得攻击者能够成功地实施DoS攻击,使目标网站或服务完全瘫痪。 危害范围广泛:SYN FLOOD攻击不仅能够对主机进行攻击,还能够危害路由器、防火墙等网络系统。事实上,只要目标系统打开TCP服务,SYN FLOOD攻击就能够对其实施攻击。 ...

    2023-11-07 值得一看 137

联系我们

在线咨询:点击这里给我发消息

QQ交流群:KirinBlog

工作日:8:00-23:00,节假日休息

扫码关注