监控、审计和运行时安全

news2025/2/6 11:49:59

监控、审计和运行时安全

image-20230606062954890

目录

文章目录

    • 监控、审计和运行时安全
    • 目录
    • 1、分析容器系统调用:Sysdig
      • Sysdig介绍
      • 安装sysdig
      • sysdig常用参数
      • sysdig常用命令
      • Chisels(实用的工具箱)
      • 其它命令
    • 2、监控容器运行时:Falco
      • Falco介绍
      • Falco架构
      • 安装falco
      • 自定义扩展规则文件
      • 威胁场景测试
      • Falco支持五种输出告警通知的方式
      • Falco告警集中化展示
    • 3、Kubernetes 审计日志
    • 关于我
    • 最后
    • 最后

1、分析容器系统调用:Sysdig

Sysdig介绍

Sysdig:一个非常强大的系统监控、分析和故障排查工具。

汇聚 strace+tcpdump+htop+iftop+lsof 工具功能于一身!

sysdig 除了能获取系统资源利用率、进程、网络连接、系统调用等信息,

只支持本机运行。

还具备了很强的分析能力,例如:

  • 按照CPU使用率对进程排序
  • 按照数据包对进程排序
  • 打开最多的文件描述符进程
  • 查看进程打开了哪些文件
  • 查看进程的HTTP请求报文
  • 查看机器上容器列表及资源使用情况

项目地址:https://github.com/draios/sysdig

文档:https://github.com/draios/sysdig/wiki

sysdig 通过在内核的驱动模块注册系统调用的 hook,这样当有系统调用发生和完成的时候,它会把系统调用信息拷贝到特定的buffer,然后用户态组件对数据信息处理(解压、解析、过滤等),

并最终通过 sysdig 命令行和用户进行交互。

image-20230606063621765

安装sysdig

自己是在centos7.6上安装的。

rpm --import https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public 
curl -s -o /etc/yum.repos.d/draios.repo https://s3.amazonaws.com/download.draios.com/stable/rpm/draios.repo
yum install epel-release -y
yum install sysdig -y

/usr/bin/sysdig-probe-loader # 加载驱动模块 注意:我当时安装时,执行这个命令会报错的,但不影响结果。

哪台机器有问题,就在哪台机器上装。

image-20230606064854353

sysdig常用参数

• -l, --list:列出可用于过滤和输出的字段
• -M <num_seconds> :多少秒后停止收集  例如:sysdig -M 3 -p "user:%user.name time:%evt.time proc_name:%proc.name"
• -p <output_format>, --print=<output_format> :指定打印事件时使用的格式
    • 使用-pc或-pcontainer 容器友好的格式
    • 使用-pk或-pkubernetes k8s友好的格式
• -c <chiselname> <chiselargs>:指定内置工具,可直接完成具体的数据聚合、分析工作
• -w <filename>:保存到文件中 案例:sysdig -M 3 -p "user:%user.name time:%evt.time proc_name:%proc.name" -w a.sysdig
• -r <filename>:从文件中读取

sysdig常用命令

案例:sysdig命令

执行sysdig命令,实时输出大量系统调用。
示例:59509 23:59:19.023099531 0 kubelet (1738) < epoll_ctl
格式:%evt.num %evt.outputtime %evt.cpu %proc.name (%thread.tid) %evt.dir %evt.type %evt.info
• evt.num: 递增的事件号
• evt.time: 事件发生的时间
• evt.cpu: 事件被捕获时所在的 CPU,也就是系统调用是在哪个 CPU 执行的
• proc.name: 生成事件的进程名字
• thread.tid: 线程的 id,如果是单线程的程序,这也是进程的 pid
• evt.dir: 事件的方向(direction),> 代表进入事件,< 代表退出事件
• evt.type: 事件的名称,比如 open、stat等,一般是系统调用
• evt.args: 事件的参数。如果是系统调用,这些对应着系统调用的参数

自定义格式输出:sysdig -p "user:%user.name time:%evt.time proc_name:%proc.name"

输入sysdig后,就会显示好多log信息的,表示当前系统上哪些进程在进行系统调用。

image-20230606065418193

案例:自定义格式输出

自定义格式输出:sysdig -p "user:%user.name time:%evt.time proc_name:%proc.name"

image-20230606070153161

sysdig过滤

