读零信任网络:在不可信网络中构建安全系统15协议和过滤
1. 协议
1.1. IKE/IPSec
-
1.1.1. 因特网密钥交换协议(Internet Key Exchange,IKE)用于执行IPSec认证和密钥交换
- 1.1.1.1. 通常以后台守护进程的方式实现,使用预共享密钥或X.509证书来认证对端并创建一个安全会话
-
1.1.2. IKEv1与IKEv2
-
1.1.2.1. IKEv1过于复杂,性能也不太好
-
1.1.2.2. 相比于IKEv1, IKEv2更为灵活和可靠
-
1.1.2.3. 强烈建议使用IKEv2
-
-
1.1.3. IPSec不是单一的协议,而是一系列协议的集合
-
1.1.4. IKE可以被认为是IPSec的控制平面,它处理会话协商和认证,使用协商的结果为端点配置会话密钥和加密算法
-
1.1.5. 由于核心的IPSec协议内嵌在IP协议栈中,因此IPSec通常在内核中实现
-
1.1.5.1. 密钥交换是一种相对复杂的机制,IKE以用户态的守护进程形式实现
-
1.1.5.2. 内核维护的状态定义了IPSec安全关联,流量选择器则定义了对哪些流量应用IPSec策略
-
1.2. 身份认证凭证
-
1.2.1. IKEv2支持预共享密钥和X.509证书
-
1.2.2. 还支持可扩展身份验证协议(EAP)
-
1.2.3. 支持EAP意味着IKEv2通过代理可以支持大量其他的身份验证方法(包括多因素认证)
-
1.2.4. X.509证书是IKE的首选认证方法
- 1.2.4.1. X.509证书不是为人工使用准备的,它们用于设备。证书不但携带信任证明,而且提供了带有签名的元数据,以及一种利用其身份对数据进行强加密的方法
-
1.2.5. IKEv2支持预共享密钥,但我们强烈反对使用它们,其带来了大量的密钥生成和分发问题,但最重要的是,需要人为记忆这些预共享密钥
1.3. IKE SA_INIT和AUTH
- 1.3.1. 所有的IKEv2密钥交换都从一对名为IKE_SA_INIT的数据包交换开始,这个初始交换决定密码套件的选择(和Diffie-Hellman交换一样)
1.4. 密码套件选择
-
1.4.1. IPSec的密码选择比TLS稍微复杂一些
- 1.4.1.1. IPSec是在内核中实现的,相较于以软件包的形式实现,其对密码支持的要求更严苛
-
1.4.2. RFC 6379提出了被称为套件B的密码套件,该标准是由美国国家安全局撰写的,它是一个被广泛接受的IPSec密码套件标准
-
1.4.3. 不是所有的IPSec实现都支持椭圆曲线算法,而套件B强制要求椭圆曲线加密
-
1.4.4. 对于主流椭圆曲线算法的安全性的担忧,许多人认为国家政府相关人员的干预可能会影响其安全性
1.5. IPSec安全关联
- 1.5.1. 4个不同状态:幼年(larval)、成熟(mature)、垂死(dying)和死亡(dead)
1.6. IPSec隧道模式
-
1.6.1. 隧道模式是目前广泛部署的模式,当IPSec在隧道模式下运行时,SA包含了远程端点的信息,用于封装IP数据包并且在路由到端点的过程中保护它
-
1.6.2. 经常用于VPN,在需要与远程网络建立安全连接的情况下,管理员能够采用隧道方式将流向该网络的流量通过安全通道进行传输
-
1.6.3. 既然是隧道模式,那就意味着流量在某个时间点会变得不受保护
-
1.6.4. 发送者与中间网络之间传输的安全是可以确保的,但在此之后,将无法保证安全性
- 1.6.4.1. 认为隧道模式其实与零信任体系结构相矛盾
1.7. IPSec传输模式
-
1.7.1. 传输模式提供了几乎相同的安全保证,只是减去了隧道的部分
-
1.7.2. 它没有封装整个IP数据包,而是封装了IP有效负载,这对于主机到主机的直接IP通信非常有用
-
1.7.3. 传输模式并不是与网络中间设备建立一个安全联盟,而是与流量的目的端点直接建立安全联盟,确保端到端应用安全,这个属性使得传输模式能够很好地适用于零信任网络
-
1.7.4. 成熟的零信任数据中心架构应该选择IPSec的传输模式
1.8. 将IKE/IPSec用于设备认证
- 1.8.1. 由于IPSec直接在IP上实现,因此它可以处理大多数应用程序流量,而不仅仅是TCP和UDP
2. 双向认证TLS
2.1. 传输层安全(TLS,通常会沿用其前身SSL的称谓)是用来保护Web流量的常见协议
-
2.1.1. 它是一种成熟的、易于理解的协议,被广泛地部署和支持,并且已经获得一些敏感业务的信任
-
2.1.2. HTTPS中的S指代的就是TLS(SSL)
-
2.1.3. 面向一般公众的服务可以接受客户端身份认证的缺失,但其他任何用例都不可接受这种妥协
-
2.1.4. 双向身份认证是遵循零信任模型安全协议的必要条件,TLS也不例外
2.2. 在TLS密码套件中有4个主要的组件
-
2.2.1. 密钥交换
-
2.2.2. 身份验证
-
2.2.3. 块加密
-
2.2.4. 消息完整性
2.3. 系统的整体安全性取决于较弱的客户端能提供的最强密码套件
-
2.3.1. 在TLS握手中,客户端按优先顺序显示其支持的密码套件列表,如果客户端和服务端支持的密码套件有重合,那么服务器会从这个列表中选择一个密码套件,否则会话建立就可能失败
-
2.3.2. 建议服务器只支持最合理的密码套件
2.4. 协商是一个弱点
-
2.4.1. 码套件协商被认为是现代加密协议中的反模式
-
2.4.2. 较新的协议和框架,如Noise,旨在消除协议协商
2.5. 密钥交换
-
2.5.1. TLS的密钥交换描述了在不安全的通道上安全地生成加密密钥的过程
-
2.5.2. 它们使用数学函数来协商密钥,而不用明文进行传输(在大多数情况下是这样)
-
2.5.3. TLS支持3个主流的密钥交换/协商协议,按照优先顺序排列,它们是ECDHE、DHE和RSA
-
2.5.4. ECDHE基于Diffie-Hellman交换,使用椭圆曲线来协商一个密钥
-
2.5.4.1. 椭圆曲线密码具备高强度、高效率的特点,它建立在一个难以解决的数学问题的基础之上
-
2.5.4.2. 从安全性和性能上考虑,它是理想的选择
-
-
2.5.5. DHE同样基于Diffie-Hellman交换,但它使用模运算而不是椭圆曲线来协商一个密钥
-
2.5.6. RSA密钥交换基于非对称运算来验证数字签名的身份(如X.509证书),它使用服务器的公钥来加密传输需要的共享密钥
-
2.5.7. 当今主流的公钥密码学都基于这样一种假设,即分解较大数字的计算开销非常大
-
2.5.7.1. 经典的计算必须依赖于一种被称为普通数域筛选法的技术来推导出大数因子,这是一种相对低效的算法
-
2.5.7.2. Shor算法是一种比一般数域筛选更有效的量子算法,只要有足够强大的量子计算机,它就可以被用来快速破解大多数非对称密钥交换协议
-
2.6. 完美的前向保密性
-
2.6.1. PFS(完美的前向安全性)是一种加密属性,基于PFS,私钥的披露不会导致之前协商的会话的泄露
-
2.6.2. 可以确保窃听者不能记录会话数据以供之后解密
-
2.6.3. RSA密钥交换不支持PFS
- 2.6.3.1. 因为我们是直接使用私钥加密和传输会话密钥的
-
2.6.4. 必须使用DHE或ECDHE以获得完美的前向安全性
-
2.6.5. 精心设计服务器端密码套件,在可用的情况下先选择DHE协商,必要时返回到ECDHE协商
2.7. 认证
-
2.7.1. 有3种常见的认证方法:RSA、DSA和ECDSA
-
2.7.2. RSA认证是较常见的,它在超过99%的基于Web的TLS资源中使用
-
2.7.3. DSA认证已不再推荐使用
-
2.7.4. EDCSA是DSA的新表兄,它使用椭圆曲线来提供公/私钥对
2.8. 职责分离
-
2.8.1. 需要保护的资源是设备,因此将加密功能独立于工作负载本身非常有意义
-
2.8.2. 要确保所有这些应用程序都确实通过正确的方式使用TLS,在已知漏洞上保持最新状态是非常困难的
-
2.8.3. 将TLS的配置职责转移到控制平面是非常有用的
-
2.8.3.1. 到服务的连接被TLS守护进程代理,然后本地转发给应用程序
-
2.8.3.2. TLS守护进程配置了系统证书、信任权限和节点信息
-
2.8.3.3. 通过这种方式,可以确保所有的软件都接受设备认证和TLS的安全保护,而不管软件是否支持TLS库
-
-
2.8.4. 零信任网络对业务流采用了“白名单”机制,所以可通过限制到已知TLS端点的业务流白名单,确保应用程序业务流量受到保护
2.9. 块加密
-
2.9.1. TLS握手主要有两个目的:认证和会话密钥的创建
-
2.9.2. 当无须考虑身份或认证问题时,使用对称加密就可以满足所需的安全强度
-
2.9.3. 对称加密使用一个单独的密钥而不是公/私钥对,并且与非对称加密相比其计算成本要低得多
-
2.9.4. 业界一致建议采用AES
-
2.9.4.1. 它设计完美,并且没有专利保护,可以在硬件中广泛实现,并且已在软件中普遍采用
-
2.9.4.2. 它非常高效,经过严格的审查/检查,并且保持一致性
-
2.10. ⑩消息完整性
-
2.10.1. 消息的完整性即使不是必需的也是一个重要属性
-
2.10.2. 完整性算法的选择仅限于MD5和SHA系列的散列算法
-
2.10.2.1. 前者已经被破解
-
2.10.2.2. 这使得SHA系列成为TLS确保消息完整性的唯一合理选择
-
2.10.2.3. 不断增长的计算能力导致SHA-1脆弱并易受攻击
-
2.10.2.4. 建议选择可以合理部署的最强SHA散列算法
-
2.11. ⑾基于双向TLS进行设备认证
-
2.11.1. TLS是依赖于协议的
- 2.11.1.1. 它通常基于TCP协议实现,虽然基于UDP的协议变种DTLS也是可用的
-
2.11.2. 只要代理和保护的上游节点被一个计算机网络分离开,这种运行模式就不适用于零信任网络
-
2.11.3. 在零信任网络中,基于TLS协议实现的通信代理必须和应用程序部署在一个逻辑主机上
-
2.11.4. 在用TLS保护数据中心零信任网络时,应用需要自动化配置以便使用外部的TLS通信,它不像IPSec协议那样是“免费”加密
-
2.11.5. TLS仍然是目前保护面向客户的零信任网络的较好选择,它在软件和传输网络中都得到了广泛的支持,并且其运作模式直接而可信赖
-
2.11.6. 大部分Web浏览器本身就支持双向TLS认证,这意味着资源可以直接基于零信任原则进行保护而不需要专门的客户端软件
3. 过滤
3.1. 过滤是数据包被网络上的系统接受或拒绝的过程
3.2. 防火墙确实提供了过滤作用,但它们也可以提供其他服务
-
3.2.1. 网络地址转换(NAT)
-
3.2.2. 流量控制
-
3.2.3. VPN隧道服务
3.3. 传统意义上过滤功能可以由很多系统提供,比如路由器或交换机
3.4. 过滤是一种简单的服务,在网络系统的很多地方都可以应用它
3.5. 许多零信任概念都集中在高级加密和认证系统上,这是因为网络安全的这些方面没有得到应有的设计和考虑
- 3.5.1. 不应该低估网络过滤的重要性,它仍然是零信任架构的关键组成部分
4. 主机过滤
4.1. 过滤主机上的流量
- 4.1.1. 主机过滤让网络端点成为其自身安全的积极参与者,其目标是确保每台主机都被配置为过滤自己的网络流量
4.2. 防火墙利用专用集成电路(Application-Specific Integrated Circuit, ASIC)来有效地处理流经设备的数据包
4.3. 软件防火墙比硬件防火墙要灵活很多,它们提供了一组丰富的服务
-
4.3.1. 比如根据日期和任意的数据偏移(字段)来定义策略
-
4.3.2. Linux:IPtable
-
4.3.3. BSD系统:Berkley包过滤(BPF)
-
4.3.4. macOS:应用程序防火墙和基于命令行的主机防火墙
-
4.3.5. Windows:Windows防火墙服务
4.4. 零信任网络假设网络中始终充满威胁,需要在每个可能的位置过滤网络流量,通常使用主机防火墙实现
4.5. 通过主机防火墙可以过滤不良网络流量来减小主机的攻击面
4.6. 主机过滤非常容易着手实施,配置管理系统很好地支持了主机防火墙的管理
4.7. 在安全设计中隔离的好处,主机过滤可以从中受益
4.8. 关于主机过滤的问题是,其部署点在网络中的位置太“深”了,会造成大量的额外成本
- 4.8.1. 增加了拒绝服务(DoS)攻击的可能性,使内部网络充斥大量的无用流量,压垮了相对脆弱的软件防火墙
5. 双向过滤
5.1. 同时过滤主机的出入流量
- 5.1.1. 一种在接收和发送数据包时同时应用的过滤策略
5.2. 出站(入站的反面)这个术语用来描述离开主机的网络流,这种类型的过滤通常用于管理从私有网络到公共网络的通信,它很少在私有网络内部使用
-
5.2.1. 入站过滤更容易理解,因为在构建防火墙规则时可以枚举出所有的监听服务,出站过滤则需要更多的记录来得知主机如何进行通信
-
5.2.2. 通常认为,入站过滤能够阻止网络中的不良通信
-
5.2.3. 出站过滤需要了解每一个预期的流量,这在传统网络中不常见
5.3. 即使在系统中出现了关键的错误配置,一个部署了全面的双向过滤机制的网络也会受到保护
5.4. 双向过滤不是预防疾病,而是保护被错误配置的系统能够免受错误配置带来的潜在影响
5.5. 在系统中构建双向过滤并没有那么困难,可以通过程序化实现对通信业务流的捕获,捕捉这些流的较好方法是定义细粒度的入站规则
5.6. 出站过滤机制最好与运行在系统上的应用程序隔离,建议在虚拟化或容器化环境的外层实现过滤以便拥有健壮的过滤机制
5.7. 当网络流数据库与运行系统隔离时,双向过滤是较有效的
5.8. Calico项目是动态调度工作负载的虚拟网络系统
6. 中间过滤
6.1. 通过两个主机间的设备过滤流量
- 6.1.1. 指除了发送方或接收方之外的设备在零信任网络中可以并且应该参与到流量过滤中
6.2. 边界过滤在零信任网络中可以发挥作用,并且在网络结构中的中间设备也可以发挥作用
6.3. 高吞吐量的过滤流量通常是来自互联网入口的流量,在理想情况下,我们希望尽快过滤流量,以减少延迟过滤的影响和成本
6.4. UPnP被认为是有害的
-
6.4.1. 从主机策略衍生出的边界策略不应该与UPnP混合使用
-
6.4.2. UPnP是一种用于重新配置用户防火墙的技术
-
6.4.3. UPnP受到诟病是因为网络上的任何应用程序都可以重新配置边界,在零信任模型中,主机策略和边界创建的例外规则之间应该存在信任链
6.5. 零信任网络不会抛弃所有的边界概念,相反,它们鼓励管理员从主机开始向外扩展,边界设备最终会以某种方式发挥作用,而值得关注的是其在缓解拒绝服务攻击上的应用
6.6. 使用主机策略数据库来动态地规划网络结构本身
6.7. 软件定义网络(Software-Defined Network,SDN)
-
6.7.1. 它不会盲目地将数据包路由到目的地址,而是根据预期和允许的流量,积极管理交换和路由策略
-
6.7.2. 将潜在的恶意流量挡在主机之外,减少了攻击面
-
6.7.3. 主机上基于软件的防火墙在网络中增加了额外的防御层
-
6.7.4. 想象一个SDN控制器,它只根据强身份认证和授权过程的结果实现流量传输,希望访问网络资源的客户端可以向控制平面发出信号,提供网络访问请求以及相应的凭证,请求成功授权之后,网络过滤或转发规则就会被下发并且执行,但这些规则仅针对特定的已授权业务流
相关文章:

读零信任网络:在不可信网络中构建安全系统15协议和过滤
1. 协议 1.1. IKE/IPSec 1.1.1. 因特网密钥交换协议(Internet Key Exchange,IKE)用于执行IPSec认证和密钥交换 1.1.1.1. 通常以后台守护进程的方式实现,使用预共享密钥或X.509证书来认证对端并创建一个安全会话 1.1.2. IKEv1与IKEv2 1.1.2.1…...

C语言学习笔记 Day11(指针--中2)
Day11 内容梳理: 目录 Chapter 7 指针 7.6 指针 & 函数 (1)形参改变实参的值 (2)字符数组作为函数参数 1)合并字符串 2)删掉字符串中空格 (3)指针作为函数返…...

Golang 并发编程
Golang 并发编程 Goroutine 什么是协程 创建 Goroutine 主 goroutine (main函数)退出后,其它的工作 goroutine 也会自动退出 package mainimport ("fmt""time" )func myFunc() {i : 0for {ifmt.Println("func: …...

【数据结构详解】——选择排序(动图详解)
目录 🕒 1. 直接选择排序🕒 2. 堆排序 🕒 1. 直接选择排序 💡 算法思想:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始(末尾)位置…...

杂项命令(笔记)
ifconfig :http://t.csdnimg.cn/gT2AR echo :http://t.csdnimg.cn/6DSoO ps和top的区别 http://t.csdnimg.cn/f1XWt...

代码随想录算法训练营Day38||完全背包问题、leetcode 518. 零钱兑换 II 、 377. 组合总和 Ⅳ 、70. 爬楼梯 (进阶)
一、完全背包问题 相较于01背包,完全背包的显著特征是每个物品可以用无数次,遍历顺序也不需要为了保证每个物品只去一次而倒序遍历。 #include<iostream> #include<vector> using namespace std; int main(){int N,V;cin>>N>>V…...

超越链端:Web3的无边界技术革命
Web3,作为互联网技术的第三代变革,正以其去中心化、开放透明的特性,重新定义着我们的数字生活。在这一背景下,“链端”概念逐渐成为热点,意味着我们不仅仅局限于区块链技术本身,而是探索其在更广泛领域的应…...

127. Go反射基本原理
文章目录 反射基础 - go 的 interface 是怎么存储的?iface 和 eface 的结构体定义(runtime/iface.go):_type 是什么?itab 是什么? 反射对象 - reflect.Type 和 reflect.Value反射三大定律Elem 方法reflect.…...

提高PDF电子书的分辨率
解决方法出处 1. 安装ImageMagick brew install imagemagick brew install ghostscript2. 按流程进行 convert -density 600 your_pdf_filename.pdf output-%02d.jpg convert output*.jpg -normalize -threshold 80% final-%02d.jpg convert final*.jpg my_new_highcontras…...

Spring Cloud全解析:注册中心之zookeeper注册中心
zookeeper注册中心 使用zookeeper作为注册中心就不需要像eureka一样,在写一个eureka-server的服务了,因为zookeeper本身就是一个服务端,只需要编写需要进行服务注册的客户端即可 依赖 <!-- zookeeper 注册中心 --> <dependency&g…...

解决戴尔台式电脑休眠后无法唤醒问题
近期发现有少量戴尔的台式机会有休眠后无法唤醒的问题,具体现象就是电脑在休眠后,电源指示灯以呼吸的频率闪烁,无论怎么点鼠标和键盘都没有反应,并且按开机按钮也没法唤醒,只能是长按开机键强制关机再重启才行…...

MySQL运维-分库分表
介绍 问题分析 拆分策略 垂直拆分 水平拆分 实现技术 Mycat概述 介绍 概念介绍 Mycat配置 schema.xml schema标签 schema标签(table) datanode标签 datahost标签 rule.xml sever.xml system标签 user标签 Mycat分片 分片规则-范围 分片规则-取模 分…...

AGX orin硬件设计
AGX orin简介 从硬件组成来说,AGX orin可以分为核心板和扩展板。 核心板 核心板就是英伟达原装板卡,如下图所示: 核心板分为32G内存版本和64内存版本,两个版本除去内存不同之外,CPU也略有差异。核心板通过…...

AI大模型开发——2.深度学习基础(1)
学习大模型开发之前,我们需要有足够的储备知识,类似于基础的python语法相信大家也都是十分熟悉了。所以笔者也是考虑了几天决定先给大家补充一些深度学习知识。 首先问大家一个问题,学习大模型之前为什么要先学习深度学习知识呢? …...

go语言day22 gin-vue-admin全栈项目的依赖安装
flipped-aurora/gin-vue-admin: 🚀ViteVue3Gin的开发基础平台,支持TS和JS混用。它集成了JWT鉴权、权限管理、动态路由、显隐可控组件、分页封装、多点登录拦截、资源权限、上传下载、代码生成器【可AI辅助】、表单生成器和可配置的导入导出等开发必备功能…...

PHP之docker学习笔记
Docker学习笔记 前言: 之前学过一遍忘了 那就再来一遍没啥好说的就是可以直接构建一个环境 然后方便部署官网 http://www.docker.com仓库 https://hub.docker.comDocker的基本组成 镜像 容器 仓库 安装与卸载 卸载 sudo yum remove docker \docker-client \dock…...

基于树莓派4B与STM32的UART串口通信实验(代码开源)
在现代嵌入式系统中,树莓派和STM32的结合使用已成为一种流行趋势,它们各自承担不同的角色,实现优势互补。树莓派以其强大的计算能力处理复杂算法,而STM32则以其高效的控制能力执行实际的硬件操作。本文将详细介绍如何实现基于树莓…...

【云服务器系列】基于华为云OBS实现Picgo和Typora的完美融合
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

IIC协议
一、IIC协议 1.1 IIC协议概述 IIC全称Inter-Integrated Circuit (集成电路总线) 是由PHILIPS(飞利浦)公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。IIC属于半双工同步通信方式 特点 简单性和有效性。 由于接口直接在组件之上,…...

如何在linux系统上部署nginx
1)首先去 nginx.org/download 官网下载你所需要的版本 我这里是下载的 nginx-1-23-3.tar.gz 2)然后执行 yum -y install lrzsz 安装文件上传软件 执行 rz 选择你下载nginx的位置进行上传 yum -y install lrzsz 3)执行 tar -zxvf nginx-1.23…...

