RabbitMq 【学习笔记】

1.消息队列 1.1 MQ的相关概念 1.1.1 什么是MQ MQ(message queue),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,不用依赖其他服务。 1.1.2 为什么要用MQ 流量消峰 举个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正常时段我们下单一秒后就能返回结果。但是在高峰期,如果有两万次下单操作系统是处理不了的,只能限制订单超过一万后不允许用户下单。使用消息队列做缓冲,我们可以取消这个限制,把一秒内下的订单分散成一段时间来处理,这时有些用户可能在下单十几秒后才能收到下单成功的操作,但是比不能下单的体验要好。 应用解耦 以电商应用为例,应用中有订单系统,库存系统,物流系统,支付系统。用户创建订单后,如果耦合调用库存系统,物流系统,支付系统,任何一个子系统出了故障,都会造成下单操作异常。当转变成基于消息队列方式后,系统间调用的问题会减少很多,比如物流系统因为发生故障,需要几分钟来修复,在这几分钟的时间里,物流系统要处理的内存被缓存在消息队列中,用户的下单操作可以正常完成。当物流系统恢复后,继续处理订单信息即可,中单用户感受不到物流系统的故障,提示系统的可用性 3.异步处理 有些服务间调用是异步的,例如A调用B,B需要花费很长时间执行,但是A需要知道B什么时候可以执行完,以前一般有两种方式,A过一段时间去调用B的查询Api查询。或者A提供一个callback api,B执行完之后调用api通知A服务。这两种方式都不是很优雅,使用消息总线,可以很方便解决这个问题,A调用B服务后,只需要监听B处理完成的消息,当B处理完成后,会发送一条消息给MQ,MQ会将此消息转发给A服务,这样A服务既不用虚幻调用B的查询API,也不用提供callback api。同样B服务也不会做这些操作,A服务还能及时的得到异步处理成功的消息 1.1.3 MQ的分类 1.ActiveMQ 优点:单机吞吐量万级,时效性 ms 级,可用性高,基于主从架构实现高可用性,消息可靠性较低的概率丢失数据 缺点:官方社区现在对 ActiveMQ 5.x 维护越来越少,高吞吐量场景较少使用。 2.Kafka 大数据的杀手锏,谈到大数据领域内的消息传输,则绕不开 Kafka,这款为大数据而生的消息中间件,以其百万级 TPS 的吞吐量名声大噪,迅速成为大数据领域的宠儿,在数据采集、传输、存储的过程中发挥着举足轻重的作用。目前已经被 LinkedIn,Uber, Twitter, Netflix 等大公司所采纳。 优点: 性能卓越,单机写入 TPS 约在百万条/秒,最大的优点,就是吞吐量高。时效性 ms 级可用性非常高,kafka 是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用,消费者采用 Pull 方式获取消息, 消息有序, 通过控制能够保证所有消息被消费且仅被消费一次;有优秀的第三方 Kafka Web 管理界面 Kafka-Manager;在日志领域比较成熟,被多家公司和多个开源项目使用;功能支持:功能较为简单,主要支持简单的 MQ 功能,在大数据领域的实时计算以及日志采集被大规模使用 缺点:Kafka 单机超过 64 个队列/分区,Load 会发生明显的飙高现象,队列越多,load 越高,发送消息响应时间变长,使用短轮询方式,实时性取决于轮询间隔时间,消费失败不支持重试;支持消息顺序,但是一台代理宕机后,就会产生消息乱序,社区更新较慢; 3.RocketMQ RocketMQ 出自阿里巴巴的开源产品,用 Java 语言实现,在设计时参考了 Kafka,并做出了自己的一些改进。被阿里巴巴广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog 分发等场景。 优点:单机吞吐量十万级,可用性非常高,分布式架构,消息可以做到 0 丢失,MQ 功能较为完善,还是分

前端开发是随着互联网的发展而逐渐兴起的一种新的开发领域。它一直在不断地发展和演变,经历了许多重要的里程碑事件和技术革新,下面就来回顾一下前端开发的历程和发展趋势。