sysdig过滤:
• fd:根据文件描述符过滤,比如 fd 标号(fd.num)、fd 名字(fd.name)
• process:根据进程信息过滤,比如进程 id(proc.id)、进程名(proc.name)
• evt:根据事件信息过滤,比如事件编号、事件名
• user:根据用户信息过滤,比如用户 id、用户名、用户 home 目录
• syslog:根据系统日志过滤,比如日志的严重程度、日志的内容
• container:根据容器信息过滤,比如容器ID、容器名称、容器镜像

查看完整过滤器列表:sysdig -l

示例

示例:
1、查看一个进程的系统调用
sysdig proc.name=kubelet

2、查看建立TCP连接的事件
sysdig evt.type=accept

3、查看/etc目录下打开的文件描述符
sysdig fd.name contains /etc

4、查看容器的系统调用
sysdig -M 10 container.name=web

注:还支持运算操作符,=!=>=><<=、contains、in 、exists、and、or、not
[root@k8s-master1 ~]#docker run -d --name=web nginx
sysdig -M 10 container.name=web
[root@k8s-master1 image-policy]#curl 172.17.0.2 #访问容器ip

image-20230606122806087

Chisels(实用的工具箱)

Chisels:实用的工具箱,一组预定义的功能集合,用来分析特定的场景。

sysdig –cl 列出所有Chisels,以下是一些常用的:
• topprocs_cpu:输出按照 CPU 使用率排序的进程列表,例如 sysdig -c 
• topprocs_net:输出进程使用网络TOP
• topprocs_file:进程读写磁盘文件TOP
• topfiles_bytes:读写磁盘文件TOP
• netstat:列出网络的连接情况

sysdig -c topprocs_cpu

image-20230607074102604

sysdig -c topprocs_net

image-20230607074126064

sysdig -c topprocs_files

image-20230607074147652

sysdig -c topfiles_bytes

image-20230607074252994

sysdig -c netstat

image-20230607074335447

其它命令

image-20230607074407815

网络:
# 查看使用网络的进程TOP
sysdig -c topprocs_net
# 查看建立连接的端口
sysdig -c fdcount_by fd.sport "evt.type=accept" -M 10
# 查看建立连接的端口
sysdig -c fdbytes_by fd.sport
# 查看建立连接的IP
sysdig -c fdcount_by fd.cip "evt.type=accept" -M 10
# 查看建立连接的IP
sysdig -c fdbytes_by fd.cip



硬盘:
# 查看进程磁盘I/O读写
sysdig -c topprocs_file
# 查看进程打开的文件描述符数量
sysdig -c fdcount_by proc.name "fd.type=file" -M 10
# 查看读写磁盘文件
sysdig -c topfiles_bytes
sysdig -c topfiles_bytes proc.name=etcd
# 查看/tmp目录读写磁盘活动文件
sysdig -c fdbytes_by fd.filename "fd.directory=/tmp/"



CPU:
# 查看CPU使用率TOP
sysdig -c topprocs_cpu
# 查看容器CPU使用率TOP
sysdig -pc -c topprocs_cpu container.name=web
sysdig -pc -c topprocs_cpu container.id=web



容器:
# 查看机器上容器列表及资源使用情况
csysdig –vcontainers
# 查看容器资源使用TOP
sysdig -c topcontainers_cpu/topcontainers_net/topcontainers_file


其他常用命令:
sysdig -c netstat
sysdig -c ps
sysdig -c lsof #查看所有打开的文件描述符
# 查看建立连接的端口
sysdig -c fdcount_by fd.sport "evt.type=accept" -M 10

image-20230607074701400

# 查看建立连接的IP
sysdig -c fdcount_by fd.cip "evt.type=accept" -M 10

image-20230607074813229

# 查看进程打开的文件描述符数量
sysdig -c fdcount_by proc.name "fd.type=file" -M 10

image-20230607075049682

# 查看容器CPU使用率TOP
sysdig -pc -c topprocs_cpu container.name=web
sysdig -pc -c topprocs_cpu container.id=web

image-20230607075300925

# 查看容器资源使用TOP
sysdig -c topcontainers_cpu/topcontainers_net/topcontainers_file

image-20230607075442452

csysdig #图形化查看 (比top多了FILE和NET2列,其它没啥变化。)

# 查看机器上容器列表及资源使用情况
csysdig –vcontainers

image-20230607075645239

容器命令我这里有报错哎:。。。

