Viper渗透框架

news2024/11/29 18:25:35

文章目录

  • Viper 简介
  • Viper 安装
    • 脚本安装
    • 手动安装
      • 切换到 root 用户执行命令
      • Kali 安装 docker (我已经安装过了,不做演示,命令依次执行即可)
      • 安装 docker-compose
      • 设置安装目录
      • 生成安装目录,并进入安装目录
      • 生成 docker-compose.yml
      • 设置登录密码
      • 写入密码到 docker-compose.yml
      • 启动 Viper
  • Viper 登录
  • Viper 配置
    • 版本更新
      • 删除原有容器
      • 更新 docker 镜像
      • 新建并启动容器
  • 修改密码
    • 临时修改密码
      • 进入 Docker 镜像命令行
      • 执行修改密码命令
    • 持久化修改密码
      • 进入安装目录
      • 设置密码
      • 写入密码到 docker-compose.yml
      • 重新建立容器
  • 关闭/重启
    • 临时关闭 Viper
    • 重新启动 Viper
    • 查看容器日志
    • 进入容器命令行
  • 安装目录
    • db目录
    • log目录
    • loot目录
    • module目录
    • nginxconfig目录
  • Viper基本使用
    • 实时输出
      • 模块结果
    • 平台日志
    • 任务列表
    • 监听载荷
      • Stageless
      • Staged
      • 监听
        • 新增监听
    • 载荷
      • 快速生成
      • 配置生成
    • 监听防火墙
      • 使用场景
    • WebDelivery
    • 文件列表
    • 上传/下载
    • 查看
    • 一句话下载
    • 网络拓扑
    • 自动编排
      • 时间间隔
      • 单一主机最大权限数量
    • 内网代理
      • 路由列表
      • 端口转发
      • 内网代理
    • 凭证列表
    • MSFCONSOLE
      • 常规操作
      • 特殊命令
    • 权限操作
      • 权限信息
        • 查看
        • 进程列表
    • 文件管理
      • 文件浏览
      • 新建文件夹/上传文件/下载文件
      • 执行文件
      • 修改文件
    • 内网路由
    • 端口转发
      • 正向转发
      • 反向转发
    • 传输协议
    • 命令终端
      • 命令操作
    • 删除权限
  • 主机操作
    • 主机信息
    • 开放端口
    • 已知漏洞
    • 修改备注
    • 删除主机
      • 常见问题
  • Viper 运行模块
    • 模块类别

前置参考知识 : Metasploit渗透框架超详细

该文章仅供学习讨论,请勿用于非法用途!!!!!!!!!!

Viper 简介

Viper (炫彩蛇)

是一款图形化内网渗透工具,将内网渗透过程中常用的战术及技术进行模块化及武器化。

集成杀软绕过,内网隧道,文件管理,命令行等基础功能。
当前已集成70+个模块,覆盖初始访问/持久化/权限提升/防御绕过/凭证访问/信息收集/横向移动等大类。

目标是帮助红队工程师提高攻击效率,简化操作,降低技术门槛。支持在浏览器中运行原生 msfconsole ,且支持多人协作。

文档: https://www.yuque.com/vipersec
github: https://github.com/FunnyWolf/Viper

Viper 安装

脚本安装

这里脚本安装过于简单,详细会介绍手动安装

sysctl -w vm.max_map_count=262144

curl -o f8x https://f8x.io/   # wget -O f8x https://f8x.io/

bash f8x -viper

手动安装

准备一台linux系统的VPS或虚拟机,首次使用建议虚拟机安装,推荐使用ubuntu系统

切换到 root 用户执行命令

su root
sysctl -w vm.max_map_count=262144
ulimit -n 65535

Kali 安装 docker (我已经安装过了,不做演示,命令依次执行即可)

参考文章:Docker基础操作

apt-get update

apt-get install -y apt-transport-https ca-certificates

apt-get install dirmngr

curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-
ce/linux/debian/gpg | sudo apt-key add -

echo 'deb https://mirrors.tuna.tsinghua.edu.cn/docker-
ce/linux/debian/ buster stable' | sudo tee
/etc/apt/sources.list.d/docker.list

apt-get update

apt install docker-ce

安装 docker-compose

apt install docker-compose

或者