一、Web 1.0时代 1990年代末到2000年代初,Web 1.0时代是Web发展的初期阶段,这个阶段的Web界面设计以简单的文本和图像为主,用户的互动性和用户体验都很低。在这个时代,浏览器的前端技术主要是基于HTML和CSS的,HTML指的是超文本标记语言,而CSS则指的是层叠样式表。由于这些技术的简单性,前端开发者往往需要手动编写HTML和CSS代码,并进行基本的样式设计。 二、Web 2.0时代 随着Web 2.0时代的到来,互联网用户的需求和期望发生了很大的变化,需要更多的用户个性化、互动性和响应速度。在这个时代,动态Web应用程序逐渐兴起,JavaScript成为浏览器端的编程语言,并出现了类似于Ajax和jQuery等革命性的技术,这极大地提高了前端开发的效率和可扩展性。 三、响应式Web设计 2010年,随着移动互联网的快速崛起,Web应用程序的开发也面临了巨大的挑战。这时,响应式Web设计技术的出现,逐渐解决了Web应用程序跨设备之间的适应性问题。响应式Web设计是一种自适应布局技术,可以根据用户所使用的设备和屏幕大小,实现自动调整页面布局的效果。 四、前端框架 随着前端技术的不断发展,出现了许多前端框架,如Angular.js、React.js和Vue.js等。这些框架提供了更加强大的前端工具库和开发工具,可以处理复杂的Web应用程序,使得前端开发变得更加高效和规范化。 五、前端工程化 随着Web应用程序越来越复杂,前端项目的管理变得越来越复杂,这时候前端工程化就出现了。前端工程化指将前端开发的流程进行标准化和自动化,通过前端自动化构建工具,如webpack、gulp等,可以使前端开发变得更加便捷和规范化。同时,前端工程化也利用持续集成和自动化测试,实现前端代码的自动化发布,提高开发的质量和速度。 六、Web组件化 Web组件化将前端开发分解为多个可重用和独立的组件,在组件之间建立松散的耦合,从而提高了前端应用的可维护性和可扩展性。Web组件化的技术包括自定义元素、Shadow DOM、模板、事件和属性等,这些技术可以帮助前端工程师创建功能和风格独立的可重用组件。 综上所述,前端开发已经成为Web应用程序开发的重要组成部分,并且在技术、工具和架构上不断创新和演进。在未来,随着Web技术的不断推进,前端开发 前端开发是近些年来发展最为迅猛的IT工作领域之一,大大改善了Web产品的用户体验、交互效果、可访问性和可维护性,成为了现代Web应用开发的重要组成部分。下面将从多个方面介绍前端在Web应用中的重要地位。 一、用户体验和交互效果 在Web应用程序中,前端开发最大的作用是改善用户体验。对于Web用户来说,最重要的是用户体验和操作效率。而前端开发,尤其是JavaScript的出现,使得Web应用程序能够具有更强的交互性和动态效果。前端开发人员可以运用CSS、HTML、JavaScript、JQuery等技术实现更加复杂和炫目的交互效果。比如:对用户的表单输入进行实时验证,让输入错误得到即时提示。开发人员可以结合HTML5、CSS和JavaScript来制作出炫目的前端效果,例如重力感应、拖拽、动态响应布局等等。 二、页面加载速度 在浏览网页时,用户不会愿意浪费时间等待页面加载。如果页面加载速度过慢,用户通常会选择关闭该页面并访问其他网站。在这点上,前端开发是非常重要的。就算后端开发写的代码是再好也很难从速度上满足用户的需求。因为前端开发可以针对不同的用户设备和网络状况,对页面进行优化,如图像压缩、代码压缩、资源合并、静态资源的CDN加速等等。这些优化都有助于提高页面的加载速度和最终的网站性能,让用户更快地得到响应和页面内容。 三、移动设备适配 随着移动互联网和移动设备的普及,对于前端开发来说,移动设备适配也成为了一项重要任务。由于移动设备的多样性,前端界面的布局和显示在不同设备之间通常会出现很大的差异。前端开发工程师必须使用响应式Web设计、基于viewport的布局等技术,确保Web应用程序在不同的屏幕大小和设备类型上表现一致,并且仍然具有优秀的访问体验。好的移动设备适配可以让用户获得更好的体验,提高用户留存和忠诚度,让产品更具市场竞争力。 四、跨浏览器和跨设备支持 由于用户使用不同的浏览器和操作系统访问Web,前端开发的一个重要任务是要确保应用程序的跨平台和跨浏览器支持。这不仅需要使用W3C标准的HTML、CSS和JavaScript技术,更需要考虑到历史遗留问题,兼容不同的浏览器和设备。同时,前端还需要关注辅助技术,如屏幕阅读器和语音输入,确保访问者无论身处何地,都能得到良好的体验。 五、可访问性和SEO优化 Web应用程序的可访问性和SEO优化也是前端非常重要的作用之一。通过HTML的semantic元素、HTML tag、ARIA标准等机制,将Web应用程序标记为,可以方便地被屏幕阅读器等辅助技术访问。合理的结构化信息在浏览器、搜索引擎等平台

Spring boot相同配置属性优先级