image-20230607075956098

image-20230607080020274

sysdig -c lsof #查看所有打开的文件描述符

image-20230608064900642

2、监控容器运行时:Falco

Falco介绍

Falco 是一个 Linux 安全工具,它使用系统调用来保护和监控系统。

Falco最初是由Sysdig开发的,后来加入CNCF孵化器,成为首个加入CNCF的运行时安全项目。

Falco提供了一组默认规则,可以监控内核态的异常行为,例如:

  • 对于系统目录/etc, /usr/bin, /usr/sbin的读写行为
  • 文件所有权、访问权限的变更
  • 从容器打开shell会话
  • 容器生成新进程
  • 特权容器启动

项目地址:https://github.com/falcosecurity/falco

Falco架构

image-20230608065620978

安装falco

安装falco:

rpm --import https://falco.org/repo/falcosecurity-3672BA8F.asc
curl -s -o /etc/yum.repos.d/falcosecurity.repo  https://falco.org/repo/falcosecurity-rpm.repo
yum install epel-release -y
#yum update
reboot
yum install falco -y
systemctl start falco
systemctl enable falco

#falco是一个守护进程

falco配置文件目录:/etc/falco

  • falco.yaml falco配置与输出告警通知方式
  • falco_rules.yaml 规则文件,默认已经定义很多威胁场景
  • falco_rules.local.yaml 自定义扩展规则文件
  • k8s_audit_rules.yaml K8s审计日志规则

安装文档:https://falco.org/zh/docs/installation

image-20230608091635118

⚠️ 注意:

安装过程最好不要使用yum update命令升级,否则会同时升级k8s集群的,因此建议单独升级系统内核就行。

image-20230610074734891

自定义扩展规则文件

告警规则示例(falco_rules.local.yaml):

- rule: The program "sudo" is run in a container
  desc: An event will trigger every time you run sudo in a container
  condition: evt.type = execve and evt.dir=< and container.id != host and proc.name = sudo
  output: "Sudo run in container (user=%user.name %container.info parent=%proc.pname 
cmdline=%proc.cmdline)"
  priority: ERROR
  tags: [users, container]

参数说明:

  • rule:规则名称,唯一
  • desc:规则的描述
  • condition: 条件表达式
  • output:符合条件事件的输出格式
  • priority:告警的优先级
  • tags:本条规则的 tags 分类

image-20230608071710605

威胁场景测试

威胁场景测试:

1、监控系统二进制文件目录读写(默认规则)

2、监控根目录或者/root目录写入文件(默认规则)

3、监控运行交互式Shell的容器(默认规则)

4、监控容器创建的不可信任进程(自定义规则)

使用:falco

验证:tail -f /var/log/messages(告警通知默认输出到标准输出和系统日志)

  • 如果报错了,可以执行falco-driver-loader命令

image-20230610075003992

  • 启用falco

image-20230610094044560

测试过程:

1、监控系统二进制文件目录读写(默认规则)

[root@k8s-master1 ~]#tail -f /var/log/messages
[root@k8s-master1 ~]#touch /usr/bin/a

image-20230610094242711

[root@k8s-master1 ~]#vim /etc/falco/falco_rules.yaml

image-20230610094635305

2、监控根目录或者/root目录写入文件(默认规则)

[root@k8s-master1 ~]#touch /a

image-20230610094804860

[root@k8s-master1 ~]#vim /etc/falco/falco_rules.yaml

image-20230610094916715

3、监控运行交互式Shell的容器(默认规则)

[root@k8s-master1 ~]#docker run -d  --name=web nginx
[root@k8s-master1 ~]#docker exec -it web bash

image-20230610100130948

image-20230610100338391

4、监控容器创建的不可信任进程(自定义规则)

监控容器创建的不可信任进程规则,在falco_rules.local.yaml文件添加:

[root@k8s-master1 ~]#vim /etc/falco/falco_rules.local.yaml

- rule: Unauthorized process on nginx containers
  condition: spawned_process and container and container.image startswith nginx and not proc.name in (nginx)
  desc: test
  output: "Unauthorized process on nginx containers (user=%user.name container_name=%container.name 
container_id=%container.id image=%container.image.repository shell=%proc.name parent=%proc.pname 
cmdline=%proc.cmdline terminal=%proc.tty)"
  priority: WARNING

image-20230610102621064

image-20230610102731935