香港网站服务器抵御恶意攻击的一些措施
香港网站服务器因为在互联网中扮演着重要的角色,因此也在面临着网络中各种恶意攻击的威胁,为了确保香港网站服务器的安全和稳定运行,可以通过安全措施来进行防御,本文就来分享一些香港网站服务器来抵御恶意攻击的关键措施。 一、网…...

实战:docker部署filesite.io完美解决家庭相册需求-2024.8.10(测试成功)
https://wiki.onedayxyy.cn/docs/filesite.io-photot-install-full...

美团到店面经
redis中大key引起的问题 1、阻塞请求 Big Key对应的value较大,我们对其进行读写的时候,需要耗费较长的时间,这样就可能阻塞后续的请求处理。Redis的核心线程是单线程,单线程中请求任务的处理是串行的,前面的任务完不成…...

【CSS入门】第五课 - font字体
这一节,我们说一说font这个字体。做网页开发,网页中几乎不可能没有文字的,为了使网页更漂亮,用户体验更好。人们可算是绞尽脑汁,其中一部分就是在字体上下的大功夫。 接下来,我们学习一下,font…...

STM32-门电路-储存器-寄存器-STM32f1-MCU-GPIO-总线-keil5-点led-寄存器编程
1、门电路 门电路组成简单加法器: 二进制对电路的影响: 0和1代表无和有; 以下图例,演示与门:左1右1输出1; 电平标准:使用不同的电压表示数字0和1; 高电平:1࿱…...