在Spring Boot 中,可以通过 application.properties(或 application.yml)文件来配置应用的属性。此外,还可以通过使用命令行参数、操作系统环境变量和外部文件等方式覆盖 application.properties 中的属性值,例如使用 --spring.config.location 参数指定外部的配置文件。 对于 application.properties 和用户指定的配置文件,配置项相同时,优先级如下: 1. 命令行参数和操作系统环境变量的优先级最高,会覆盖其他的属性值。例如: java -jar myproject.jar --server.port=9090 这里设置了 server.port 属性为 9090,会覆盖 application.properties 中配置的相同属性。 2. 在项目的外部文件中指定的配置文件优先于 application.properties,即当外部文件中和 application.properties 中同时存在相同的配置项时,以外部文件中的配置为准。例如: java -jar myproject.jar --spring.config.location=classpath:/custom/application.properties 这里指定的配置文件路径为 classpath:/custom/application.properties,在此文件中指定的配置项将会覆盖 application.properties 中的相同配置项。 3. 配置文件中的属性值可以被环境变量所覆盖。此时,环境变量的名称需使用 SPRING_APPLICATION_JSON 作为前缀,并使用 JSON 格式来指定属性值。例如: export SPRING_APPLICATION_JSON='{"server.port":"9090"}' java -jar myproject.jar 这里设置了 SPRING_APPLICATION_JSON 环境变量,将 server.port 属性设置为了 9090,会覆盖 application.properties 中配置的相同属性。 4. 在 application.properties 中配置的属性值优先级最低,也就是当其他方式均未指定相应的配置项时,会使用 application.properties 中指定的值。 注意:这里所说的“优先级”仅针对相同的配置项而言。对于不同的配置项,各自的优先级取决于其被读取的顺序以及使用的默认值等。

细粒度分类:RA-CNN论文笔记——Look Closer to See Better: Recurrent Attention Convolutional Neural Network

细粒度分类:RA-CNN论文笔记——Look Closer to See Better: Recurrent Attention Convolutional Neural Network for Fine-grained Image Recognition 综述主要思想网络的主要流程二维脉冲函数——注意力掩模裁剪放大 损失函数尺度内分类损失尺度间排序损失 训练流程APN参数优化原理精度对比 综述 论文题目:《Look Closer to See Better: Recurrent Attention Convolutional Neural Network for Fine-grained Image Recognition》 会议时间:IEEE Conference on Computer Vision and Pattern Recognition 2017 (CVPR, 2017) 论文地址:https://openaccess.thecvf.com/content_cvpr_2017/papers/Fu_Look_Closer_to_CVPR_2017_paper.pdf 源码地址(PyTorch版本):https://github.com/jeong-tae/RACNN-pytorch 针对领域:细粒度图像分类(FGVC) 关键词:注意力机制、细粒度识别、多尺度区域定位 源码笔记链接:https://blog.csdn.net/qq_50001789/article/details/131352932?spm=1001.2014.3001.5501 主要思想 细粒度识别任务主要在于有区分度区域的定位和细粒度特征的学习,现有的方法主要是独立地解决这两个问题,在区域定位的学习中,传统的细粒度识别算法又需要额外的人工标注,这样做不仅工作量大,而且容易受到主观因素的干预。作者发现区域定位和特征学习可以相互促进,提出了循环注意力网络,网络的核心结构是注意力建议子网络(APN模块),只需要提供图片的标签,就可以让该子网络迭代产生由粗到细的多尺度注意力区域,进一步将其裁剪放大,学习放大后的微小差异,可以有效地提高细粒度特征提取的能力;并且提出了利用尺度内分类损失来优化特征提取能力、利用尺度间排序损失来优化区域定位能力,并且还提出了交替学习的训练策略,让特征提取学习和区域定位学习互相促进,交替优化。 首先原图像输入到网络中,作为粗尺度,经过注意力网络,得到注意力区域,进一步将该区域裁剪放大,得到精细尺度。 网络的主要流程 具体流程见下图: 首先,先将原图像经过经典的特征提取网络(流程图中的b1、b2、b3)进行提取特征,得到特征图,具体公式如下: P ( X ) = f ( W c ∗ X ) P(X)=f(W_c*X) P(X)=f(Wc​∗X) 其中 W c W_c Wc​表示特征提取网络的参数, ∗ * ∗表示卷积运算, X X X表示原图像

【Simulink】报错:Size mismatch (size [2 x 1] ~= size [1 x 1]). The size to the left is the size of the l

版本:Matlab2019b 背景信息: 我在 Simulink 里面的 stateflow 里面,写了一个 Matlab Function,参照了实验室往届师兄的代码,同样都是单输入单输出函数,但是用的变量大小不一样。 报错信息: 直接套用函数果然出现了问题。 Simulink does not have enough information to determine output sizes for this block. If you think the errors below are inaccurate, try specifying types for the block inputs and/or sizes for the block outputs. Component:Stateflow | Category:Coder error Size mismatch (size [2 x 1] ~= size [1 x 1]). The size to the left is the size of the left-hand side of the assignment.

deepin搭建cocos 2dx 4.0 开发环境