Falco支持五种输出告警通知的方式

  • 输出到标准输出(默认启用)
  • 输出到文件
  • 输出到Syslog(默认启用)
  • 输出到HTTP服务
  • 输出到其他程序(命令行管道方式)

告警配置文件:/etc/falco/falco.yaml

例如输出到指定文件:

file_output:
  enabled: true
  keep_alive: false
  filename: /var/log/falco_events.log

[root@k8s-master1 ~]#vim /etc/falco/falco.yaml

image-20230610103321021

image-20230610103349072

image-20230610103439017

以json格式输出:

image-20230610104451673

测试:

[root@k8s-master1 ~]#touch /a

image-20230610103527328

image-20230610104525295

符合预期。

Falco告警集中化展示

image-20230610104755255

  • FalcoSideKick:一个集中收集并指定输出,支持大量方式输出,例如Influxdb、Elasticsearch等

项目地址 https://github.com/falcosecurity/falcosidekick

  • FalcoSideKick-UI:告警通知集中图形展示系统

项目地址 https://github.com/falcosecurity/falcosidekick-ui

image-20230610173643113

部署过程:

1、部署Falco UI:

#本次在k8s-node1节点上部署

#部署falcosidekick-ui
docker run -d \
-p 2802:2802 \
--name falcosidekick-ui \
falcosecurity/falcosidekick-ui

#部署falcosidekick
docker run -d \
-p 2801:2801 \
--name falcosidekick \
-e WEBUI_URL=http://192.168.31.71:2802 \
falcosecurity/falcosidekick

http://172.29.9.32:2802/ui/

2、修改falco配置文件指定http方式输出:

json_output: true
json_include_output_property: true
http_output:
  enabled: true
  url: "http://192.168.31.71:2801/"

🍀 老师实验现象

image-20230610202009643

image-20230610202041253

image-20230610202054968

image-20230610202112236

image-20230610202205451

image-20230610202221559