curl -L
https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` >
/usr/bin/docker-compose

chmod +x /usr/bin/docker-compose

设置安装目录

export VIPER_DIR=/root/VIPER

生成安装目录,并进入安装目录

mkdir -p $VIPER_DIR && cd $VIPER_DIR

生成 docker-compose.yml

tee docker-compose.yml <<-'EOF'
version: "3"
services:
  viper:
   image: registry.cn-shenzhen.aliyuncs.com/toys/viper:latest
   container_name: viper-c
   network_mode: "host"
   restart: always
   volumes:
     - ${PWD}/loot:/root/.msf4/loot
     - ${PWD}/db:/root/viper/Docker/db
     - ${PWD}/module:/root/viper/Docker/module
     - ${PWD}/log:/root/viper/Docker/log
     - ${PWD}/nginxconfig:/root/viper/Docker/nginxconfig
   command: ["VIPER_PASSWORD"]
EOF
外网 VPS 也可以将 registry.cn-shenzhen.aliyuncs.com/toys/viper:latest 替换成 registry.cn-hongkong.aliyuncs.com/toys/viper:latest

设置登录密码

export VIPER_PASSWORD=VIPER@PASS

写入密码到 docker-compose.yml

sed -i "s/VIPER_PASSWORD/$VIPER_PASSWORD/g" docker-compose.yml

启动 Viper

cd $VIPER_DIR

docker-compose up -d

Viper 登录

等待15s系统启动

访问登录服务器: https://yourip:60000
用户名: root
密码: VIPER@PASS
查看密码: cat /root/VIPER/docker-compose.yml
查看端口: cat /root/VIPER/nginxconfig/viper.conf ,默认端口为 60000

*[注意:如果你使用VPS部署Viper,请确认VPS的防火墙开放了60000端口及后续监听需要的端口

Viper 配置

版本更新

删除原有容器

cd /root/VIPER             # 进入viper安装目录
docker-compose down         # 删除现有容器

更新 docker 镜像

docker-compose pull

新建并启动容器

docker-compose up -d

修改密码

临时修改密码

适用于需要在不重启 Viper 的情况下修改密码, Viper 更新后密码不会保留Viper 不允许使用默认密码, VIPER@PASS 替换为自定义密码密码且大于8位

进入 Docker 镜像命令行

docker exec -it viper-c bash

执行修改密码命令

viper -pw VIPER@PW

持久化修改密码

需要重启 Viper
Viper 不允许使用默认密码, VIPER@PASS 替换为自定义密码密码且大于8位

进入安装目录

cd /root/VIPER

设置密码

export VIPER_PASSWORD=VIPER@PASS

写入密码到 docker-compose.yml

sed -i "s/VIPER_PASSWORD/$VIPER_PASSWORD/g" docker-compose.yml

重新建立容器

cd /root/VIPER            
# 进入Viper安装目录
docker-compose down       
# 删除现有容器
docker-compose up -d
# 重启启动容器

关闭/重启

临时关闭 Viper

cd /root/VIPER
docker-compose stop

重新启动 Viper

cd /root/VIPER
docker-compose start

查看容器日志

docker logs viper-c

进入容器命令行

docker exec -it viper-c bash

安装目录

Viper 通过 docker 挂载目录的方式持久化保存数据

db目录

[db.sqlite3]: 是Viper的SQL数据库文件
[dump.rdb] : 是Viper缓存数据库文件

log目录

[access.log] : nginx访问日志
[error.log] : nginx错误日志
[daphne.log] : viperpython websocket运行日志
[uwsgi.log] : viperpython http服务运行日志
[viperpython.log] : vipepython 主服务运行日志
[puma.log] : msf接口服务日志

loot目录

存放用户 下载/上传 的文件

module目录

存放自定义模块

nginxconfig目录

[gencert.sh] :用于生成自定义 ssl 证书

[ssl.crt][ ssl.csr][ ssl.key]**[ ssl.origin.key][ssl] 证书相关文件,用于 [nginx]

[viper.conf][nginx] 子配置文件,用户可通过该配置文件自定义 [nginx] 配置

Viper基本使用

实时输出

模块结果

左侧:显示主机IP/模块/参数/结果等信息

顶部支持 搜索过滤 重置过滤 清空数据 等操作.

平台日志

右侧:列表展示平台运行日志,日志包含关键操作通知,模块运行过程中的日志等信息

顶部输入还支持多用户聊天

任务列表

[任务列表] 标签会提示当前有多少任务正在运行

可以点击任务对应的模块名称查看模块详细信息

结果在实时输出里面查看

面板会显示 开始时间 模块 模块涉及的Sessionid 模块参数
可以使用 删除 终止任务运行

监听载荷

payload 又称为攻击载荷,主要是用来建立目标机与攻击机稳定连接的,可返回shell ,也可以进行程序注入等。

Stageless

payload 分为 staged (分阶段)和 stageless (不分阶段):

Stageless payload: <platform>/[arch]/<single>

Stageless Meterpreter 是一个二进制文件,包含 Meterpreter 的所有必需部分以及所有必需的扩展全部捆绑在 一起,将完整的 payload 都编译在木马中,体积庞大,可直接独立地植入目标系统进行执行

Staged

Staged payload: <platform>/[arch]/<stage>/<stager>

Staged Meterpreter 负责建立目标用户与攻击者之间的网络连接,将执行传递到另一个阶段,MSF提供了传输器和传输体配对分阶段植入的技术,由渗透攻击模块首先植入代码,短小精悍且可靠的传输器载荷,然后在运行传输器载荷时进一步下载传输体载荷并执行,比如加载meterpreter、VNC桌面控制等复杂的大型攻击载荷。

[stageless 和 staged 就像web入侵里面提到的大马和小马一样,一个功能齐全,一个只是构造一个连接或命令执行,还需通过其他工具和脚本进行管理]

PayloadStagedStageless
Reverse TCPwindows/meterpreter/reverse_tcpwindows/meterpreter_reverse_tcp
Reverse HTTPSwindows/meterpreter/reverse_httpswindows/meterpreter_reverse_https
Bind TCPwindows/meterpreter/bind_tcpwindows/meterpreter_bind_tcp
Reverse TCP IPv6windows/meterpreter/reverse_ipv6_tcpwindows/meterpreter_reverse_ipv6_tcp

监听

在MSF原生的 hander/payload 基础上,Viper增加了如下两项功能

1、增加虚拟监听的概念,在内网渗透的某些场景中(如注入shellcode,spawn进程,AB网正向hander),我们只需要快捷的调用已有的监听配置,不需要实际建立网络监听或网络连接

2、虚拟监听和实际监听可相互转化

新增监听

虚拟监听 是指将输入的监听配置选项存储在缓存中,但不在服务器中建立实际运行的监听.后续在运行模块/传输协议时可以快速选择该监听配置.

虚拟监听 在系统重启后仍然存在,可用于鱼叉钓鱼,持久化等场景

真实的监听使用绿色图标表示,虚拟监听使用灰色图标表示

虚拟监听与实际监听可通过 虚拟化 实例化 相互转换

载荷

快速生成

可以点击监听中的 生成载荷 按钮快速生成载荷,Windows类型载荷为源码编译版本,linux类型载荷为elf类型.

配置生成

选择下方 生成载荷 按钮可以手动输入配置生成载荷.

选择 自动监听 选项,在生成载荷完成后自动添加载荷所对应的监听

监听防火墙

每当客户端连接 viper 的监听时, viper 会根据客户端的网络IP地址来判断该IP是否允许连接监听。

允许时则正常传输载荷到客户端,不允许时直接断开网络连接。

使用场景

  1. 当使用鱼叉钓鱼时,目标的地理位置为一个固定区域(例如一个省),监听防火墙可以屏蔽其他国外或其他省的IP连接监听
  2. 红队模拟时,如果可以根据需要屏蔽沙箱及网络测绘服务器连接监听
  3. 如果IP地址不被允许连接监听,则客户端(通常为沙箱或者蓝队人员)无法获取stager,就无法判断C2服务器类型.

WebDelivery

用于一句话加载payload.常用于可以执行命令,但是不方便上传文件的场景.WebDelivery 功能与 MSF 的exploit/multi/script/web_delivery 功能相同。用于一句话加载 payload 。常用于可以执行命令,但是不方便上传文件的场景。

文件列表

上传/下载

支持拖拽文件上传及点击上传,点击 下载 自动使用浏览器下载

查看

支持直接预览文本文件及图片

一句话下载

当文件上传到服务器后, Viper 默认提供网络下载功能,界面中会提示各种版本的一句话下载.

网络拓扑

汇总端口扫描,历史Session上线信息,当前Session信息及当前路由信息,分析处理后生成网络拓扑图.

自动编排

每当有新的Session(权限)上线时,会自动按照顺序执行 自动编排 中已经配置好的模块.

时间间隔

可以通过该参数设置每个模块执行的间隔时间,避免短时间内执行多个模块导致报警或不稳定

单一主机最大权限数量

如果在 自动编排 中配置了会生成新的权限的模块(比如 上传并执行可执行文件 ),则可能会出现死循环:新的权限->自动编排模块->自动编排模块导致新的权限->自动编排模块>…

在配置了该参数之后,如果系统判断单一主机(同一个内网IP)对应的权限数量大于配置数量,则自动跳过自动编排模块.

内网代理

Viper 的内网代理功能基于 MSF 的 socks4a/socks5 代理模块集成而来。 Viper 将内网路由,端口转发,内网代理集中控制,方便使用。

内网代理 路由路径 中可以查看所有主机的路由信息

如果不存在对应路由,则用网络直连表示

路由列表

查看所有 Session 中的路由

端口转发

查看所有Session的端口转发配置

内网代理

内网代理可以添加 socks4a、socks5 两种代理,socks5代理不支持udp

代理使用的路由基于 内网路由 ,使用代理前确认配置了正确的路由.

凭证列表

通过模块获取到的密码信息都会存储在此处

也可以手动添加

MSFCONSOLE

Metasploit console 控制台

常规操作

原生复制msfconsole操作
支持tab智能提示
支持Ctrl+C终止/Ctrl-Z切换到后台等操作
支持选择文本自动复制到剪切板功能

特殊命令

如果出现命令行假死等问题,可以通过输入viper进行重置操作

权限操作

权限信息

查看

点击生成的Session,选择权限信息

进程列表

进程列表显示主机所有进程的信息和Session进程的信息

文件管理

通过点击权限,选择 文件管理 进入主界面

文件浏览

文件管理功能类似Windows的资源管理器

上图功能依次为 打开根目录 打开默认目录 打开上级目录 目录栏 前往 刷新 切换默认目录 新建文件夹 上传文件

文件夹及磁盘支持双击进入,目录栏支持输入指定目录后回车进入目录
支持直接查看不大于100kb的文件
支持切换工作目录/刷新当前目录

新建文件夹/上传文件/下载文件

点击上方新建文件夹按钮可在当前目录新建文件夹
点击上传按钮可打开服务端文件管理器,可以将服务器的文件上传到当前目录
点击 下载 链接,后台自动建立下载文件任务,下载的文件会存储在 文件管理 中

执行文件

支持带参数执行可执行文件(无回显)

修改文件

可直接修改主机的文本类文件

内网路由

自动模式 中,Session会根据所在主机网卡IP/掩码/网关自动添加路由
如果内网某个网卡有多个子网,还可以通过手工输入的方式添加
内网路由页面只显示当前Session添加的路由,如果需要查看所有路由,可以通过内网代理 路由列表 查看所有路由

Viper内网路由即是Metasploit的route功能,具体原理可以参考如下链接: https://www.freebuf.com/articles/network/125278.html

端口转发

权限操作 端口转发

正向转发

正向转发是将VPS的网络端口转发到Session所在内网的某IP某端口.常用于连接内网的某服务,如RDP,SSH等.

如将Session所在主机的127.0.0.1:3389映射到VPS的33889端口,可以采用如下设置

远程IP(目标) 远程端口(目标) 也可以选择内网其他主机

反向转发

反向转发是将内网的某IP某端口转发到VPS的网络端口.

反向转发通常用于handler监听的回连.

假设你已经获取到内网192.168.3.13的权限并建立了Session,你通过一些途径了解到192.168.3.0/24网段的其他机器无法直接连接互联网,也就是无法直接连接你的VPS.

此时你可以建立如下反向转发.

所有内网机器连接192.168.3.13:2000就相当于连接VPS的500端口

你可以在500端口建立监听并建立一个192.168.3.13:2000的虚拟监听.

此时可以使用虚拟监听192.168.3.13:2000作为载荷攻击内网其他机器.即使其无法直接连接VPS

Viper的端口转发功能基于metasploit-framwork的portfwd

传输协议

权限操作 传输协议

https://www.yuque.com/vipersec/help/xvarma

命令终端

权限操作 命令终端

命令操作

命令终端中可以直接输入命令,还可以通过下方快捷键快速输入.

命令终端中默认使用meterpreter增强命令行,如果希望执行系统命令,可以使用shell + 命令的方式

删除权限

权限操作 删除权限

可以使用删除权限功能关闭已获得的session
删除权限后无法撤销!

主机操作

主机信息

  1. 读取缓存/重新请求

每次打开窗口时会自动读取数据库中缓存的主机信息

点击 重新请求 会在后台执行更新主机信息模块,模块执行完成后自动将结果存储到数据库中.

  1. 主机信息
  2. 网卡信息
  3. 本地监听
  4. 外网连接 判断主机有哪些联网应用
  5. 内网连接 通常用于判断内网其他主机的IP地址及服务
  6. ARP信息 用于查找内网网段
  7. 重要进程 用于判断主机的杀软及远控软件(teamviewer/anydesk)运行情况
  8. 所有连接
  9. 所有进程

开放端口

数据来源,展示的端口信息主要来源于三个模块:

端口扫描与服务识别
端口扫描
内网ARP扫描

可以在 运行模块 选择过滤 信息收集 类模块中找到这三个模块.

已知漏洞

当前功能适配 MS17-010扫描 模块

已知功能当前适配的模块很少,属于框架型功能

修改备注

主机操作 修改备注 或直接点击主机图标标签修改

删除主机

主机操作 删除主机 或在 主机管理 中批量删除

常见问题

1、为什么无法删除主机?

如果当前主机有正在活动的Session,viper会自动新建主机信息

2、为什么删除主机后Session仍然存在?

删除主机只会删除数据库中存储的主机相关信息,viper并不会关闭对应session

Viper 运行模块

模块类别

资源部署
初始访问
执行
持久化
权限提升
防御绕过
凭证访问
信息收集
数据采集
全网扫描
被动扫描

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152606.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++常用算法】STL基础语法学习 | 拷贝算法替换算法

目录 ●copy ●replace ●replace_if ●swap ●copy 1.功能描述&#xff1a; 将容器内指定范围的元素拷贝到另一容器中 2.查看copy定义下底层代码的函数原型&#xff1a; 3.向deque容器中插入10~50五个数&#xff0c;将这五个数拷贝到另一个指定容器中并输出。 #include&…

【生产问题】前端接口请求报blocked:mixed-content

事故现象 客户端反馈系统无法使用。打开页面很多内容无法显示。 f12 显示很多请求都失败了。 定位问题 客户咨询 客户反馈昨天 在nginx 上面配置了https证书。导致了http 请求无法访问。 客户已经在nginx上面配置了https。即 网页端的请求会重定向到https请求上面。那为啥…

无需离开 Visual Studio 即可编写 Markdown

当您想要格式化代码但又不想牺牲易读性时&#xff0c;Markdown 是一个很好的解决方案。GitHub 将其用于自述文件&#xff0c;我们将其用作 Visual Studio 文档的标准。之前收到了不少来自开发者的反馈&#xff0c;大家希望在 Visual Studio 中使用 Markdown 编辑器。在最近的 V…

87、【栈与队列】leetcode ——347. 前 K 个高频元素:优先队列(小根堆)+Hash表(C++版本)

题目描述 原题链接&#xff1a;347. 前 K 个高频元素 一、优先队列&#xff08;小根堆&#xff09;Hash表 使用Hash表存nums中各元素出现次数&#xff0c;维护一个优先级队列&#xff0c;在里面存k个数&#xff0c;采用小根堆方式&#xff0c;从小到大进行排列。当存入的数多…

Vue3——第五章(响应式 API:isRef、unref、toRef、toRefs等工具函数)

一、isRef() 检查某个值是否为 ref。请注意&#xff0c;返回值是一个类型判定 (type predicate)&#xff0c;这意味着 isRef 可以被用作类型守卫 二、unref() 如果参数是 ref&#xff0c;则返回内部值&#xff0c;否则返回参数本身。这是 val isRef(val) ? val.value : v…

【CPP】STL简介

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《吃透西嘎嘎》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;什么是 S…

李宏毅ML-机器学习基本概念简介

机器学习基本概念简介 Machine Learning 约等于 Looking for a function. Different types of functions: Regression: The function outputs a scalar. Classification: Given options(classes), the function outputs the correct one. How to find a function? > 预测本…

为什么学完了 C 语言觉得自己什么都干不了?

其他方向不了解哈&#xff0c;我2013年大一开始自学C语言&#xff0c;然后就开始做嵌入式&#xff0c;大学四年&#xff0c;到现在毕业又六年&#xff0c;C语言已经陪我十年了&#xff0c;可以说是一直坚持且养家糊口的工具。 所以&#xff0c;别的也许不行&#xff0c;但是嵌…

使用.htaccess设置图片防盗链的详细方法

对于虚拟主机用户来说&#xff0c;最方便的莫过于利用.htaccess设置图片防盗链了。上网搜了一下&#xff0c;.htaccess规则写法很多&#xff0c;但是大部分的区别在于最后一行&#xff0c;下面我们先看看正确的.htaccess防盗链写法&#xff0c;稍后我再详细解释一下最后一行的重…

JAVA实现代码热更新

JAVA实现代码热更新引言类加载器实现热更新思路多种多样的加载来源SPI服务发现机制完整代码引言 本文将带领大家利用Java的类加载器加SPI服务发现机制实现一个简易的代码热更新工具。 类加载相关知识可以参考: 深入理解JVM虚拟机第三版, 深入理解JVM虚拟机(第二版)—国外的,自…

从零开始搭建一个vue demo工程

查询了不少文章&#xff0c;有知乎、CSDN、简书、思否等&#xff0c;发现如下操作性比较好&#xff0c;特此记录 目录 使用vue-cli创建 使用vite创建 Vue2和Vue3的代表作 参考文章 使用vue-cli创建 Vue3-使用vue/cli搭建项目 - 个人文章 - SegmentFault 思否 此处使用了v…

一文看懂基站无源交调

众所周知&#xff0c;有源器件会在系统中产生非线性效应。虽然已开发出多种技术来改善此类器件在设计和运行阶段的性能&#xff0c;但容易忽视的是&#xff0c;无源器件也可能引入非线性效应&#xff1b;虽然有时相对较小&#xff0c;但若不加以校正&#xff0c;这些非线性效应…

将vue项目打包成电脑端应用.exe

目录 第一步:下载模板electron-quick-start 第二步&#xff1a;进入到下载好的模板文件当中&#xff08;electron-quick-start&#xff09; 第三步&#xff1a;打包自己的项目&#xff08;npm run build&#xff09; 第四步&#xff1a;删掉官方demo下的index.html文件 …

Framework入门

一入门简介Android系统建构分为四层由上到下依次是应用层&#xff0c;应用框架层&#xff0c;依赖库层&#xff0c;内核层&#xff0c;framework处于第二层&#xff0c;它为应用层的开发者提供基本功能&#xff0c;帮助开发快速构建应用程序。FrameWork框架采用c/s架构&#xf…

Java之反射爆破操作

一些方法 首先说一下-getField/Method什么的这种不带Declared只能获取到对应public的属性/方法 只有带Declared可以获取到非public的属性/方法 再看不带s和带s区别 不带s只获取对应的构造器/方法 比如说构造器 getDeclaredConstructor(int.class,String class) 就会获取不管什么…

【数据分析】【Pandas】(一)如何制作频率分布直方图

文章目录概述1. 直方图2. 密度图概述 计算一组数据的分布有助于我们更好的了解数据构成&#xff0c;我们可以通过直方图或密度图&#xff0c;将离散的数据通过连续的方式展现出来。 数据分布&#xff08;频数分布&#xff09;&#xff1a;在各组按顺序排列的基础上&#xff0c…

小伍说,商业发展均是顺势而为,【字节跳动】之所以成功是因为顺应趋势,成功是必然结果!

昨天看完2021年 刘润【进化的力量】年终演讲&#xff0c;让我深刻感受到两点&#xff1a; 1、所有商业的变化&#xff0c;都是顺势而为&#xff01; 2、所有理所当然的现在&#xff0c;都是曾经不可思议的未来&#xff0c;所有现在不可思议的未来&#xff0c;可能都是明天理所…

JavaSE笔记——函数式编程(高级集合类和收集器)

文章目录前言一、方法引用二、元素顺序三、使用收集器1.转换成其他集合2.转换成值3.数据分块4.数据分组5.字符串6.组合收集器总结前言 前面介绍了集合类的部分变化&#xff0c;事实上&#xff0c;Java 8 对集合类的改进不止这些。现在是时候介绍一些高级主题了&#xff0c;包括…

LInkedList的模拟实现

在之前的文章笔者介绍了链表的实现&#xff1a;无头单向非循环链表的实现&#xff01;感兴趣的各位老铁可以点进来看看&#xff1a;https://blog.csdn.net/weixin_64308540/article/details/128397961?spm1001.2014.3001.5502对于此篇博客&#xff0c;在一写出来&#xff0c;便…

java学习day72(乐友商城)微信支付实现

今日目标&#xff1a; 会调用订单系统接口 实现订单结算功能 实现微信支付功能 1.订单系统接口 我们不做开发&#xff0c;只讲解 1.1.导入订单服务 把课前资料提供的leyou-order复制到D:\heima\code\leyou目录。 然后在工程内导入&#xff1a; 然后导入module&#xff1a…