一、下载cocos源码 下载cocos 2dx 源码。下载完成后,将新增cocos2d-x-4.0.zip的问题,复制到工作目录。 二、编译源码 1、在工作目录解压源码。 unzip -x cocos2d-x-4.0.zip 2、安装开发依赖 cocos自带了依赖安装工具:install-deps-linux.sh。 但是其强制安装, 可能导致安装版本存在问题, 对其做如下修改: #!/bin/bash echo "This Shell Script will install dependencies for cocos2d-x" echo -n "Are you continue? (y/n) " read answer if echo "$answer" | grep -iq "^y" ;then echo "It will take few minutes" else exit fi sudo apt-get update # run 32bit applicatio: needed for lua relase mode as luajit has 32bit version # https://askubuntu.com/questions/454253/how-to-run-32-bit-app-in-ubuntu-64-bit sudo dpkg --add-architecture i386 DEPENDS='libc6:i386 libncurses5:i386 libstdc++6:i386' DEPENDS+=' libx11-dev' DEPENDS+=' libxmu-dev' DEPENDS+=' libglu1-mesa-dev' DEPENDS+=' libgl2ps-dev' DEPENDS+=' libxi-dev' DEPENDS+=' libzip-dev' DEPENDS+=' libpng-dev' DEPENDS+=' libcurl4-gnutls-dev' DEPENDS+=' libfontconfig1-dev' DEPENDS+=' libsqlite3-dev' DEPENDS+=' libglew-dev' DEPENDS+=' libssl-dev' DEPENDS+=' libgtk-3-dev' DEPENDS+=' binutils' sudo apt-get install --yes $DEPENDS 然后安装: cd cocos2d-x-4.