🍀 自己测试过程(失败了

falcosidekick容器启动成功:

image-20230610202331380

但是falcosidekick-ui容器无法启动成功:。。。

image-20230610202457991

image-20230610202521592

最后,启动redislabs/redisearch:2.2.4容器,下载falcosidekick-ui的二进制文件启动成功,但是falcosidekick-ui链接依然访问不了。。。。

image-20230610202741288

image-20230610202747260

image-20230610202840803

https://github.com/falcosecurity/falcosidekick-ui

image-20230610203017623

结束。

3、Kubernetes 审计日志

在Kubernetes集群中,API Server的审计日志记录了哪些用户、哪些服务请求操作集群资源,并且可以编写不同规则,控制忽略、存储的操作日志。

审计日志采用JSON格式输出,每条日志都包含丰富的元数据,例如请求的URL、HTTP方法、客户端来源等,你可以使用监控服务来分析API流量,以检测趋势或可能存在的安全隐患。

这些可能会访问API Server:

  • 管理节点(controller-manager、scheduler)
  • 工作节点(kubelet、kube-proxy)
  • 集群服务(CoreDNS、HPA、Calico等)
  • kubectl、API、Dashboard

image-20230611105308096

image-20230611105557805

💘 案例:Kubernetes 审计日志02923.6.13(测试成功)

image-20230611110917837

vi /etc/kubernetes/manifests/kube-apiserver.yaml
…
- --audit-policy-file=/etc/kubernetes/audit/audit-policy.yaml
- --audit-log-path=/var/log/k8s_audit.log
- --audit-log-maxage=30
- --audit-log-maxbackup=10
- --audit-log-maxsize=100
  • 实验环境
实验环境:
1、win10,vmwrokstation虚机;
2、k8s集群:3台centos7.6 1810虚机,1个master节点,2个node节点
   k8s version:v1.20.0
   docker://20.10.7
  • 实验软件(无)

1、创建策略文件

[root@k8s-master1 ~]#mkdir /etc/kubernetes/audit
[root@k8s-master1 ~]#cd /etc/kubernetes/audit
[root@k8s-master1 audit]#vim audit-policy.yaml

本次先使用官方给的yaml内容:

https://kubernetes.io/zh-cn/docs/tasks/debug/debug-cluster/audit/

apiVersion: audit.k8s.io/v1 # 这是必填项。
kind: Policy
# 不要在 RequestReceived 阶段为任何请求生成审计事件。
omitStages:
  - "RequestReceived"
rules:
  # 在日志中用 RequestResponse 级别记录 Pod 变化。
  - level: RequestResponse
    resources:
    - group: ""
      # 资源 "pods" 不匹配对任何 Pod 子资源的请求,
      # 这与 RBAC 策略一致。
      resources: ["pods"]
  # 在日志中按 Metadata 级别记录 "pods/log"、"pods/status" 请求
  - level: Metadata
    resources:
    - group: ""
      resources: ["pods/log", "pods/status"]

  # 不要在日志中记录对名为 "controller-leader" 的 configmap 的请求。
  - level: None
    resources:
    - group: ""
      resources: ["configmaps"]
      resourceNames: ["controller-leader"]

  # 不要在日志中记录由 "system:kube-proxy" 发出的对端点或服务的监测请求。
  - level: None
    users: ["system:kube-proxy"]
    verbs: ["watch"]
    resources:
    - group: "" # core API 组
      resources: ["endpoints", "services"]

  # 不要在日志中记录对某些非资源 URL 路径的已认证请求。
  - level: None
    userGroups: ["system:authenticated"]
    nonResourceURLs:
    - "/api*" # 通配符匹配。
    - "/version"

  # 在日志中记录 kube-system 中 configmap 变更的请求消息体。
  - level: Request
    resources:
    - group: "" # core API 组
      resources: ["configmaps"]
    # 这个规则仅适用于 "kube-system" 名字空间中的资源。
    # 空字符串 "" 可用于选择非名字空间作用域的资源。
    namespaces: ["kube-system"]

  # 在日志中用 Metadata 级别记录所有其他名字空间中的 configmap 和 secret 变更。
  - level: Metadata
    resources:
    - group: "" # core API 组
      resources: ["secrets", "configmaps"]

  # 在日志中以 Request 级别记录所有其他 core 和 extensions 组中的资源操作。
  - level: Request
    resources:
    - group: "" # core API 组
    - group: "extensions" # 不应包括在内的组版本。

  # 一个抓取所有的规则,将在日志中以 Metadata 级别记录所有其他请求。
  - level: Metadata
    # 符合此规则的 watch 等长时间运行的请求将不会
    # 在 RequestReceived 阶段生成审计事件。
    omitStages:
      - "RequestReceived"

image-20230612104146630

2、配置kube-apiserver

[root@k8s-master1 ~]#vim  /etc/kubernetes/manifests/kube-apiserver.yaml
    - --audit-policy-file=/etc/kubernetes/audit/audit-policy.yaml
    - --audit-log-path=/var/log/k8s_audit.log
    - --audit-log-maxage=30
    - --audit-log-maxbackup=10
    - --audit-log-maxsize=100
    
……    
    - mountPath: /etc/kubernetes/audit
      name: audit
      readOnly: true
    - mountPath: /var/log/k8s_audit.log
      name: audit-log
  hostNetwork: true
  priorityClassName: system-node-critical
  volumes:
  - hostPath:
      path: /var/log/k8s_audit.log
      type: FileOrCreate
    name: audit-log
  - hostPath:
      path: /etc/kubernetes/audit
      type: DirectoryOrCreate
    name: audit

image-20230612105105518

image-20230612105139664

image-20230612105214864

3、验证

[root@k8s-master1 ~]#tail -f /var/log/k8s_audit.log

image-20230612105600258

可以看到有很多的审计日志,一直在写入。

我们安装下jq工具来解析下这些json数据:

yum install -y eple-release
yum install -y jq

image-20230612111206580

  • 接下来,我们自定义下规则
[root@k8s-master1 ~]#vim /etc/kubernetes/audit/audit-policy.yaml
apiVersion: audit.k8s.io/v1
kind: Policy
# 忽略步骤,不为RequestReceived阶段生成审计日志
omitStages:
  - "RequestReceived"
rules:
  # 不记录日志
  - level: None
    users:
      - system:apiserver
      - system:kube-controller-manager
      - system:kube-scheduler
      - system:kube-proxy
      - kubelet

  # 针对资源记录日志
  - level: Metadata
    resources: 
      - group: ""
        resources: ["pods"]
  # - group: "apps"
  # resources: ["deployments"]
  # 其他资源不记录日志
  - level: None

image-20230612073047881

配置后,我们需要重启下kube-apiserver-k8s-master1的。(可以重启这个pod或者kill掉这个容器进程)

image-20230613061930723

image-20230613062005422

tail -f /var/log/k8s_audit.log,发现此时就没有过多的日志输出了。

image-20230613062059758

此时,发一个get请求:

image-20230613070329451

image-20230613070336526

image-20230613070423558

image-20230613070545358

image-20230613070603708

image-20230613070646450

image-20230612073055825

测试结束。😘

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

🍀 微信二维码
x2675263825 (舍得), qq:2675263825。

image-20230107215114763

🍀 微信公众号
《云原生架构师实战》

image-20230107215126971

🍀 语雀

https://www.yuque.com/xyy-onlyone

image-20230306221144511

🍀 csdn
https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

image-20230107215149885

🍀 知乎
https://www.zhihu.com/people/foryouone

image-20230107215203185

最后

好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!

image-20230613075336161
632213)]

