BGP 泄露
大家读完觉得有帮助记得关注和点赞!!!
目录
1. BGP 是什么?
2. 什么是 BGP 泄露?
3. 今天发生了什么?
4. 正常和被劫持状态下的路由示意图
5. 受影响区域
6. 责任在谁?
7. 有办法避免这种问题吗?
1. BGP 是什么?
互联网是由路由(routes)组成的。例如,对于我们的 DNS 解析服务器 1.1.1.1, 我们会告诉全世界:1.1.1.0 ~ 1.1.1.255
的所有 IP 地址都能够通过 Cloudflare 的 PoP 点直接访问。
没有与我们的路由器直接相连 也没关系,你仍然能收到来自中转供应商(transit providers)的路由,后者直接或间接 地与 Cloudflare 及互联网的其他部分相连,因此能够将数据包正确地发送到我们的 DNS 解 析服务器。
这就是正常情况下互联网的运行方式。
世界上有几个权威机构(Regional Internet Registries, or RIRs,地区性互联网 注册机构)负责 IP 地址的分配,以避免 IP 地址有冲突。这些机构包括
- IANA
- RIPE
- ARIN
- LACNIC
- APNIC
- AFRINIC
2. 什么是 BGP 泄露?
CC BY 2.0 image by elhombredenegro
BGP 泄露(BGP leak)的广义定义为:
某个路由器向网络通告它拥有某段 IP 地址空间,但实际上拥有该地址空间的另有其人。
中转供应商收到 Cloudflare 通告的 1.1.1.0/24
后,可以继续转发给互联网的其他部分 ,这样的行为是合法的。这些中转供应商也会用 RIR 信息来验证只有 Cloudflare 能向它 们通告这条路由。
但路由通告的合法性验证可能会比较耗时,尤其是考虑到互联网目前的路由条目 (records)规模有 700K+
。
本质上来说,路由泄露是局部性的(route leaks are localized)。你的连接越局部( more locally connected),接受泄露的路由的风险就越低。
路由的特点:
- 前缀越精确(掩码越长),优先级越高(10.0.0.1/32 = 1 IP vs 10.0.0.0/24 = 256 IPs)
- 前缀相同的情况下,metrics 更好(路径更短)的优先级越高
BGP 泄露通常都是配置错误导致的,例如某个路由器突然对外通告了:
- 它学到的路由(a router suddenly announces the IPs it learned)
- 它内部使用的某条用于流量工程(traffic engineering)的子路由(smaller prefixes)
但有时也可能是恶意行为:
- BGP 泄露之后流量会经过通告者的路由器,这样就可以对流经的数据进行分析。
- 或者,还可以对经过的流量进行非法重放(reply illegitimately),这是以前发生过的。
3. 今天发生了什么?
Cloudflare 维护了许多 BGP collector,用于从全世界的路由器收集 BGP 信息。
在今天大约 11:05:00 UTC ~ 12:55:00 UTC
,我们看到了下面这些通告:
BGP4MP|04/24/18 11:05:42|A|205.251.199.0/24|10297
BGP4MP|04/24/18 11:05:42|A|205.251.197.0/24|10297
BGP4MP|04/24/18 11:05:42|A|205.251.195.0/24|10297
BGP4MP|04/24/18 11:05:42|A|205.251.193.0/24|10297
BGP4MP|04/24/18 11:05:42|A|205.251.192.0/24|10297
...
BGP4MP|04/24/18 11:05:54|A|205.251.197.0/24|4826,6939,10297
这些 /24
的路由都是下面这些 /23
路由通告的拆分(more specifics announcements):
205.251.192.0/23
205.251.194.0/23
205.251.196.0/23
205.251.198.0/23
这些 /23
IP 空间属于 Amazon(AS16509),但从自治系统编号(ASN)可以查到, 上面的通告来自 eNet Inc(AS10297),后者通告给了它的 BGP 邻居,并转发给了 Hurricane Electric (AS6939)。
这些 IP 是 Route53 Amazon DNS 服务器的地址空间。 当请求 Amazon 的服务时,这些服务器就会响应。
在发生路由泄露的两个小时期间,这些 IP 地址只响应对 myetherwallet.com
的查询请求, 正如大家在 SERVFAIL 看到的。
Route53 处理 DNS 请求时都会去查询权威服务器,而此时由于 BGP 泄露,权威服务器已 经被接管(劫持)了。如果一个路由器接受了这些路由,那依赖这个路由器的 DNS 服务 器都会受到污染(poisoned),这其中就包括 Cloudflare DNS resolver 1.1.1.1。我们在 Chicago, Sydney, Melbourne, Perth, Brisbane, Cebu, Bangkok, Auckland, Muscat, Djibouti and Manilla 都受到了影响。而在其他地方,1.1.1.1 工作是正常的。
例如,正常情况下,下面的查询会返回正确的 Amazon IP 地址:
$ dig +short myetherwallet.com @205.251.195.239
54.192.146.xx
但在被劫持期间,这个查询返回的是某个俄罗斯供应商(AS48693 and AS41995)的 IP。需 要注意的是,不管你有没有接受被劫持的路由,你都是这次攻击的受害者,因为你用到的 DNS 服务器被污染了。
如果你使用的是 HTTPS,那假网站将显示一个来自未知机构的 TLS 证书(证书中列出 的 domain 是正确的,但证书是自签名的)。但只有你点击“接受风险并继续”之后,这种攻 击才会真正起作用。从此时起,你发送的所有内容都是加密的,但攻击者有解密的秘钥。
如果你已经登录了,那你的浏览器会发送 Cookie 中的登录信息。否则,如果你在登录页面 输入账号和密码,那它们将会被发送给攻击者。
攻击者拿到登录信息后就可以合法地登录网站,转移和盗取以太币。
4. 正常和被劫持状态下的路由示意图
正常情况:
BGP 路由泄露后:
5. 受影响区域
如前文所述,AS10279 通告了这条路由。但只有部分区域(region)收到了影响。出于成本 原因,Hurricane Electric 公司在澳大利亚建设了有很多接入点。芝 加哥受到了影响,因为 AS10279 有一条物理接入点,导致了 direct peering。
下图显示了受影响和未受影响区域的收包情况(Y 轴作了归一化)。中间的丢包是因为权威 服务器不再响应我们的请求(它只响应对自己网站的请求,所有对 Amazon domain 的请求 都被无视了)。
eNet 使用的其他中转节点(CenturyLink, Cogent and NTT)似乎并未受到这条路由的影响 ,原因可能是他们设置了路由过滤,并且/或者将 Amazon 作为他们的 customer( and/or Amazon as a customer)。eNet 提供 IP 服务,因此他们的某个 customer 应该已 经通告了这条路由。
6. 责任在谁?
这次故障涉及到多方,很难说责任在谁。这其中包括:
- ISP 通告了一个它并未拥有(own)的子网(subnet)
- 中转供应商没有检查合法性就继续传递(relay)这个通告
- 那些接受了这条路由的 ISP
- DNS 解析器和 DNS 权威缺乏应有的保护
- 部署在俄罗斯供应商上面的钓鱼网站
- 以太坊网站并没有强制要求合法 TLS 证书
- 虽然浏览器已经提示 TLS 非法,但用户还是点击了“接受风险并继续”
和区块链(blockchain)类似,网络的每次变动通常都是可见并被记录的(visible and archived)。RIPE 维护了用于此目的的数据库。
7. 有办法避免这种问题吗?
这个问题很难回答。业内已经有保护 BGP 安全的提案:向 RIR 数据库添加一些额外 的字段,生成一个允许源列表(a list of allowed sources):
$ whois -h whois.radb.net ' -M 205.251.192.0/21' | egrep '^route:|^origin:|source:' | paste - - - | sort
route: 205.251.192.0/23 origin: AS16509 source: RADB
route: 205.251.192.0/23 origin: AS16509 source: REACH
对于一条路由路径(the path of a route),应该以 RIR 作为信任源设置 RPKI/ROA 记录( Setting up RPKI/ROA records with the RIR as a source of truth),虽然 不是所有人都会去添加或验证这些记录。IP 和 BGP 都是几十年前发明的东西,在完整 性(integrity )和贴近真实世界方面(authenticity,没考虑到路由数量会这么多)的考虑 是不能与今天同日而语的。
但在网络层之上(on the upper levels of the network stack),有一些工作可以做:
- DNS 方面,可以使用 DNSSEC对记录进行签名。 假的 DNS 服务器返回的 IP 是没有签名的,因为它们没有私钥。如果你使用的 Cloudflare DNS,在面板上点击几下就设置好了。
- 对于 HTTPS,浏览器会检查网站提供的 TLS 证书。如果启用了 HSTS, 浏览器会强制要求合法证书。为一个 domain 生成一个合法 TLS 证书的唯一方式是:污染 证书权威的某个 non-DNSSEC DNS 解析器的缓存(poison the cache of a non-DNSSEC DNS resolver of the Certificate Authority)。
- DANE 提供了一种使用 DNS 将某个证书绑定(pinning)到某个 domain 的功能。
- DNS over HTTPS 也能验证是否在与正确的解析器通信,在发生路由泄露时能区分出响应是来自 DNS 权威 还是 DNS 解析器。
相关文章:
BGP 泄露
大家读完觉得有帮助记得关注和点赞!!! 目录 1. BGP 是什么? 2. 什么是 BGP 泄露? 3. 今天发生了什么? 4. 正常和被劫持状态下的路由示意图 5. 受影响区域 6. 责任在谁? 7. 有办法避免这…...
IntelliJ IDEA和MAVEN基本操作:项目和缓存存储到非C盘
为了将 IntelliJ IDEA 的所有项目和缓存存储到 C 盘以外的地方,以下是你需要调整的设置和步骤: 1. 更改项目默认存储位置 打开 IntelliJ IDEA。点击顶部菜单的 File > Settings (Windows)或 IntelliJ IDEA > Preferences &…...
Leetcode 3418. Maximum Amount of Money Robot Can Earn
Leetcode 3418. Maximum Amount of Money Robot Can Earn 1. 解题思路2. 代码实现 题目链接:3418. Maximum Amount of Money Robot Can Earn 1. 解题思路 这一题我的思路比较暴力,就是一个动态规划,本质上就是全量遍历,然后找到…...
occ的开发框架
occ的开发框架 1.Introduction This manual explains how to use the Open CASCADE Application Framework (OCAF). It provides basic documentation on using OCAF. 2.Purpose of OCAF OCAF (the Open CASCADE Application Framework) is an easy-to-use platform for ra…...
SYS_OP_MAP_NONNULL NULL的等值比较
无意在数据库中发现了这个操作SYS_OP_MAP_NONNULL。 SYS_OP_MAP_NONNULL应该不是数据库中的对象,因为在DBA_OBJECTS中根本找不到它,而在STANDARD和DBMS_STANDARD包中也找不到函数说明。 SQL> SELECT * 2 FROM DBA_OBJECTS 3 WHERE OBJECT_NAME…...
acwing_3196_I‘m stuck
acwing_3196_I’m stuck // // Created by HUAWEI on 2024/11/17. // #include<iostream> #include<cstring> #include<algorithm>using namespace std;const int N 50 5; char g[N][N];// 地图 bool str1[N][N], str2[N][N]; // 判断1,判断2 …...
C++实现设计模式---状态模式 (State)
状态模式 (State) 状态模式 是一种行为型设计模式,它允许对象在运行时根据内部状态的改变来动态改变其行为。通过将状态相关的行为封装到独立的类中,状态模式使得状态的切换更加清晰和灵活。 意图 将对象的行为和状态分离,随着状态的改变动…...
【1】Word:邀请函
目录 题目 文字解析 流程 题目 文字解析 考生文件夹☞Word.docx☞一定要用ms打开,wps打开作答无效☞作答完毕,F12或者手动另存为(考生文件夹:路径文件名) 注意:一定要检查,很有可能你前面步…...
作业(一)
1、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容,不存在则创建一个文件将创建时间写入。 # vim a.sh#!/bin/bash#先对文件/tmp/size.log 是否存在进行判断 if [ -f /tmp/size.log ]; #如果存在,则用cat命令显示文件内容thencat /tmp/…...
[SAP ABAP] APPEND INITIAL LINE 追加空行
语法格式 APPEND INITIAL LINE TO itab.示例1 SFLIGHT(航班) 输出结果: 示例2 我们可以使用下面的语法进行内表分配指针,追加空行并赋值的操作 APPEND INITIAL LINE TO lt_tab ASSIGNING FIELD-SYMBOL(<lfs_val>). REPORT z437_test_2025.* 自…...
Meilisearch ASP.Net Core API 功能demo
安装 MeiliSearch 0.15.5 0.15.5demo code using Meilisearch; using System.Data; using System.Text.Json; using System.Text.Json.Serialization;namespace MeiliSearchAPI {public class MeilisearchHelper{public MeilisearchHelper(){DefaultClient…...
口碑很好的国产LDO芯片,有哪些?
在几乎任何一个电路设计中,都可能会使用LDO(低压差线性稳压器)这个器件。 虽然LDO不是什么高性能的IC,但LDO芯片市场竞争异常激烈。最近几年,诞生了越来越多的精品国产LDO,让人看得眼花缭乱。 业内人士曾经…...
深入浅出C#线程池ThreadPool:提升程序性能的利器
深入浅出C#线程池ThreadPool:提升程序性能的利器 在C#编程中,线程是并发编程的基石,它使我们能够同时执行多个任务,提升程序的响应速度和效率。然而,直接创建和管理线程会带来一定的开销,例如线程创建和销…...
git问题
拉取项目代码后,出现 1、找回未commit的代码 2、记录不全,只是显示部分代码记录...
Code-Server 项目介绍与部署指南
搜索关注,分享更多有趣的知识。 在这里插入图片描述 1. 概述 GitHub: https://github.com/coder/code-server 在日常学习和工作中,Visual Studio Code(VSCode)已成为许多开发者的首选代码编辑器。然而,其…...
NAT技术
NAT技术 1. NAT原理 NAT(Network Address Translation,网络地址转换)是用于在本地网络中使用私有地址,在连接互联网时转而使用全局 IP 地址的技术。NAT实际上是为解决IPv4地址短缺而开发的技术。路由器构建了子网,将…...
pytest 常用插件
pytest 提供了许多功能强大的插件来增强测试体验和执行能力。以下是一些常用的 pytest 插件介绍,并结合 pytest.main() 进行使用的示例。 1. pytest-xdist pytest-xdist 插件用于并行化测试的执行,可以将测试分配到多个 CPU 核心并行运行,从…...
Avalonia 入门笔记(零):概述
Avalonia 是一个基于 .NET 和 Skia 的开源、跨平台 UI 框架,支持 Windows、Linux、macOS、iOS、Android 和 WebAssembly。Skia 是一个基于 C 的开源 2D 渲染引擎,Avalonia 通过 Skia 自绘 UI 控件,保证在全平台具有一致的观感 基于 .NET 的跨…...
19_TypeScript 声明文件 --[深入浅出 TypeScript 测试]
TypeScript 声明文件(.d.ts 文件)用于描述 JavaScript 库或模块的类型信息,使得 TypeScript 编译器能够在使用这些库时提供类型检查和智能感知。声明文件并不包含任何实现代码,只定义了接口、类、函数等的类型签名。这对于确保类型…...
如何当前正在运行的 Elasticsearch 集群信息
要查看当前正在运行的 Elasticsearch 集群信息,可以通过以下几种方法: 1. 使用 _cluster/health API _cluster/health API 返回集群的健康状态、节点数量、分片状态等信息。可以用 curl 命令直接访问: curl -X GET "http://localhost…...
【ArcGIS微课1000例】0138:ArcGIS栅格数据每个像元值转为Excel文本进行统计分析、做图表
本文讲述在ArcGIS中,以globeland30数据为例,将栅格数据每个像元值转为Excel文本,便于在Excel中进行统计分析。 文章目录 一、加载globeland30数据二、栅格转点三、像元值提取至点四、Excel打开一、加载globeland30数据 打开配套实验数据包中的0138.rar中的tif格式栅格土地覆…...
【hadoop学习遇见的小问题】centos常见配置 添加组用户权限 修改主机名等
1、指定静态ip vi /etc/sysconfig/network-scripts/ifcfg-eth0修改BOOTPROTO为static BOOTPROTOstatic IPADDR192.168.80.145 NETMASK255.255.255.0 GATEWAY192.168.80.2IPADDR、NETMASK用ifconfig命令即可查看 GATEWAY如何查看(编辑—虚拟网络编辑器—上面选择NA…...
16_Redis Lua脚本
Redis Lua脚本是Redis提供的一种强大的扩展机制。 1.Redis Lua脚本介绍 1.1 基本概念 Redis Lua脚本允许开发者将一段Lua语言编写的代码发送给Redis服务器执行。这项功能自Redis 2.6版本引入以来,为用户提供了强大的灵活性和扩展能力,使得可以在Redis内部直接处理复杂的业…...
Appium版本升级,需要注意哪些点:使用UiAutomator2Options传递capabilities
mac上安装的是较新的Appium版本,在跑之前写的Android UI 自动化代码时报错:AttributeError: dict object has no attribute to_capabilities。 查了一下资料,这是因为较新的 Selenium 和 Appium 版本要求使用 Options 类来定义能力ÿ…...
MySQL的增删改查(基础)-下篇
修改 真正在改硬盘了,这样的修改是“持久有效”。一定要确保,update的修改是改对了,改出问题来就麻烦。指定update的时候,如果当前不指定任何条件,就会针对所有的行都能生效! (把整个表都给改了)。 案例 --…...
Mysql--基础篇--事务(ACID特征及实现原理,事务管理模式,隔离级别,并发问题,锁机制,行级锁,表级锁,意向锁,共享锁,排他锁,死锁,MVCC)
在MySQL中,事务(Transaction)是一组SQL语句的集合,这些语句一起被视为一个单一的工作单元。事务具有ACID特性,确保数据的一致性和完整性。通过事务,可以保证多个操作要么全部成功执行,要么全部不…...
Android系统定制APP开发_如何对应用进行系统签名
前言 当项目开发需要使用系统级别权限或frame层某些api时,普通应用是无法使用的,需要在AndroidManifest中配置sharedUserId: AndroidManifest.xml中的android:sharedUserId“android.uid.system”,代表的意思是和系统相同的uid&a…...
Vue篇-06
1、路由简介 vue-rooter:是vue的一个插件库,专门用来实现SPA应用 1.1、对SPA应用的理解 1、单页 Web 应用(single page web application,SPA)。 2、整个应用只有一个完整的页面 index.html。 3、点击页面中的导航链…...
学习threejs,导入wrl格式的模型
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.VRMLLoader wrl模型加…...
winform第三方界面开源库AntdUI的使用教程保姆级环境设置篇
1. AntdUI 1.1. 导入项目 1.1.1. 首先新建一个空白的基于.net的Winfrom项目1.1.2. 复制AntdUI中src目录到我们的解决方案下面1.1.3. 解决方案下添加现有项目1.1.4. 添加项目引用 1.2. 编写代码 1.2.1. 改写Form1类,让其继承自public partial class Form1 : AntdUI.W…...
likeshop同城跑腿系统likeshop回收租赁系统likeshop多商户商城安装及小程序对接方法
前言:首先likeshop是一个开发平台,是一个独创的平台就像TP内核平台一样,你可以在这个平台上开发和衍生出很多伟大的产品,以likeshop为例,他们开发出商城系统,团购系统,外卖点餐系统,…...
java -jar启动项目报错:XXX.jar中没有主清单属性
XXX.jar中没有主清单属性 1、错误复现2、错误原因3、解决方案 java -jar启动项目报错:XXX.jar中没有主清单属性 1、错误复现 今天使用springboot给项目打了jar包,使用命令启动时报错,截图如下: 2、错误原因 项目的pom文件配置如…...
浅谈云计算03 | 云计算的技术支撑(云使能技术)
云计算的技术支撑 一、定义与内涵1.1 定义与内涵 二、云计算使能技术架构2.1 宽带网络和 Internet 架构2.2 数据中心技术2.3 虚拟化技术2.4 Web 技术2.5 多租户技术2.6 服务技术 一、定义与内涵 1.1 定义与内涵 云计算技术包含一些基础的关键技术,这里称为使能技术…...
使用LinkedList手撕图的邻接表
主要是学习图的邻接表的核心结构等等,话不多说直接上代码: import java.util.LinkedList;public class GrapAdj {private int n ; // 表示图中顶点的数量。private LinkedList<Integer>[] adj;public GrapAdj(int n){this.n n;adj new LinkedLis…...
学习RocketMQ
1.为什么要用MQ? 消息队列是一种“先进先出”的数据结构 其应用场景主要包含以下4个方面: 1.1 异步解耦 最常见的一个场景是用户注册后,需要发送注册邮件和短信通知,以告知用户注册成功。传统的做法有以下两种: …...
sap mm学习笔记
1. 业务流程 2. 组织架构 3. 物料主数据 4.采购主数据 5. 采购管理 6. 库存管理 7.物料主数据 8. 采购申请 ME51N...
Dockerfile 构建java镜像并运行部署java项目
目录 1. 前提准备 2. 什么是Dockerfile 3. 步骤 3.1. 创建目录 3.2. 编写dockerfile文件 3.3. 构建镜像 3.4. 运行容器 3.5. 验证 4. 总结 1. 前提准备 (1) 准备一个jar打包文件,已为大家准备(我这里的包名为 app.jar) 资源链接,点我下载 (2) 已经下载…...
【C语言系列】函数递归
函数递归 一、递归是什么?1.1尾递归 二、递归的限制条件三、递归举例3.1举例一:求n的阶乘3.2举例二:顺序打印一个整数的每一位 四、递归与迭代4.1举例三:求第n个斐波那契数 五、拓展学习青蛙跳台问题 一、递归是什么? …...
windows10 安装 Golang 版本控制工具g与使用
下载包:https://github.com/voidint/g/releases 解压, 并添加到环境变量 g 常用命令 查询当前可供安装的stable状态及所有的 go 版本 # stable 版本 g ls-remote stable# 所有版本 g ls-remote安装目标 go 版本1.23.4g install 1.23.4切换到已安装的…...
WordPress开发进群V2主题,多种引流方法,引私域二次变现
介绍: 全新前端UI界面,多种前端交互特效让页面不再单调,进群页面群成员数,群成员头像名称,每次刷新页面随机更新不重复,最下面评论和点赞也是如此随机刷新不重复 进群页面简介,群聊名称&#…...
在 CentOS/Red Hat Linux 中安装 Docker
在 Red Hat Linux 中安装 Docker 在 Red Hat Linux (RHEL) 中安装 Docker 需要一些准备工作,尤其是针对不同版本的系统(如 RHEL 7、8、9)。以下是具体的安装步骤: 步骤 1:检查系统版本 在安装前,确认系统…...
【DAPM杂谈之二】实践是检验真理的标准
本文主要分析DAPM的设计与实现 内核的版本是:linux-5.15.164,下载链接:Linux内核下载 主要讲解有关于DAPM相关的知识,会给出一些例程并分析内核如何去实现的 /**************************************************************…...
关于使用FastGPT 摸索的QA
近期在通过fastGPT,创建一些基于特定业务场景的、相对复杂的Agent智能体应用。 工作流在AI模型的基础上,可以定义业务逻辑,满足输出对话之外的需求。 在最近3个月来的摸索和实践中,一些基于经验的小问题点(自己也常常…...
虚拟文件系统 VFS
目录 虚拟文件系统 VFS 文件系统挂载过程 虚拟文件系统 VFS 统一标准的系统调用接口: VFS定义了一组标准的文件操作API,如open(), read(), write(), close()等,使得用户空间的应用程序无需关心底层文件系统的具体类型。 下层文件系统必须实现…...
React Fiber框架中的Render渲染阶段——workLoop(performUnitOfWork【beginWork与completeWork】)
触发渲染过程——renderRoot renderRoot 是一个函数,用于触发渲染工作。它通常会调用并递归地执行一系列的渲染任务,直到完成整个更新过程。这个过程包括执行 Fiber 树中的 beginWork 和 completeWork,以及渲染新状态或 DOM。 function ren…...
Xcode 正则表达式实现查找替换
在软件开发过程中,查找和替换文本是一项常见的任务。正则表达式(Regular Expressions)是一种强大的工具,可以帮助我们在复杂的文本中进行精确的匹配和替换。Xcode 作为一款流行的开发工具,提供了对正则表达式的支持。本…...
【opencv】第8章 图像轮廓与图像分割修复
8.1 查找并绘制轮廓 一个轮廓一般对应一系列的点,也就是图像中的一条曲线。其表示方法可能 根据不同的情况而有所不同。在OpenCV 中,可以用findContours()函数从二值图 像中查找轮廓 8.1.1 寻找轮廓: findContours() 函数 findContours) 函…...
excel VBA 基础教程
这里写目录标题 快捷键选择所有有内容的地方 调试VBA录制宏,打开VBA开发工具录制宏,相当于excel自动写代码(两个表格内容完全一致才可以) 查看宏代码保持含有宏程序的文件xlsm后缀(注意很容易有病毒)宏文件安全设置 使…...
2008-2019年各省城镇人口数据
2008-2019年各省城镇人口数据 1、时间:2008-2019年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区、年份、城镇人口 4、范围:31省 5、指标解释:城镇人口是指居住在城镇范围内的全部常住人口。 6、下…...
【机器学习】在不确定的光影中:机器学习与概率论的心灵共舞
文章目录 概率与统计基础:解锁机器学习的数据洞察之门前言一、概率论基础1.1 概率的基本概念与性质1.1.1 概率的定义1.1.2 样本空间与事件1.1.3 互斥事件与独立事件1.1.4 概率的计算方法 1.2 条件概率与独立性1.2.1 条件概率1.2.2 独立事件 1.3 随机变量1.3.1 随机变…...