基于蒙特卡洛 8PSK 和和和 16PSK 调制(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭:行百里者,半于九十。 📋📋📋本文目录如下:🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 ​ 💥1 概述 光载无线通信 (radio over fifiber, RoF) 应用了高频无线电波和光纤低损耗的特点, 实现了高速大容 量的宽带传输 , 并能够充分发挥几十的频谱资源 , 具有较低的传输损耗、巨大的带宽、抵抗电磁干扰等 优势, 是近年来的研究热点。在数字通信技术中 , 其信号调制技术在复杂电磁环境中的通信对抗、干扰识别、无线电频谱监测等领域中尤为重要 [1] 。为了满足用户日益增长的大容量需求, 多进制相移键控(MPSK) 调制具有较高的频谱效率和良好的抗噪声性能, 在相同的带宽下 , 能够得到比二进制信号更大的通信容量, 而得到广泛的应用。 基于蒙特卡洛分别进行 8 进制相移键控 (eight hexadecimal phase shift keying, 8PSK) 与 16 进 制相移键控 (sixteen hexadecimal phase shift keying, 16PSK) 调制。 📚2 运行结果 ​ 部分代码: % ********************* Initialization ***********************************%

Qt读写csv文件

第一种办法:使用QStringList及QTextStream实现CSV文件读写 适用于:对于小型数据量的CSV文件。 优点: 实现简单:使用QStringList和QTextStream实现CSV读写操作非常简单,能够快速上手;代码量少:相对其他实现方式,该方法实现的代码量较少。 缺点: 写入数据顺序不能改变。当数据量大的时候,使用该方法逐行写入文件,文件I/O开销相对较大,导致写入速度变慢。同时,该实现方式要求数据顺序不能改变,因为每行数据只存储在单独的QStringList中。 //读取CSV文件 先使用readLine读取每行数据,再使用split进行分割,得到QStringList 数据。 bool readCsv(QString filePath, QList<QStringList>& data) { QFile file(filePath); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return false; QTextStream stream(&file); while (!stream.atEnd()) { QString line = stream.readLine(); QStringList row = line.split(',', Qt::SkipEmptyParts); data.append(row); } file.close(); return true; } /写入CSV文件 使用<<运算符进行写操作,并写入分隔符“,”和换行符“\n”。 bool writeCsv(QString filePath, QList<QStringList>& data) { QFile file(filePath); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return false; QTextStream stream(&file); for (int i = 0; i < data.size(); i++) { QStringList row = data.

华为OD机试(含B卷)真题2023 精简版,50道100分题目。如果距离机考时间不多了,就看这个吧

点击下述地址订阅对应语言专栏,不要看错哦~~~~ 🥂🥂点击去订阅 Python 语言题解🥂🥂 🥂🥂点击去订阅 JAVA 语言题解🥂🥂 🥂🥂点击去订阅 C++ 语言题解🥂🥂 🥂🥂点击去订阅 C 语言 题解🥂🥂 🥂🥂点击去订阅 JS 语言题解🥂🥂 🥂🥂点击去订阅 GO 语言题解🥂🥂 华为OD机试题库,橡皮擦整理 关于华为od题库的说明(2023-06-23 更新本文) 关于订阅华为OD机试题库的后续问题 华为OD机试 真题,新题库,50到100分题 华为OD机试 6 大宝典,包含题库完整真题 关于华为OD的更多疑问,可查看下述专栏 华为OD有问必答 关于华为od题库的说明(2023-06-23 更新本文) 2023年参加华为OD机试,你收到的短信邀请链接中提及的应该是 2022Q4 或者 2023Q1 都是A卷。 5月1日之后,有部分朋友收到的是 B 卷,那么恭喜你看到本文了,快抓紧刷吧。 B 卷新题库正在更新中…… O(∩_∩)O 只要是这样的试卷标题,那表示你使用的就是华为OD的新题库了。 华为机试有三道题,前2道100分,第3道200分,总分是 400 分。 随着时间的积累,题库内容越来越大,很多朋友现在的疑问如下: 哪些是最新题,哪些该优先刷,哪些题简单,哪些题难,题目的分数是多少 基于上述需求,橡皮擦把咱们的题库进行了一次大筛选。 关于订阅华为OD机试题库的后续问题 1. 一次订阅,终身使用,后续所有更新都能看到; 2. 每篇题解都包含题目,测试示例,思路,代码等内容,如需要订阅之后可以单独讲解。 华为OD机试 真题,新题库,50到100分题 本篇博客为大家展示100分【必拿下】的基础题。 如果你距离 Od 机考时间不多了,那就刷这个精简版本的题库吧。 每个题解都由6大常见编码语言实现,订阅之后,可以私信我催更。 还可以一对一进行OD辅导,如果机考分数不理想,全国各地部门都可对接,捞人(独家)。 B卷题目更新地址参考 【喜报】华为OD统一考试(B卷)题库清单(已收录150题),更快,更全的 B 卷题库大纲 😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀

OpenCV——点云投影到图像中

读取一张照片和一张 pcd, 根据标定的内参和外参,将点云投影到图像中,用于判断雷达相机外参标定是否准确。 #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/calib3d/calib3d.hpp> #include <opencv2/highgui/highgui.hpp> #include <pcl/point_types.h> #include <pcl/point_cloud.h> #include <pcl/io/pcd_io.h> #include <pcl/filters/filter.h> #include <iostream> int main(int argc, char** argv) { // read a image and a pcd cv::Mat image_origin = cv::imread("/media/data/temp/image/0.jpeg"); pcl::PointCloud<pcl::PointXYZI>::Ptr cloud_origin(new pcl::PointCloud<pcl::PointXYZI>); pcl::PointCloud<pcl::PointXYZI>::Ptr cloud_withoutNAN(new pcl::PointCloud<pcl::PointXYZI>); pcl::io::loadPCDFile<pcl::PointXYZI> ("/media/liuzhiyang/data/temp/pcd/0.pcd", *cloud_origin); std::vector<int> indices; pcl::removeNaNFromPointCloud(*cloud_origin, *cloud_withoutNAN, indices); std::vector<cv::Point3f> pts_3d; for (size_t i = 0; i < cloud_withoutNAN->size(); ++i) { pcl::PointXYZI point_3d = cloud_withoutNAN->points[i]; if (point_3d.

【ensp的OSPF多区域配置】

目录 一、区域 二、ospf配置 1.创建网络拓扑 2. 配置接口信息 3.配置ospf (1) 内部路由配置(R2、R3) (2)区域边界路由器 (简称ABR,R1) 4.测试 三、结论 ensp是华为公司提供的一款模拟器,它可以在计算机上模拟出真实的华为网络设备,并支持OSPF协议的配置。OSPF(Open Shortest Path First)是一种开放式最短路径优先协议,它可以在计算机网络中找到最短路径。Ensp中可以使用OSPF协议来配置多区域网络,在配置过程中需要设置区域、区域边界路由器等参数,最终可以通过验证命令来检查配置是否正确。Ensp的OSPF协议模拟功能非常实用,可以帮助网络管理员在实际部署环境之前测试网络拓扑和路由配置,从而减少部署出现问题的风险。 一、区域 区域(area):一个OSPF网络可以划分为多个区域,其中必须有一个且是唯一的骨干区域。 分为: (1)骨干区域: 编号为0,或表示为IP地址0.0.0.0 (2)非骨干区域:除了骨干区域以外的,都是非骨干区域,编号为非零的正整数(如:1,2,3, ……)。 二、ospf配置 1.创建网络拓扑 在Ensp中创建您的网络拓扑,包括多个交换机和路由器 如下 2. 配置接口信息 【R3】 system-view interface LoopBack 0 ip address 3.3.3.3 32 quit interface g0/0/0 ip add 192.168.12.1 24 quit 【R1】 interface LoopBack 0 ip address 1.1.1.1 32 quit interface g0/0/1 ip address 192.168.12.2 24 quit interface g0/0/0 ip address 192.168.13.1 24 quit 【R2】 interface LoopBack 0 ip address 2.

渗透测试:详解sqlmap进行POST注入、基于insert的注入(以vulnhub靶机LampSecurity:CTF7为例)

目录 写在开头 漏洞发现 手工insert型的报错注入 sqlmap进行POST注入 总结与思考 写在开头 在上一篇对LampSecurity:CTF7进行打靶的时候,获得ssh的登录凭据是通过拿到apache的shell权限后登录mysql数据库,在数据库中找到了登录凭据。靶机地址、打靶过程详见: 红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub) 如果读者对这个靶机不敢兴趣,单纯想学习sql注入的知识,也可以继续往后看学习使用sqlmap进行POST注入和基于报错的insert型的手工注入。只不过可能读者就得自己寻找案例进行复现了。 上一篇博客中我们登录管理后台是通过8080端口的登录界面,利用SQL注入的万能密码登录成功。我们并没有对80端口进行渗透研究。同时80端口也存在一个注册和登录页面,这些地方也是有可能存在漏洞的。我们可以注册一个账号,然后研究后续的操作页面是否存在漏洞。 于是我试了试,发现一个确实有一个页面存在SQL注入,可以通过对一些文本框进行POST型的SQL注入,直接把数据库中储存的ssh凭据注入出来。注册一个账号之后,点击Resources——>Training——>Register即可 如下图就是存在SQL注入漏洞的界面: 漏洞发现 首先肯定要考虑,打靶过程中,漏洞是如何发现的。这里就是试出来的,看见输入框我们就可以输入单引号' ,看看回显会不会报错,如果出现有关sql的报错,那就说明我们输入的单引号参与了SQL的拼接,很有可能出现注入漏洞。如下图: 我们在每个输入框都输入单引号(Email行要求必须符合email格式),点击Register,看看有没有报错,根据报错信息寻找出现sql注入的位置,如下图: 还真报错了,看来确实存在SQL注入漏洞。根据这个报错信息我们还可以确认这是MySQL数据库,同时对应的SQL语句是insert型,另外基本每个文本框都可以进行注入。接下来我们开始手工测试。 手工insert型的报错注入 虽然sqlmap很强大,但工具终究知识工具,我们还是要深入理解漏洞的原理,才可以更深入的使用工具,不仅仅当脚本小子。于是我们就这个案例进行手工注入,研究insert语句相关的单引号闭合构造和基于报错的注入方式。首先我们先根据报错信息,看这个insert的语句: insert into payment set firstname=' 这里是我们填写First Name的位置 ',lastname = 'aaa'; 问题就在于我们如何将这里是我们填写First Name的位置改写为我们的payload,构造合理的闭合。如果我们在First Name的位置填写如下的字符串,即可构成闭合: a' or 此处填写我们想执行的语句 or ' 那么刚才的insert语句就会变为: insert into payment set firstname=' a' or 此处填写我们想执行的语句 or ' ',lastname = 'aaa'; 这样的话,就成功构造了闭合,问题就是我们想执行的语句如何填写,可以使用基于报错的注入,让报错回显当前的数据库database(),那么报错的函数就是: updatexml(1,concat(0x7e,database()),0) 这里0x7e是符号'~',具体updatexml相关的报错注入函数详见:SQL注入相关问题总结 完整的payload是: a' or updatexml(1,concat(0x7e,database()),0) or ' 因此,原来的insert语句被我们构造的payload拼接之后,就会形成如下的语句: insert into payment set firstname='a' or updatexml(1,concat(0x7e,database()),0) or '',lastname = 'aaa'; 理论知识就讲完了,接下来我们开始实践。首先按照刚才理论讲的,在First Name文本框中输入我们的payload,其他文本框随便填,如下图:

HTML5知识点总结 ---- HTML5简介、HTML5新增语义化标签(新增布局标签、状态标签、列表标签、文本标签)、新增表单功能、新增多媒体标签、新增全局属性和HTML5兼容性处理

目录 1. HTML5简介1.1 什么是HTML51.2 HTML5优势1.3 HTML5兼容性 2. 新增语义化标签2.1 新增布局标签2.2 新增状态标签2.2.1 meter标签2.2.2 progress标签 2.3 新增列表标签2.4 新增文本标签2.4.1 文本注音2.4.2 文本标记 3.新增表单功能3.1 表单控件新增属性3.2 input新增属性值3.3 form标签新增属性 4. 新增多媒体标签4.1 视频标签4.2 音频标签 5. 新增全局属性(了解)6. HTML5兼容性处理 1. HTML5简介 1.1 什么是HTML5 HTML5是新一代的HTML标准,2014年10月由万维网联盟(W3C)完成标准制定。官网地址: W3C提供: https://www.w3.org/TR/html/index.htmlWHATWG提供:https://whatwg-cn.github.io/html/multipage HTML5在狭义上是指新一代的HTML标准,在广义上是指整个前端。 1.2 HTML5优势 针对JavaScript,新增了很多可操作的接口。新增了一些语义化标签、全局属性。新增了多媒体标签,可以很好的替代flash。更加侧重语义化,对于SEO更友好。可移植性好,可以大量应用在移动设备上。 1.3 HTML5兼容性 支持Chrome、Safari、Opera、Firefox等主流浏览器。 2. 新增语义化标签 2.1 新增布局标签 标签名语义单/双标签header整个页面,或部分区域的头部 双双footer整个页面,或部分区域的底部双nav导航双article文章、帖子、杂志、新闻、博客、评论等双section页面中的某段文字,或文章中的某段文字(里面文字通常里面会包含标题)双aside侧边栏双main文档的主要内容 ( WHATWG 没有语义, IE 不支持),几乎不用双hgroup包裹连续的标题,如文章主标题、副标题的组合 ( W3C 将其删除)双 关于article和section: artical里面可以有多个section。section强调的是分段或分块,如果你想将一块内容分成几段的时候,可使用section元素。article比section更强调独立性,一块内容如果比较独立、比较完整,应该使用article元素。 2.2 新增状态标签 2.2.1 meter标签 语义:定义已知范围内的标量测量。也被称为gauge(尺度),双标签。例如:电量、磁盘用量等。常用值如下: 属性值描述high数值规定高值low数值规定低值max数值规定最大值min数值规定最小值optimum数值规定最优值value数值规定当前值 2.2.2 progress标签 语义:显示某个任务完成的进度的指示器,一般用于表示进度条,双标签,例如:工作完成进度等。常用值如下: 属性值描述max数值规定目标值value数值规定目标值 2.3 新增列表标签 标签名语义单/双标签datalist用于搜索框的关键字提示双details用于展示问题和答案,或对专有名词进行解释双summary写在details的里面,用于指定问题或专有名词双 <input type="

