一、描述 TCP/IP 协议的层次结构,以及每一层中重要协议 TCP/IP(Transmission Control Protocol/Internet Protocol)是互联网的核心协议套件,它定义了在网络中进行通信的规则和标准。TCP/IP协议栈按照层次结构划分,每一层负责不同的功能,下面是TCP/IP协议的四个主要层次及其重要协议:
1. 网络接口层(Network Interface Layer):
- 功能:负责处理网络物理接口和数据链路层的细节,将数据帧从一台主机传输到另一台主机。
- 重要协议:Ethernet(以太网)、Wi-Fi、PPP(点对点协议)等。
2. 网络层(Internet Layer):
- 功能:负责在不同的网络之间进行数据包的路由和转发,提供主机之间的逻辑通信。
- 重要协议:IP(Internet Protocol,网络协议)、ICMP(Internet Control Message Protocol,Internet控制消息协议)、ARP(Address Resolution Protocol,地址解析协议)等。
3. 传输层(Transport Layer):
- 功能:负责在网络中建立端到端的数据传输连接,确保数据的可靠传输和有序交付。
- 重要协议:TCP(Transmission Control Protocol,传输控制协议)、UDP(User Datagram Protocol,用户数据报协议)等。
4. 应用层(Application Layer):
- 功能:提供应用程序与网络之间的接口,支持特定的网络应用和服务。
- 重要协议:HTTP(Hypertext Transfer Protocol,超文本传输协议)、FTP(File Transfer Protocol,文件传输协议)、SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)、DNS(Domain Name System,域名系统)等。
这些层次构成了TCP/IP协议栈,通过分层的结构,TCP/IP协议栈能够实现网络通信的灵活性、可扩展性和互操作性。不同层次上的协议相互配合,完成了数据在网络中的传输和处理。
二、测试的数据你放在哪? 测试数据存放总结:
1.对于账号密码,这种管全局的参数,可以用命令行参数,单独抽出来,写的配置文件里(如 ini)
2.对于一些一次性消耗的数据,比如注册,每次注册不一样的数,可以用随机函数生成
3.对于一个接口有多组测试的参数,可以参数化,数据放 yaml,text,json,excel 都可以
4.对于可以反复使用的数据,比如订单的各种状态需要造数据的情况,可以放到数据库,每次数据 初始化,用完后再清理
5.对于邮箱配置的一些参数,可以用 ini 配置文件
简介:PyQT5开发常用知识,零基础上手,需配合我之前写的博文,配置好QT设计工具和ui文件转py文件的工具。博文为:使用Python PyQt5实现一个简单的图像识别软件;页面效果如下:
1.设计菜单栏
Containers——>Tab Widget;
2.横向排布 可以自动水平对齐
3.文本框和选择框
4.日期输入框和按钮
5.布局技巧 巧用空Label
6.滚动条设置 Container——>Scroll Area
7.显示文本或图片的Label控件
8.生成.py文件 将上面的ui文件保存后,使用PyUIC将ui文件转变成python代码;
9.通过代码来对ui进行细致修改
(1)设置Tab顺序
设置优先显示的tab,代码如下:
self.tabWidget.setCurrentIndex(0) 表示优先显示第一个Tab;
(2)设置Label里的文本自动换行且从左上角开始排列:
self.label_5.setWordWrap(True) self.label_5.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) 设置后的效果如下:
可以看到已经不再是居中的形式;
(3)PyQT5 Label设置文本对齐方式
self.label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter) (4)PyQT5 QTableWidget 设置单元格内文本的居右对齐
x = QTableWidgetItem('Test') x.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) (5) 给Label设置边框
self.label.setStyleSheet("border-width: 1px;border-style: solid;boder-color: rgb(0,0,0);") (6)设置纵向滚动条
self.scrollArea = QtWidgets.QScrollArea(Form) self.scrollArea.setGeometry(QtCore.QRect(10, 60, 551, 221)) self.scrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) self.scrollArea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.scrollArea.setWidgetResizable(False) self.scrollArea.setObjectName("scrollArea") self.scrollAreaWidgetContents = QtWidgets.QWidget() self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 550, 3000)) self.scrollAreaWidgetContents.setMaximumSize(QtCore.QSize(1000, 4000)) self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") (7)设置日期 输入框
本文目录 PyQt5桌面应用系列前言为什么又是需求分析?PyQt5的界面设计元素界面设计元素分类 编译为Python代码使用转换命令行组合使用继承使用方式直接使用ui文件的方法 总结 PyQt5桌面应用系列 PyQt5桌面应用开发(1):需求分析 PyQt5桌面应用开发(2):事件循环 PyQt5桌面应用开发(3):并行设计 PyQt5桌面应用开发(4):界面设计 PyQt5桌面应用开发(5):对话框 PyQt5桌面应用开发(6):文件对话框 PyQt5桌面应用开发(7):文本编辑+语法高亮与行号 PyQt5桌面应用开发(8):从QInputDialog转进到函数参数传递 PyQt5桌面应用开发(9):经典布局QMainWindow PyQt5桌面应用开发(10):界面布局基本支持 PyQt5桌面应用开发(11):摸鱼也要讲基本法,两个字,16 PyQt5桌面应用开发(12):QFile与线程安全 PyQt5桌面应用开发(13):QGraphicsView框架 PyQt5桌面应用开发(14):数据库+ModelView+QCharts PyQt5桌面应用开发(15):界面动画 PyQt5桌面应用开发(16):定制化控件-QPainter绘图 PyQt5桌面应用开发(17):类结构+QWebEngineView 前言 经过需求分析、事件循环和并行设计的介绍,终于还是要写一篇界面设计的内容。很不情愿,因为我这个部分很不擅长,设计的界面很丑很丑。
其实丑并不可怕,关了灯都一样……
首先,我们再回到需求分析的话题。
为什么又是需求分析? 需求分析,这条内裤,始终是要穿上的。
那么界面设计的内裤大概是什么样的呢,有很多人是从美观的角度出发设计出漂亮的界面。我们搬砖的找了一堆支持的理论,还是只能设计出巨丑的界面。一般而言,我们是从用户体验的角度出发,结合软件需求分析的过程来确定界面。
从用户需求这里,基本上就能确定数据报表,从功能需求分析这里,就能确定用户交互。这两个部分最终构成用户界面的开发需求。
报表界面;交互界面。 等到报表界面和交互界面确定后,就是利用PyQt5提供的工具来实现。
PyQt5的界面设计元素 在采用PyQt5设计界面时,我们常用和标准的工具就是Designer。如何安装和使用Designer,我实在不耐烦讲。网上教程(视频)和参考貌似比较多。就只是在CSDN上,就一大堆,CSDN搜索pyqt5 designer即可。如果英语好,也有更多参考内容,随便举个栗子。我就大概拉一拉界面设计元素,以作参考。
界面设计元素分类 在Designer里面,PyQt5的界面设计元素分为8个大类:
Layouts:界面布局Spacers:空间间隔Buttons:动作按钮Item Views:数据视图Item Widgets:数据控件Containers:空间容器Input Widgets:输入控件Display Widgets:显示控件 直接使用的话,就大概是按照这这八类来布置。这个分类,基本上是按照控件的功能来分的。使用的时候,我们还应该根据前面所讲的开发需求来进行进一步的分类。
所以我们的分类是这样的:
a.报表功能类(共18个控件)
b.输入功能类(共22个控件)
c.布局功能类(共16个控件)
各个具体的控件功能,已经一些教程进行详细的指导。
编译为Python代码使用 转换命令行 我们很随意的假设要展示三组数据(报表1:树表列),然后用Designer画了一个控件。
然后很随意的存成文件tree_data_view.ui,用下面的命令,就可以把界面文件转化成Python文件。这里增加一个参数-x,就给输出的文件增加一个运行的例子。
pyuic5 .\tree_data_view.ui -o .\tree_data_view.py -x 接下来就能运行,显示界面示例。
python .\tree_data_view.ui -o .\tree_data_view.py -x 跟我们在Designer里面画的界面一模一样。ui文件的源代码也很简单,很容易看懂。
<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>Form</class> <widget class="
"DNS_PROBE_FINISHED_NXDOMAIN" 是一个常见的错误,它表示无法解析 DNS,找不到指定的域名。这可能是由以下原因之一导致的:
1. 拼写错误:请确保您在访问的网站地址中没有拼写错误。根据您提供的信息,网址是 xxx.com.cn。请再次检查是否有任何拼写错误。
2. DNS问题:可能是您的计算机或网络配置中的 DNS 设置出现问题。DNS(Domain Name System)负责将域名转换为相应的IP地址。如果 DNS 设置不正确,您的计算机将无法解析域名。您可以尝试通过以下方法解决该问题:
- 检查网络连接:确保您的计算机已连接到互联网,并且网络连接正常。
- 运行Windows网络诊断:在Windows系统中,您可以尝试运行网络诊断工具来自动检测和修复网络连接问题。右键单击任务栏上的网络图标,选择"诊断"或"故障排除"等选项,然后按照提示进行操作。
3. 网站问题:如果您确定您的网络连接正常,并且您没有拼写错误,那么可能是目标网站本身出现了问题。这可能是由于网站服务器故障、域名配置问题或其他技术问题导致的。在这种情况下,您可以尝试稍后再次访问该网站,或者联系网站的管理员以获得更多信息。
总之,如果您遇到 "DNS_PROBE_FINISHED_NXDOMAIN" 错误,首先请确保没有拼写错误,然后检查您的网络连接和DNS设置。如果问题仍然存在,可能是目标网站出现了问题,您可以尝试稍后再次访问。
更全的解释,可以参考下面这篇文章👇
为什么网站打不开-太平洋IT百科手机版
Windows 10的沙箱(Windows Sandbox)是一项先进的虚拟化技术,它提供了一个隔离的运行环境,可以在其中安全地运行不受信任的应用程序或文件,同时不会对主机操作系统和数据造成任何影响。沙箱为用户提供了一个安全的测试和试验环境,可以防止恶意软件感染和系统损坏。在本文中,我们将详细介绍Windows 10的沙箱技术,包括其原理、功能和使用方法。
一、沙箱的原理
Windows 10的沙箱通过使用硬件虚拟化技术来创建一个隔离的虚拟环境,其中可以运行一个独立的、临时的操作系统实例。该虚拟环境与主机操作系统完全隔离,它具有自己的文件系统、注册表和网络堆栈。当用户启动沙箱时,会自动创建一个干净的操作系统副本,用户可以在其中运行应用程序、打开文件或执行其他操作。
沙箱采用了一种轻量级虚拟化技术,称为容器虚拟化。它利用主机操作系统的核心组件,如虚拟化管理程序(VMM)和容器管理器(CM),来创建和管理虚拟环境。这种虚拟化技术使沙箱具有快速启动、低资源消耗和高性能的特点。
二、沙箱的功能
隔离性:沙箱提供了一个完全隔离的环境,使用户可以安全地运行不受信任的应用程序或文件。任何在沙箱中运行的应用程序或文件都无法访问主机操作系统或其他应用程序的敏感数据。
临时性:每次启动沙箱时,都会创建一个全新的操作系统实例。这意味着任何在沙箱中进行的更改、下载的文件或安装的应用程序都将在关闭沙箱后被完全删除,不会对主机系统产生任何影响。
安全性:沙箱中的操作系统实例是在主机操作系统的基础上创建的,因此可以利用主机操作系统的安全功能和更新机制来提供更高的安全性。
快速启动:沙箱的启动非常迅速,几乎可以立即进入隔离环境,无需等待长时间的系统启动过程。
兼容性:沙箱可以运行几乎任何应用程序,包括浏览器、办公套件、开发工具等。用户可以在沙箱中进行各种测试、评估和试验,而无需担心对主机系统的影响。
三、使用Windows 10沙箱
检查系统要求:首先,确保计算机符合使用Windows 10沙箱的要求。计算机必须运行Windows 10 Pro、Enterprise或Education版本,并且支持硬件虚拟化。
启用虚拟化:在计算机的BIOS设置中,确保已启用硬件虚拟化技术(如Intel VT-x或AMD-V)。具体的启用方式可能因计算机型号而异,可以参考计算机制造商提供的文档或支持页面。
启用沙箱功能:在Windows 10中,通过以下步骤启用沙箱功能:
打开“控制面板”并选择“程序”。在“程序和功能”下,选择“打开或关闭Windows功能”。在功能列表中,找到“Windows沙箱”并选中复选框。点击“确定”并等待Windows完成功能的启用。 启动沙箱:启动沙箱非常简单。在开始菜单中搜索并打开“Windows沙箱”,然后点击“是”以确认管理员权限。接下来,沙箱将自动启动,并显示一个隔离的桌面环境。
运行应用程序或打开文件:在沙箱中,可以运行不受信任的应用程序、打开下载的文件或执行其他操作。任何在沙箱中进行的更改都不会影响主机系统或其他应用程序。
关闭沙箱:当完成在沙箱中的操作后,可以直接关闭沙箱窗口即可。关闭沙箱后,所有在沙箱中创建的文件和更改都将被删除,不会对主机系统产生任何影响。
四、注意事项和限制
在使用Windows 10沙箱时,需要注意以下事项和限制:
沙箱是一个隔离环境,不能访问主机操作系统或其他网络资源。因此,某些功能和应用程序可能无法在沙箱中正常运行。
沙箱中的操作系统实例是临时的,每次启动都会创建一个新的实例。这意味着沙箱中的文件、配置和安装的应用程序都将在关闭沙箱后被删除。
沙箱中的性能可能会受到一定影响,因为它是在虚拟化环境中运行的。某些资源密集型应用程序可能会在沙箱中运行较慢。
沙箱仅适用于Windows 10 Pro、Enterprise或Education版本,不适用于Windows 10 Home版本。
沙箱需要计算机支持硬件虚拟化技术,如Intel VT-x或AMD-V。如果计算机不支持虚拟化,将无法使用沙箱功能。
五、总结
Windows 10的沙箱是一项强大的虚拟化技术,为用户提供了一个安全、隔离的环境,可以在其中运行不受信任的应用程序或文件。沙箱具有隔离性、临时性、安全性、快速启动和兼容性等特点。通过启用沙箱功能并按照指导操作,用户可以安全地测试和试验各种应用程序,而不会对主机系统造成任何影响。然而,用户需要注意沙箱的限制和注意事项,确保合理使用并理解其局限性。总的来说,Windows 10沙箱是保护计算机安全和隐私的有用工具,可用于日常使用和测试环境。
摘要:Matlab绘制带纹理填充的多柱状图代码,包含带数据标签版本和不带数据标签版本。
1.实现效果: 实现效果:
1.普通双柱状图和三柱状图,多柱状图。
2.带纹理填充的多柱状图。
3.带数据标签和纹理填充的多柱状图。
难点:
1.实现带纹理填充的柱状图。
2.解决不能显示图例问题。
效果1:
效果2
效果3:
二,实现打印效果 适合需要打印时的展示效果。
调用一直报错404。找不到服务。
1.确实服务是否注册到了eureka
确实是注册成功了的。
2.直接调用服务的提供方的接口查询
发现能调用成功
3.检查是不是调用方接口有问题
打断点发现能调用进去。
后续通过断点,发现调用的时候,能够正常调用到服务的提供方。服务的提供方本身也没有问题,直接调用的时候,也能正常调用。
对比原来openfeign的测试类 发现在Controller的时候,能够成功的 使用的是@RestController 而一直报错404的使用是@Controller。
特地记录一下 使用openfeign的时候 controller层的注解一定要使用@RestController
在 MySQL 数据库中,可以使用 LIMIT 和 OFFSET 子句来实现分页功能。LIMIT 用于指定返回结果的最大行数,而 OFFSET 用于指定结果集的偏移量。
以下是实现分页的基本语法:
SELECT * FROM table_name LIMIT <offset>, <row_count>; 其中 <offset> 是结果集的偏移量,表示从第几行开始返回结果,<row_count> 是要返回的最大行数。
例如,要获取从第 21 行开始的 10 行数据,可以使用以下查询:
SELECT * FROM table_name LIMIT 20, 10; 这将返回结果集中第 21 行到第 30 行的数据。
在应用程序中,通常会根据当前页数和每页显示的行数来计算偏移量和行数。假设每页显示 10 行,要显示第 3 页的数据,可以使用以下公式:
offset = (page_number - 1) * page_size 其中 page_number 是页数,page_size 是每页的行数。使用这个公式,可以将它应用到查询中,以获取特定页的数据。
请注意,OFFSET 的性能会随着偏移量的增加而变得更差,因为它需要跳过指定数量的行。在处理大数据集时,可能需要考虑使用其他优化方法,例如基于游标的分页查询。
另外,为了确保分页查询的结果是按照期望的顺序返回,通常需要在查询中包含适当的排序条件,例如使用 ORDER BY 子句。
上述的那个公式怎么用的?
假设有一个名为 users 的表,其中包含用户信息,我们希望每页显示 10 条记录。
要获取第 3 页的数据,我们可以使用以下公式计算偏移量:
实用调试小技巧 1.什么是bug?2.调试是什么?有多重要?3.debug和release的介绍。4.windows环境调试介绍。4.1常见调试快捷键4.2 调试的时候查看程序当前信息4.2.1监视:4.2.2内存4.2.3调用堆栈4.2.4反汇编4.2.5寄存器 5.一些调试的实例。6.如何写出好(易于调试)的代码。7.编程常见的错误。 1.什么是bug? 谈到bug,我们知道bug的中文意思是虫子,飞蛾的意思。至于为什么bug一词会用到计算机领域的话得追溯到第一台计算机的诞生。
上面个你看到的就是世界上第一个bug的诞生。它的来源也是非常的有意思,当时世界上的第一台计算机出了故障不能正常的工作,于是工作人员就进入计算机内部检查(当时的计算机非常的大,达到人可以进去),这个时候发现计算机的一个晶体管内有个飞蛾死在了里面于是把飞蛾清理干净,换了零件之后,计算机就可以正常的工作了。于是科学家们就把此次事件记录了下来,一直延伸到现在,我们就把计算机成程序出问题说成是bug。
2.调试是什么?有多重要? 调试(英语:Debugging / Debug),又称除错,是发现和减少计算机程序或电子仪器设备中程序
错误的一个过程。
简单点说调试就是一个发现错误,并且精准的找到错误地点,找到合理的解决方案的一个纠错过程。
在程序员界里有这样一句话:一个优秀的程序员同时也是一个优秀的侦探。
调试的基本步骤:
1.发现程序错误的存在
2.以隔离、消除等方式对错误进行定位
3.确定错误产生的原因
4.提出纠正错误的解决办法
5.对程序错误予以改正,重新测试 3.debug和release的介绍。 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优 的,以便用户很好地使用。 当然两个版本还是有一些的不同之处的,就比如生成的可执行文件的大小是不一样的(.exe文件后缀名的文件);
我们先看Debug版本的:
再看Release版本的:
这样一对比就可以看出了Release版本的可执行文件的大小是比Debug版本的小的,这是因为Release版本是对代码做了一些优化的,而我们的Debug版本是没有做优化的,所以在Release版本下的文件所占内存大小是更小的。
那问题来了,既然有两个版本我们应该选择哪个版本呢?
首先我们知道这两个版本的区别就是一个做了优化一个没有做优化。
那既然我们要检查我们编写的代码哪里出问题了,是不是应该我们写的什么代码就调试什么代码,也就是说没有做任何的优化效果,这样的话及时是一点小错误我们也可以即使的发现并作出及时的改进。所以我们调试首选的就是Debug版本的。
相反的,如果我们调试用的是Release版本的话,我们知道Release版本是对我们写的代码进行了优化作用的,如果我们用这个版本进行调试的话,有些错误的代码时被优化过的,那就说明一些较小的错误是不能被发现的,那么日积月累把这些小错误累计起来就会出大错误的。这么讲的话那Release版本到底在什么时候用到呢。我们要知道一点的时我们编写出来的文件终归是要给客户使用的,既然时给别人用的我们就要保证我们编写的程序不能出现错误,这个时候Release版本就有用出来,当我们调试的时候一些小的错误没有及时的发现就直接给用户使用,这个时候我么Release版本就会帮我们优化代码弥补那些小错误,这个时候客户就能正常的时候了。
4.windows环境调试介绍。 4.1常见调试快捷键 使用一些常用调试快捷键:快捷键作用F5启动调试,经常用来直接跳到下一个断点处。F9创建断点和取消断点断点的重要作用,可以在程序的任意位置设置断点。这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。F10逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。F11逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部(这是最长用的)。CTRL+F5开始执行不调试,如果你想让程序直接运行起来而不调试就可以直接使用。 CTRL+F5 直接执行
我们代码后,想要直接看到我们编写的结果,就用这个组合键,就能在终端看到我们的编写结果了。这个是可以跳过断点的。F10逐步调试
万一我们代码编写的时候出现了错误,我们也很难看出哪里出错了,这个时候就需要对我们的代码逐行的进行检验,这个时候我们就可以按F10F5 时执行键
这个一般和F9断点搭配的使用,当我们设置好了断点之后,只需要按F5便会跳到断点处。F9 设计断点
但我们编写的代码又几百行甚至更多的时候,而我们又知道他在那个部分出错了,如果我们还按F10逐行的进行检验的话就会浪费大量的时间和精力,这个时候我们可以设计断点。设计断点的方法有两种:1.选中一行按F9 。2.用鼠标左键点击改行最左边。当我们设置好了断点之后再按F5就可以直接跳到我们的断点处了。
4.2 调试的时候查看程序当前信息 一般我们使用到的有:
注意这些都是在进行调试的时候才能使用的
4.2.1监视: 这个监视窗口我们可以自主输入想要看到结果,在按F10的过程最左边有一个箭头,这个箭头就是我们执行到哪一行的标志。
同时除了手动的,还用自动的。
自动窗口会根据你调试到哪里自动生成可监视的变量,但是他的局限性就是不能一直监视,一点过来变量的作用域就不能在监视了。
4.2.2内存 监视内存的方法和上面是一样的:
它可以显示处变量子内存的分布。
4.2.3调用堆栈 4.2.4反汇编 调用堆栈的方法有两种:1.鼠标右键点击转到反汇编。2.窗口打开
4.2.5寄存器 5.一些调试的实例。 实例一:
#include <stdio.h> int main() { int i = 0; int arr[10] = {0}; for(i=0; i<=12; i++) { arr[i] = 0; printf("
input:
size(480,300); rect(100,50,300,100); ellipse(100,50,150,50); line(0,30,100,50); point(200,200); output:
static std::string base64Decode(const char* Data, int DataByte) { //解码表 const char DecodeTable[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, // '+' 0, 0, 0, 63, // '/' 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, // '0'-'9' 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, // 'A'-'Z' 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, // 'a'-'z' }; std::string strDecode; int nValue; int i = 0; while (i < DataByte) { if (*Data !
攻击者在入侵网站时,通常要通过各种方式写入Webshell,从而获得服务器的控制权限,比如执行系统命令、读取配置文件、窃取用户数据,篡改网站页面等操作。
本文介绍十款常用的Webshell管理工具,以供你选择,你会选择哪一个?
1、中国菜刀(Chopper)
中国菜刀是一款专业的网站管理软件,用途广泛,使用方便,小巧实用。只要支持动态脚本的网站,都可以用中国菜刀来进行管理!在非简体中文环境下使用,自动切换到英文界面。UNICODE方式编译,支持多国语言输入显示。
2、蚁剑(AntSword)
AntSword是一个开放源代码,跨平台的网站管理工具,旨在满足渗透测试人员以及具有权限和/或授权的安全研究人员以及网站管理员的需求。
github项目地址:GitHub - AntSwordProject/antSword: 中国蚁剑是一款跨平台的开源网站管理工具。AntSword is a cross-platform website management toolkit.
3、C刀(Cknife)
这是一款跨平台的基于配置文件的中国菜刀,把所有操作给予用户来定义。
github项目地址:GitHub - Chora10/Cknife: Cknife
4、冰蝎(Behinder)
冰蝎”是一款动态二进制加密网站管理客户端。
github地址:https://github.com/rebeyond/Behinder
5、Xise
XISE WebShell管理工具。
6、Altman
Altman3是一款渗透测试软件,基于.Net4.0开发,依托Eto.Form可以完美运行在Windows、Linux、Mac等多个平台。
github项目地址:https://github.com/keepwn/Altman
7、Weevely
Weevely是一种Python编写的webshell管理工具,跨平台,只支持PHP。
github项目地址:https://github.com/epinna/weevely3
用法示例:
weevely generate <password> <path> weevely <URL> <password> [cmd] 同时,在Kali 2.0 版本下,集成了三款Web后门工具:WebaCoo、weevely、PHP Meterpreter。
8、QuasiBot
QuasiBot是一款php编写的webshell管理工具,可以对webshell进行远程批量管理。
github项目地址:https://github.com/Smaash/quasibot
9、Webshell-Sniper
这是一款基于终端的webshell管理工具,仅支持在类Unix系统上运行。
github项目地址:https://github.com/WangYihang/Webshell-Sniper
用法示例:
Usage : python webshell-sniper.py [URL] [METHOD] [AUTH] Example : python webshell-sniper.py http://127.0.0.1/c.php POST c 10、WebshellManager
状态码状态码英文名称中文描述100Continue继续。客户端应继续其请求101Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议200OK请求成功。一般用于GET与POST请求201Created已创建。成功请求并创建了新的资源202Accepted已接受。已经接受请求,但未处理完成203Non-Authoritative Information非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本204No Content无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档205Reset Content重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域206Partial Content部分内容。服务器成功处理了部分GET请求300Multiple Choices多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择301Moved Permanently永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替302Found临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI303See Other查看其它地址。与301类似。使用GET和POST请求查看304Not Modified未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源305Use Proxy使用代理。所请求的资源必须通过代理访问306Unused已经被废弃的HTTP状态码307Temporary Redirect临时重定向。与302类似。使用GET请求重定向400Bad Request客户端请求的语法错误,服务器无法理解401Unauthorized请求要求用户的身份认证402Payment Required保留,将来使用403Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求404Not Found服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面405Method Not Allowed客户端请求中的方法被禁止406Not Acceptable服务器无法根据客户端请求的内容特性完成请求407Proxy Authentication Required请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权408Request Time-out服务器等待客户端发送的请求时间过长,超时409Conflict服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突410Gone客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置411Length Required服务器无法处理客户端发送的不带Content-Length的请求信息412Precondition Failed客户端请求信息的先决条件错误413Request Entity Too Large由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息414Request-URI Too Large请求的URI过长(URI通常为网址),服务器无法处理415Unsupported Media Type服务器无法处理请求附带的媒体格式416Requested range not satisfiable客户端请求的范围无效417Expectation Failed服务器无法满足Expect的请求头信息500Internal Server Error服务器内部错误,无法完成请求501Not Implemented服务器不支持请求的功能,无法完成请求502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应503Service Unavailable由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中504Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求505HTTP Version not supported服务器不支持请求的HTTP协议的版本,无法完成处理
前言 公司使用Apollo做配置中心,也没怎么具体了解过。只知道有配置使用时用@Value就能获取到了,而且还能自动刷新。遂一直以为@Value本身有自动刷新功能。
直到有一天用nacos做配置中心。哎?我的配置怎么不能自动刷新了?@Value出问题了吗?
我的controller 我的nacos配置 修改nacos配置 把account.name改为杜甫
可以看到控制台也打印了refresh keys changed
可是调用接口得到的值仍是更新前的
后面才知道nacos要配合@RefreshScope使用才能自动刷新。Apollo的@Value自动刷新功能算是一个机制了。
于是加上@RefreshScope试验一下
先把nacos中的account.name配置改为李白,启动项目之后,再改为杜甫,然后调用接口获取account.name
这次获取到的配置就是最新的了。
为什么Apollo能实现@Value的自动刷新,而nacos需要配合@RefreshScope呢?
本文旨在分析Apollo和nacos为什么能实现配置自动,和他们的实现方式有什么不同。
先简单看一下Apollo为什么能实现@Value的自动更新
Apollo的自动更新 Apollo的自动更新比较简单
AutoUpdateConfigChangeListener#onChange
AutoUpdateConfigChangeListener是一个监听器,监听ConfigChangeEvent事件。客户端会一直向远程拉取,当配置发生变化就会发布这个事件。
可以看到通过springValueRegistry获取到了SpringValue的集合。SpringValue是Apollo维护的来更新spring中@Value值变化后的类。里面维护了@Value的占位符,bean,field等信息。通过继承BeanPostProcessor实现postProcessBeforeInitialization来维护起来的,这里不管他,只要知道他维护了@Value注释的字段和bean信息就行了。
继续看updateSpringValue
typescript复制代码private void updateSpringValue(SpringValue springValue) { try { //解析出表达式的值 Object value = resolvePropertyValue(springValue); //更新 springValue.update(value); logger.info("Auto update apollo changed value successfully, new value: {}, {}", value, springValue); } catch (Throwable ex) { logger.error("Auto update apollo changed value failed, {}", springValue.toString(), ex); } } 继续走springValue.update()方法
我们这里挑一个看
可以看到这里先获取bean(弱引用),然后更新这个字段的值(Field.set()方法)。
🚀 美国知乎 Quora 旗下 Poe.com 上可以免费Claude试用 7 天。 最强竞品 Claude 最近实现了史诗升级,支持十万 token 上下文,并且可以处理英文书籍,但申请使用需要付费。
而在美国知乎 Quora 旗下 Poe.com 上可以免费试用 7 天。不少用户已经试用了该平台,并使用 AI 回答了谷歌发布的 PaLM2 技术报告的相关问题,其中还包括对 GPT-4 和 OpenAI 的评价。
此外,Claude 还可以模仿鲁迅文风进行中文创作。
🚀 PaLM2针对100种语言进行训练,已被用于25项功能和产品。 谷歌推出新的通用大语言模型PaLM2,使用了近3.6万亿个token进行训练,相比之前版本的7800亿个token表现更为优秀,可以完成更加复杂的任务,
但具体训练数据规模及细节信息均未公开。PaLM2针对100种语言进行训练,已被用于25项功能和产品。
由于人工智能军备竞赛日趋白热化,相关研究人员呼吁企业加大透明度。
此外,围绕底层技术的争议也越来越激烈,一些科学家呼吁需要建立新的制度来应对人工智能的潜在问题。
🚀 微软 CEO 纳德拉否认了 OpenAI 受其控制的说法,并指出微软只是该组织的股东之一。 微软 CEO 纳德拉否认了 OpenAI 受其控制的说法,并指出微软只是该组织的股东之一。
OpenAI 是一个限制利润的实体,其使命由非盈利董事会控制,微软与其有着良好的商业合作。
纳德拉认为,AI 研发正在快速推进,微软应该好好利用新技术,并指出 AI 正沿着正确方向快速进化,人类参与其中这是一种设计选择。
🚀 谷歌计划在更多业务领域植入生成式人工智能,从而扩大收入,提高利润率。 据报道,谷歌正在将最新的生成式人工智能技术整合到其产品阵列中,内部文件显示,谷歌网络广告业务成为最新整合的部门。
谷歌计划在更多业务领域植入生成式人工智能,从而扩大收入,提高利润率。
谷歌最终目标是开发基于人工智能的客户服务系统,服务谷歌上百种产品。
🚀 纳德拉认为,人类将利用新工具,创造更多的机会和开发者。 微软首席执行官萨蒂亚・纳德拉呼吁社会团结,共同利用人工智能技术的机会并降低危险。
生成式人工智能技术迅速发展引起各方关注,谷歌和微软等科技公司进行人工智能军备竞赛。尽管有担忧和抵制,越来越多的人相信人工智能将带来变革和改变游戏规则,创造新的就业机会和改变教育行业。
纳德拉认为,人类将利用新工具,创造更多的机会和开发者。
更多AI工具,参考AiBard123
配置文件: “开机自启选项”配置文件:C:\phpstudy_pro/COM/xp.ini
[General] Apache2.4.39=D:/phpstudy_pro/Extensions/Apache2.4.39/bin/httpd.exe| 开关控制: 开机自启(启用/停用):显示名称:phpstudy服务。服务名称:phpStudySrv
注:猜测:此服务的功能:启动ini配置文件内的服务,只启动时执行一次
注:面板开启两次,此服务被停止,期间面板显示“开机自启”状态不正常。
# 注:修改后重启面板才会更新显示值 # 启用“开机自启”,将服务改为自动 sc config phpStudySrv start= auto # 关闭“开机自启”,将服务改为手动 sc config phpStudySrv start= demand apache、mysql等(启动/停止) 启动所有服务(开机配置文件xp.ini内的服务) powershell -c "Restart-Service -Name phpStudySrv" # 注:当面板开启时,会自动将已关闭服务再次开其。 # 关闭apache wmic process where caption='httpd.exe' delete # 关闭mysql wmic process where caption='mysqld.exe' delete 退出小皮面板界面 注:鼠标退出界面时,此两个进程都会关闭
# 注:猜测:显示界面,守护服务启动状态,已启动服务中断时通知"phpStudyServer.exe"再次开启,启动失败则终止扫描并显示状态。 # 关闭phpStudyServer.exe再手动启动phpStudyServer.exe -install,界面的守护失效,点击“启动”后会再次生效,手动启动的phpStudyServer.exe能正常配合 wmic process where caption="phpstudy_pro.exe" delete # 注:猜测:接受"phpstudy_pro.exe"面板的服务控制并操作服务(启动,停止等)。 wmic process where (commandline like "%phpStudyServer.exe -install") delete 注意事项: UI界面第一次启动会直接覆盖:%phpstudy_pro%\Extensions\Apache2.
目录
一、测试连通性命令ping
二、跟踪节点命令tracert
三、查询和更新网络配置参数命令ipconfig
四、配置网络参数命令netsh
1、进入netsh后的子命令
2、导入导出脚本
3、网络配置
五、查询域名命令nslookup
六、网络状态查询统计命令netstat
七、地址解析查询和增删改命令arp
八、路由显示和增删改命令route
九、连接远程桌面命令net
一、测试连通性命令ping 用法: ping [-t] [-a] target_name (可以多个横线连用,不要忘记写目标地址,下面的语句同理)
-t Ping 指定的主机,直到停止。若要查看统计信息并继续操作,请键入 Ctrl+Break;若要停止,请键入 Ctrl+C。
-a 将地址解析为主机名。
-n count 要发送的回显请求数。
-l size 发送缓冲区大小。
-f 在数据包中设置“不分段”标记(仅适用于 IPv4)。
-i TTL 生存时间。
-v TOS 服务类型(仅适用于 IPv4。该设置已被弃用,对 IP 标头中的服务类型字段没有任何影响)。
-r count
记录计数跃点的路由(仅适用于 IPv4)。
-s count
计数跃点的时间戳(仅适用于 IPv4)。
-j host-list
与主机列表一起使用的松散源路由(仅适用于 IPv4)。
-k host-list
与主机列表一起使用的严格源路由(仅适用于 IPv4)。
-w timeout 等待每次回复的超时时间(毫秒)。
-R 同样使用路由标头测试反向路由(仅适用于 IPv6)。根据 RFC 5095,已弃用此路由标头。如果使用此标头,某些系统可能丢弃回显请求。
原因:
装配体中的连接点的参数和自定义的管路的FilterSketch的大小必须一致。
自定义管路相关视频:
Solidworks教程:自定义管道详细教程_哔哩哔哩_bilibili
17-SW-自定义PVC管道_哔哩哔哩_bilibili
反思:出现问题,一定要看solidworks的提示。提示看看出了什么问题。
路由跳转四种方式
1、router-link 1、不带参数 <router-link :to="{name: 'home'}"> <router-link :to="{path: '/home'}"> // name,path都可以,建议使用name // 注意:router-link中链接如果是'/'开始是从根路由开始,如果开始不带'/',则从当前路由开始 2、带参数 <router-link :to="{name:'home', params: {id:1}}"> // params传参数 (类似post) // 路由配置 path: "/home/:id" 或者 path: "/home:id" // 不配置path ,第一次可请求,刷新页面id会消失 // 配置path,刷新页面id会保留 // html 取参 $route.params.id // script 取参 this.$route.params.id <router-link :to="{name:'home', query: {id:1}}"> // query传参数 (类似get,url后面会显示参数) // 路由可不配置 // html 取参 $route.query.id // script 取参 this.$route.query.id 2、this.$router.push() 函数里使用 1、不带参数 this.$router.push('/home') this.$router.push({name: '/home'}) this.$router.push({path: '/home'}) 2、query传参 this.$router.push({name: '/home', query: {id: '1'}}) this.
C#中的字符串类型string是常用的数据类型之一,它用于表示任意长度的Unicode字符序列。下面列举了一些C#中常用字符串的用法:
1.字符串连接
使用"+"符号或者string.Concat方法来连接多个字符串:
string str1 = "Hello"; string str2 = "World"; string str3 = str1 + " " + str2; string str4 = string.Concat(str1, " ", str2); 2.符串格式化
string str = string.Format("My name is {0} and I am {1} years old.", "Tom", 30); 3.字符串分割
string str = "Hello,World"; string[] strArray = str.Split(','); 4.字符串替换
使用string.Replace方法将字符串中的指定子串替换为新的字符串:
string str = "Hello,World"; string newStr = str.Replace("World", "C#"); 5.截取
string str = "Hello,World"; string subStr = str.