[外链图片转存中…(img-OD9kNnwo-1686631632213)]

[外链图片转存中…(img-00Zdjeu4-1686631632213)]

[外链图片转存中…(img-evZ3mmSm-1686631632213)]

测试结束。😘

最后

好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!

[外链图片转存中…(img-vKrtKUjN-1686631632215)]

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

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

相关文章

ElasticSearch(ES)介绍

前言 为什么学习ElasticSearch&#xff1f; 1、ElasticSearch具备非常强的大数据分析能力。虽然Hadoop也可以做大数据分析&#xff0c;但是ElasticSearch的分析能力非常高&#xff0c;具备Hadoop不具备的能力。比如有时候用Hadoop分析一个结果&#xff0c;可能等待的时间比较…

免费获取程序员好书,这个宝藏网站等你来挖!

今天给大家分享一个免费的程序员、IT、互联网资源的​免费书籍网站。​ 书籍类型涵盖了Vue、CSS、小程序等前端语言、框架&#xff1b;.NET、JAVA、Go等后端语言&#xff1b;Android、IOS、Flutter等移动语言&#xff1b;数据库、云计算大数据、网络系统运维、UI美工设计、游戏…

【CASA模型】生态系统NPP及碳源、碳汇模拟、土地利用变化、未来气候变化、空间动态模拟实践技术应用

查看原文>>>生态系统NPP及碳源、碳汇模拟、土地利用变化、未来气候变化、空间动态模拟实践技术应用 由于全球变暖、大气中温室气体浓度逐年增加等问题的出现&#xff0c;“双碳”行动特别是碳中和已经在世界范围形成广泛影响。碳中和可以从碳排放&#xff08;碳源&am…

Jmeter调用Oracle、pg、MySql 储存过程,实例,获取返回值

JDBC Request: 1、重要参数说明&#xff1a; Variable Name&#xff1a;数据库连接池的名字&#xff0c;需要与JDBC Connection Configuration的Variable Name Bound Pool名字保持一致   Query&#xff1a;填写的sql语句未尾不要加“;”   Parameter valus&#xff1a;参数…

统信UOS系统开发笔记(四):从Qt源码编译安装之编译安装QtCreator4.11.2,并配置编译测试Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/131182539 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

激光雷达安全系统:让世界变得更安全

基于3D激光雷达的安全系统具有更高的可靠性,减少了误报,因此具有更高级别的安全性。激光雷达在安全和监视应用中越来越受欢迎,由于其高可靠性、远程、厘米级精度以及对具有挑战性的天气和照明条件不敏感等特点,它很容易击败相机或雷达等同行。 01 基于激光雷达的安全系统 …

技术文章—基于SPAD / SiPM技术的激光雷达方案

激光雷达(LiDAR)是一种测距技术,近年来越来越多地用于汽车先进驾驶辅助系统(ADAS)、手势识别和3D映射等应用。尤其在汽车领域,随着传感器融合的趋势,LiDAR结合成像、超声波、毫米波雷达,互为补足,为汽车提供全方位感知,为迈向更安全的自动驾驶铺平道路。安森美半导体提供…

简历项目合集

基于Arduino的超声波悬浮装置 超声波悬浮原理 项目图片 概述 实验需要使用Arduino驱动换能器产生一个40KHz的方波&#xff0c;可以使用换能器组&#xff0c;也可以使用Arduino的超声波模块。但是仅仅使用Arduino输出的方波信号的功率&#xff0c;并不足以使得小物体悬浮&…