Mycat创建表ERROR 3009 java.lang.NullPointerException

Mycat创建表ERROR3009java.lang.NullPointerException 问题描述: 配置完Mycat正常启动,创建表 mycat报错: ERROR 3009 (HY000): java.lang.NullPointerException 查看日志/logs/mycat.log ERROR [Timer1] (io.mycat.backend.jdbc.JDBCHeartbeat.heartbeat(JDBCHeartbeat.java:123)) - JDBCHeartBeat error java.sql.SQLException: null, message from server: "Host 'Master' is not allowed to connect to this MySQL server" MySQL拒绝远程连接 解决方案: 给用户授权 #登录MySQL mysql -u root -p #登录mysql数据库 use mysql; update user Host set = '%' where User = 'root'; flush privileges;

在kali linux里使用DirBuster寻找敏感文件和目录

目录 1.概述2.实验前准备- 靶场-OWASP BWA3. 爆破字典准备4. 在kali linux中用图形界面打开dirbuster5. 在OWASP DirBuster中设置参数6. 查看Results选项卡,如下图示:6.1选项卡中的DIR6.2选项卡中的File6.3选项卡中的Response6.4选项卡中的Size6.5结果综述 7. 总结 1.概述 DirBuster, buster英[ˈbʌstə®] n. 破坏者; 程序DirBuster使用Java编写。所有使用Java语言编写的程序要想正常使用,基本都需要安装JDK(JDK, Java Development Kit 实际上需要用的是JRE, Java Runtime Environment,但是JDK包含了JRE),并且要配置环境变量。 DirBuster是一个多线程的应用程序,设计用于暴力破解Web 应用服务器上的目录名和文件名的工具。 更加通俗的说法是:DirBuster就是用于探测web目录结构和隐藏的敏感文件。 将在本节中使用它来搜索特定的文件和目录列表。 要使用一个文本文件,其中包含要用DirBuster来查找的文件列表。创建一个包含以下内容的文本文件dir_dictionary.txt 2.实验前准备- 靶场-OWASP BWA 在VMware上打开OWASP_Broken_Web_App,打开后,如下图示,我获得的靶场web地址是http://192.168.17.130,可以参考自己获得的IP进行实验。 3. 爆破字典准备 在kali linux的指定目录下新建dir_dictionary.txt并输入参数,操作如下: dir_dictionary.txt是爆破目录的字典,只要字典足够好(量大质量高),没有网站破不了!本次实验dir_dictionary.txt中的内容是: info server-status server-info cgi-bin robots.txt phpmyadmin admin login 4. 在kali linux中用图形界面打开dirbuster 5. 在OWASP DirBuster中设置参数 DirBuster 窗口中,Target URL:输入要探测网站的地址;需要注意的是这个地址要加上协议,看网站是http还是https。 本实验中将目标 URL 设置为http://192.168.17.130:80/Work Method:选择工作方式;一个是get请求,一个是自动选择。一般选auto switch的自动选择,它会自行判断是使用head方式或get方式。Number of Threats,是选择扫描线程数,一般为30。电脑配置好的可根据情况选择,本次实验将线程数设置为20,大家可自行设置,看看不同设置后运行的效果!select scanning type:是选择扫描类型。list based brute force是使用字典扫描的意思,勾选上。随后browse选择字典文件,可用自己的,也可用dirbuster自己的。pure brute force是纯暴力破解的意思。File with list of dirs/files选择基于列表的暴力破解,然后单击“Browse浏览”。在浏览窗口中,选择刚刚创建的文件 dir_dictionary.

手动识别 SQL 注入(获取所有用户名)