【动态规划算法题记录】343. 整数拆分 | 96.不同的二叉搜索树
整数拆分 题目🔗 题目描述 给定一个正整数 n ,将其拆分为 k个正整数的和(k > 2),并使这些整数的乘积最大化。 返回你可以获得的最大乘积 。 思路分析 dp数组含义:dp[i]表示整数i拆分后的最大乘积。…...

网页上预览Excel文件
如何运行: 需要发布在服务器 如Tomcat 实例图片: 需要展示的文件: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>excel预览</title><link rel"stylesheet" href"…...

Unity射击游戏开发教程:(31)制造一定追踪行为的敌人
在本文中,我们将介绍如何在两种敌人行为之间切换。本文是前两篇文章的延续,分别介绍了敌人躲避玩家射击以及敌人不断旋转并向玩家射击的情况。我只是介绍如何在这两种行为之间进行转换。 这种新的敌人行为的目标: 当不开火时,敌人可以躲避玩家的射击。射击时,敌人无法躲避…...

springboot mybatis plus 固定查询条件及可选查询条件的组合查询,使用QueryWrapper.and()来解决。
1、我们在写查询SQL的时候,经常会碰到,比如,同一个类别下的某一个编号的物料信息,或者是同一批次的物料库存问题等等。 所属类别fid物料编号bm物料批次pc110.01.0220240807110.01.0320240807 210.02.0120240805 2、那么我…...

使用ollama取代openai的api进行graphRAG失败记录
pip install ollama pip install langchain_ollama graph_documents llm_transformer.convert_to_graph_documents(split_documents) print(graph_documents) 偶尔会成功,但是大部分是失败的: 报错记录如下,暂时没想到好的办法ÿ…...