【AI人工智能】 iTab浏览器标签页中最强大的AI功能莫过于此了, 你不用真的太可惜了! 最后一步就这样干(3)

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

对windows自带EFS加解密的研究

0x00 前言 0x01 测试环境 windows7专业版SP1&#xff1a; 在虚拟机中运行&#xff0c;创建了快照&#xff0c;当前账户名和密码为jizong/123456 0x02 EFS加解密原理&#xff1a; EFS加密实际上综合了对称加密和不对称加密&#xff0c;具体流程如下&#xff1a; (1) 随机生…

关于 MsgWaitForMultipleObjects 的理解

你是否希望有一个 WaitMessageTimeout 函数能帮助你干些特别的活&#xff1f; 很抱歉&#xff0c;没有这东西。 但是&#xff0c;你可以借助另外一个函数 MsgWaitForMultipleObjects 来间接的实现它。怎么做呢&#xff1f;请看下文。 >> 请移步至 topomel.com 以查看图片…

电弧打火机方案,点烟器单片机开发方案

市面上的打火机除了明火之外&#xff0c;还有电热丝、电弧两种类型的点烟器。电热丝在使用过程中会变细并且烧断。宇凡微推出的电弧打火机方案&#xff0c;该点烟器芯片为宇凡微单片机YF系列&#xff0c;电弧点烟器IC性价比高。 一、电弧打火机方案的原理 电弧打火机使用的是电…

量子机器学习Variational Quantum Classifier (VQC)简介

变分量子分类器&#xff08;Variational Quantum Classifier&#xff0c;简称VQC&#xff09;是一种利用量子计算技术进行分类任务的机器学习算法。它属于量子机器学习算法家族&#xff0c;旨在利用量子计算机的计算能力&#xff0c;潜在地提升经典机器学习方法的性能。 VQC的…

【Python】一文带你了解并使用 Json 模块

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

【历史上的今天】6 月 13 日:分组交换网路的“亲子纠纷”;博弈论创始人出生;交互式电视初现雏形

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 6 月 13 日&#xff0c;知名的 ENIAC 建造者约翰莫克利在历史上的这一天参观了 ABC 计算机&#xff0c;与 ABC 的设计者之一阿塔纳索夫会面。这次会面后来牵扯…

java发送QQ邮箱验证码实现登录注册、邮箱验证码防刷校验

文章目录 一&#xff1a;前台功能实现1.1 页面编写1.2 发送验证码——sendEmailCode1.2.1 远程调用发送接口1.2.1 接口防刷校验——60s内只能发送一次 二&#xff1a;获取QQ邮箱授权码2.1 登录QQ邮箱2.2 开启SMTP权限2.2.1 设置2.2.2 账户2.2.3 管理服务2.2.4 生成授权码2.2.5 …

新能源商用车:老玩家、新势力“争先恐后”

现如今&#xff0c;作为重要出行交通工具之一的汽车&#xff0c;已经在人们日常生活中扮演着愈发重要的角色。不仅如此&#xff0c;汽车行业也发生了不小的变化&#xff0c;新能源汽车的热度更是居高不下。除了各路玩家积极布局之外&#xff0c;新能源汽车的销量也是持续走高。…

python---列表和元组(1)

变量就是内存空间,用来表示/存储数据. 如果表示的数据少,直接定义几个变量就行了. 但是有的时候表示的数据比较多,就很麻烦 在python中就有列表和元组,就是这样的机制,可以用一个变量表示很多的数据. 这就类比于其他编程语言中的"数组" 列表和元组大部分的功能是差…

智安网络|深谈网络安全难点的根源和解决之道

随着数字化和网络化的加速发展&#xff0c;人们面临的网络安全问题日益增多。由于网络安全威胁的多样性和复杂性&#xff0c;网络安全防护变得越来越困难。本文将从几个方面来探讨网络安全难点的根源和解决之道。 一. 网络安全威胁的复杂性 网络安全威胁种类繁多&#xff0c;主…

Junit执行器Runner探索之旅 | 京东云技术团队

单元测试是每个程序员必备的技能&#xff0c;而Runner是每个单元测试类必有属性。本文通过解读Junit源码&#xff0c;介绍junit中每个执行器的使用方法&#xff0c;让读者在单元测试时&#xff0c;可以灵活的使用Runner执行器。 一、背景 在今年的敏捷团队建设中&#xff0c;…