手动识别 SQL 注入(获取所有用户名) 大多数现代 Web 应用程序都实现某种数据库,而 SQL 是最常用的查询数据库的语言。 SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作 1 环境准备 1.开启OWASP靶机和Kali虚拟机 2.kali中登陆dvwa,进入 SQL Injection(SQL 注入)页面,安全等级调为low 2 手动识别 SQL 注入案例 1.通过输入一个数字来测试应用程序的正常行为。将用 户 ID 设置为 1,然后单击“提交”。 通过查看结果,可以说应用程序查询数据库以查看是否存在 ID 等于 1 的用户并返回该用户的 ID、名称和姓氏。(提交ID,查看显示的信息) 2.接下来,测试如果发送应用程序不期望的内容会发生什么。在文本框中输入 1’(1 和一个单撇号)并提交该 ID。 如以下屏幕截图所示,应用程序应响应错误,结果表明很可能这个应用程序很容易受到攻击。 3.返回 DVWA 的 SQL Injection 页面。 4.为了确保存在基于错误的 SQLi,尝试另一个输入:1’',这次没有错误。 这证实了应用程序中存在 SQLi 漏洞。 5.现在将执行一个非常基本的 SQLi 攻击。 在文本框中输入’ or ‘1’='1 并提交。(使得输入的条件为“true”,让数据库输出所有用户姓和名) 总结:上课认真听课多多练习,我的网络安全意识得到了进一步提高,学习方面也让我有了更深刻的了解。理解了这门课的重要性。 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;全新的 KaTeX数学公式 语法;增加了支持甘特图的mermaid语法1 功能;增加了 多屏幕编辑 Markdown文章功能;增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;增加了 检查列表 功能。 功能快捷键 撤销:Ctrl/Command + Z

【GeoDjango】conda环境下安装psycopy2版本问题

原文作者:我辈理想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 GeoDjango框架解析 【GeoDjango框架解析】配置geodjango开发环境 【GeoDjango报错处理】conda环境下安装psycopy2版本问题 文章目录 GeoDjango框架解析前言一、报错:OSError: /usr/lib/libgdal.so: undefined symbol: TIFFReadRGBATileExt, version LIBTIFF_4.0二、报错:OSError: /lib/x86_64-linux-gnu/libp11-kit.so.0: undefined symbol: ffi_type_pointer, version LIBFFI_BASE_7.0三、conda降版本 前言 在conda中安装psycopy2,一直不成功,查看相关博客的建议,使用命令conda install psycopg2安装。如果不成功,需要升级conda,命令conda update --all,然而升级或运行geodjango程序报错。 一、报错:OSError: /usr/lib/libgdal.so: undefined symbol: TIFFReadRGBATileExt, version LIBTIFF_4.0 查看conda更新的情况: conda list --revision 这一问题是版本问题,libtiff版本被升级了,可以使用conda降级 conda install -c anaconda libtiff==4.4.0 二、报错:OSError: /lib/x86_64-linux-gnu/libp11-kit.so.0: undefined symbol: ffi_type_pointer, version LIBFFI_BASE_7.0 查看conda更新的情况: conda list --revision 这一问题是版本问题,libffi版本被升级了,可以使用conda降级 conda install -c anaconda libffi==3.3 三、conda降版本 conda list --revision # 查看更新的版本,查看的是当前虚拟环境 conda install --rev 5 # 降至指定版本

Docker Desktop解决Creating “rootNode” subnodes问题

Windows/Mac启动Docker Desktop出现 Creating “rootNode” subnodes: constructing “BackendServices” in “rootNode”: doing migrations: reading actual settings: invalid character ‘/’ looking for beginning of value 解决方法: Windows用户删除C:\Users\<UserName>\AppData\Roaming\Docker Mac用户删除~/Library/Application Support/Docker 如果删除已上文件夹还不能启动 请尝试删除C:\Users\<UserName>\.docker\features.json

【Redis】多级缓存

目录 一、传统的缓存模型 二、多级缓存 一、传统的缓存模型 传统的缓存策略是请求到达Tomcat服务器,优先查询Redis,如果未命中则查询数据库 每个用户的请求都会进入Tomcat,但是Tomcat的性能远远不如Redis,导致Tomcat成为性能瓶颈;而且Redis缓存失效时也会对数据库产生冲击 二、多级缓存 多级缓存就是充分利用请求处理的每个环节,分别添加缓存,减轻Tomcat的压力提升性能,首先我们可以先从浏览器客户端进行缓存查询,如果没有则去nginx查询nginx的本地缓存,如果没有则通过Lua脚本编程去查询Redis,如果redis也未命中时则请求到达Tomcat服务器查询进程缓存,如果没有则最后查询数据库,此时大多数的压力都给到了nginx我们需要在nginx内部编程,所以此时我们可以将nginx部署成集群,准备一个单独的nginx做反向代理,代理到多个做缓存的nginx上

Verilog学习笔记(2):Modelsim 10.6安装

今天来安装Modelsim 10.6。 一、软件安装 打开文档里的setup,耐心等待。 设置好自己的目标位置。 第一个弹窗选择是否添加快捷方式 第二个弹窗如下 然后 安装成功 二、软件破解 MentorKG.exe和crack.bat文件复制到安装根目录win64pe目录下。 然后 粘贴后,点击crack文件运行,等待一段时间后会自己生成txt文件。另存到一个路径后, (win10电脑)win+s搜索编辑系统环境变量 将此路径添加为系统变量LM_LICENSE_FILE 如D:\modeltech_10.1a\LICENSE.TXT 验证是否成功破解:直接点开软件,没有要求给license那就成功了💕 破解完成,光速下机。 还可以参考:【FPGA——工具篇】:Modelsim SE-64 10.4下载、破解、安装过程